Files
vCard-Processor/style.css
2025-06-26 04:36:18 +01:00

448 lines
13 KiB
CSS

body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
margin: 0; /* Remove default margin */
padding: 0; /* Ensure no default padding */
background-color: #f8f9fa; /* Lighter grey background */
color: #212529; /* Darker text for better contrast */
line-height: 1.6;
font-size: 16px; /* Base font size */
}
h1, h2, h3 { /* Consistent heading styling */
color: #343a40; /* Dark grey for headings */
margin-top: 1.5em;
margin-bottom: 0.5em;
}
h1 {
font-size: 2.25rem; /* Larger H1 */
}
h2 {
font-size: 1.75rem;
}
h3 {
font-size: 1.25rem;
}
.main-container {
max-width: 1140px; /* Common max-width for containers */
margin: 0 auto; /* Center the container */
padding: 20px;
background-color: #ffffff; /* White background for content area */
box-shadow: 0 0 10px rgba(0,0,0,0.05); /* Subtle shadow for depth */
border-radius: 8px; /* Slightly rounded corners for the container */
margin-top: 20px; /* Space from top of viewport */
margin-bottom: 20px; /* Space from bottom of viewport */
}
input[type="file"] {
margin-bottom: 20px;
}
/* #vcardRawContent {
background-color: #eee;
border: 1px solid #ccc;
padding: 10px;
margin-top: 20px;
min-height: 50px;
white-space: pre-wrap;
word-wrap: break-word;
} */
#contactsTable {
width: 100%;
border-collapse: collapse; /* Keep collapsed borders */
margin-top: 25px; /* Consistent margin */
table-layout: fixed;
font-size: 0.9rem; /* Slightly smaller font for table data */
background-color: #fff; /* Ensure table background is white if container has different color */
border: 1px solid #dee2e6; /* Outer border for the table */
border-radius: 0.25rem; /* Rounded corners for the table itself */
overflow: hidden; /* To make border-radius clip tbody/thead */
}
#contactsTable th, #contactsTable td {
border: 1px solid #e9ecef; /* Lighter internal borders */
padding: 12px 15px; /* Increased padding */
text-align: left;
word-wrap: break-word;
}
/* Style for the "Other Properties" column to ensure pre-wrap is effective - No longer exists in main table */
/* #contactsTable td:last-child {
white-space: pre-wrap;
} */
#contactsTable th {
background-color: #f8f9fa; /* Very light grey for headers */
color: #495057; /* Darker text for header contrast */
font-weight: 600; /* Bolder headers */
border-bottom: 2px solid #dee2e6; /* Stronger bottom border for headers */
}
#contactsTable tr:nth-child(even) td { /* Target td for striping background */
background-color: #f8f9fa; /* Light stripe for even rows */
}
#contactsTable tr:hover td { /* Target td for hover background */
background-color: #e9ecef; /* Slightly darker hover for better feedback */
cursor: pointer;
}
/* Modal Styles */
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1000; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
padding-top: 60px;
}
.modal-content {
background-color: #fefefe;
margin: 5% auto; /* 5% from the top and centered */
padding: 20px;
border: 1px solid #888;
width: 80%; /* Could be more or less, depending on screen size */
max-width: 700px;
border-radius: 8px;
position: relative;
}
.close-button {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close-button:hover,
.close-button:focus {
color: black;
text-decoration: none;
cursor: pointer;
opacity: 1; /* From previous .close-button:hover, ensure it's here too */
}
/* Refined Modal Content Styles */
.modal-content h2 { /* Main modal title */
font-size: 1.75rem; /* Was 1.75rem */
color: #007bff; /* Accent color for modal title */
margin-bottom: 20px; /* Was 0.5em, now more explicit */
padding-bottom: 10px;
border-bottom: 1px solid #eee; /* Keep this border */
margin-top: 0; /* Ensure no top margin for main title */
}
.modal-content h3 { /* Section titles within modal */
font-size: 1.15rem; /* Was 1.25rem, slightly smaller for sub-sections */
color: #343a40; /* Consistent with other h3s */
margin-top: 25px; /* Increased space above section titles */
margin-bottom: 10px;
border-bottom: 1px dashed #ced4da; /* Dashed line for section separation */
padding-bottom: 8px;
}
.modal-content p { /* Paragraphs in modal */
margin-bottom: 8px; /* Slightly more space */
line-height: 1.5; /* Improved readability */
}
.modal-content p strong { /* Bold text within paragraphs, e.g., "Family Name:" */
color: #495057; /* Softer, consistent color */
margin-right: 5px; /* Space after the label */
display: inline-block; /* Allows min-width if needed later */
/* min-width: 120px; */ /* Optional: if alignment is desired */
}
.modal-content ul {
list-style-type: none;
padding-left: 0;
margin-bottom: 15px; /* Space after lists */
}
.modal-content ul li {
background-color: #fff; /* Cleaner background for list items */
border: 1px solid #e9ecef; /* Lighter border, consistent with table */
padding: 10px 12px; /* Consistent padding */
margin-bottom: 8px;
border-radius: 0.25rem; /* Standard radius */
line-height: 1.5;
}
.modal-content ul li div { /* For nested divs within li, like formatted ADR */
padding: 3px 0; /* Small padding for structure */
}
.modal-content ul li div strong { /* For labels within formatted ADR, e.g., "Street:" */
display: inline-block;
min-width: 100px; /* Adjust as needed */
color: #495057;
margin-right: 8px;
font-weight: 500; /* Less strong than section headers */
}
#modalNote {
white-space: pre-wrap;
background-color: #f8f9fa; /* Consistent light background */
border: 1px solid #dee2e6; /* Consistent border */
padding: 12px;
border-radius: 0.25rem;
min-height: 60px;
line-height: 1.5;
color: #212529; /* Ensure text color is set */
font-size: 0.95rem; /* Slightly smaller for notes */
}
/* Tab Navigation Styles */
.tab-navigation {
border-bottom: 2px solid #dee2e6; /* Slightly thicker border */
margin-bottom: 25px; /* Increased margin */
display: flex;
}
.tab-button {
background-color: transparent; /* Make inactive tabs blend more */
border: none; /* Remove default border */
border-bottom: 2px solid transparent; /* Placeholder for active state */
padding: 12px 18px; /* Adjusted padding */
cursor: pointer;
font-size: 1rem; /* Use rem for font size */
margin-right: 8px;
border-radius: 0; /* Sharp corners for a more modern tab look */
outline: none;
transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out;
color: #495057; /* Softer text color for inactive tabs */
}
.tab-button:hover {
color: #007bff; /* Accent color on hover */
border-bottom-color: #cfe2ff; /* Light blue bottom border on hover */
}
.tab-button.active-tab-button {
color: #007bff; /* Active tab text color */
border-bottom-color: #007bff; /* Active tab underline */
font-weight: 600; /* Slightly bolder for active tab */
}
/* Tab Pane Styles */
.tab-pane {
display: none; /* Hidden by default */
padding: 10px;
/* border: 1px solid #ccc; */ /* Optional: border around content */
/* border-top: none; */ /* Optional: if tab-navigation has bottom border */
}
.tab-pane.active-pane {
display: block; /* Shown when active */
}
.tab-description {
background-color: #e9ecef; /* Light grey background, distinct from main content area */
padding: 15px;
margin-top: 0; /* Align with top if h1 has margin-top */
margin-bottom: 25px; /* Space before the main content of the tab */
border-radius: 0.25rem; /* Consistent border-radius */
font-size: 0.95rem; /* Slightly smaller font for descriptive text */
line-height: 1.6;
color: #495057; /* Softer text color */
}
.tab-description p {
margin-top: 0;
margin-bottom: 10px; /* Space between paragraphs within the description */
}
.tab-description p:last-child {
margin-bottom: 0; /* No bottom margin for the last paragraph */
}
/* VCard Generator Form Styles */
#vcardGeneratorForm fieldset {
margin-bottom: 20px;
border: 1px solid #ddd;
padding: 15px;
border-radius: 8px; /* Consistent with main-container */
background-color: #fdfdfd; /* Slightly off-white for fieldset */
}
#vcardGeneratorForm legend {
font-weight: 600; /* Bolder legend */
color: #007bff; /* Accent color for legend */
padding: 0 10px; /* More padding around legend text */
font-size: 1.1rem;
}
#vcardGeneratorForm div { /* Container for label + input */
margin-bottom: 15px; /* Increased spacing */
}
#vcardGeneratorForm label {
display: block;
margin-bottom: 5px; /* Increased space below label */
font-weight: 500;
color: #495057; /* Slightly softer label color */
font-size: 0.95rem;
}
#vcardGeneratorForm input[type="text"],
#vcardGeneratorForm input[type="tel"],
#vcardGeneratorForm input[type="email"],
#vcardGeneratorForm input[type="url"],
#vcardGeneratorForm select,
#vcardGeneratorForm textarea {
width: 100%; /* Let box-sizing handle padding/border */
padding: 10px 12px; /* Increased padding */
border: 1px solid #ced4da; /* Standard Bootstrap-like border color */
border-radius: 0.25rem; /* Standard border-radius */
box-sizing: border-box;
font-size: 1rem; /* Consistent font size */
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
#vcardGeneratorForm input[type="text"]:focus,
#vcardGeneratorForm input[type="tel"]:focus,
#vcardGeneratorForm input[type="email"]:focus,
#vcardGeneratorForm input[type="url"]:focus,
#vcardGeneratorForm select:focus,
#vcardGeneratorForm textarea:focus {
border-color: #80bdff; /* Bootstrap focus color */
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); /* Bootstrap focus shadow */
}
#vcardGeneratorForm textarea {
resize: vertical;
min-height: 80px; /* Minimum height for textareas */
}
#vcardGeneratorForm button[type="button"] {
background-color: #007bff;
color: white;
padding: 10px 15px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
#vcardGeneratorForm button[type="button"]:hover {
transition: background-color 0.3s ease-in-out, border-color 0.3s ease-in-out;
/* General button styling - primary actions */
}
#vcardGeneratorForm button[type="button"]:hover {
background-color: #0056b3;
border-color: #0056b3;
}
/* Download button specific styling (can override general if needed, or be a class) */
#downloadVcfButton {
background-color: #28a745;
border-color: #28a745;
}
#downloadVcfButton:hover {
background-color: #1e7e34;
border-color: #1e7e34;
}
/* File Input Styling - common trick using a label */
input[type="file"] {
display: none; /* Hide the actual file input */
}
.file-upload-label {
display: inline-block;
background-color: #6c757d; /* Secondary button color */
color: white;
padding: 10px 15px;
border: none;
border-radius: 0.25rem;
cursor: pointer;
font-size: 1rem;
transition: background-color 0.2s ease-in-out;
margin-bottom: 20px; /* Keep existing margin */
}
.file-upload-label:hover {
background-color: #5a6268;
}
/* Modal Close Button - already has some styling, let's refine slightly */
.close-button {
color: #6c757d; /* Softer color */
float: right;
font-size: 1.75rem; /* Slightly larger */
font-weight: bold;
line-height: 1; /* Ensure it aligns well */
opacity: 0.75;
transition: color 0.15s ease-in-out, opacity 0.15s ease-in-out;
}
.close-button:hover,
.close-button:focus {
color: #343a40; /* Darker on hover/focus */
text-decoration: none;
cursor: pointer;
opacity: 1;
}
/* Specific layout for grouped inline elements if any (e.g. phone + type) */
/* For now, using display:block on labels makes them stack nicely */
/* Style for the generated VCard display area */
#generatedVCardArea h3 {
margin-top: 10px; /* Add some space above this heading */
}
/* Privacy Policy Tab Specific Styles */
#privacyView .privacy-content {
padding: 10px 0; /* Padding for top/bottom, horizontal handled by .main-container or .tab-pane */
line-height: 1.7;
font-size: 0.95rem;
color: #343a40; /* Slightly darker than tab-description for more formal text */
}
#privacyView .privacy-content h1 { /* Already styled globally, but ensure it's distinct if needed */
margin-bottom: 25px; /* More space after main Privacy Policy title */
}
#privacyView .privacy-content h2 {
font-size: 1.3rem;
color: #007bff;
margin-top: 30px; /* More space before each section */
margin-bottom: 15px;
padding-bottom: 8px;
border-bottom: 1px solid #e0e0e0;
}
#privacyView .privacy-content p {
margin-bottom: 15px; /* Space between paragraphs */
}
#privacyView .privacy-content ul {
list-style-type: disc;
padding-left: 25px; /* Indent list items further */
margin-bottom: 20px; /* Space after lists */
}
#privacyView .privacy-content li {
margin-bottom: 10px; /* Space between list items */
}