ice/public/style.css
Deco Vander 7daced0cea Fix reports table text color with explicit th,td selector
Applied the exact same selector pattern as admin table:
- .reports-table th, .reports-table td { color: var(--text-color); }

This ensures both header and data cells explicitly inherit the correct
text color variable, matching the admin table behavior exactly.

Should resolve the white text visibility issue in dark mode.
2025-07-03 21:12:11 -04:00

579 lines
11 KiB
CSS

/* CSS Variables for theming */
:root {
--bg-color: #f4f4f9;
--text-color: #333;
--text-secondary: #666;
--text-tertiary: #999;
--card-bg: white;
--border-color: #ddd;
--input-bg: white;
--input-border: #ddd;
--button-bg: #007bff;
--button-hover: #0056b3;
--header-bg: transparent;
--footer-border: #ddd;
--table-header-bg: #f8f9fa;
--table-hover: #f8f9fa;
--toggle-bg: #f8f9fa;
--toggle-border: #dee2e6;
--toggle-active-bg: #007bff;
--shadow: rgba(0,0,0,0.1);
}
/* Dark mode variables */
[data-theme="dark"] {
--bg-color: #1a1a1a;
--text-color: #e0e0e0;
--text-secondary: #b0b0b0;
--text-tertiary: #909090;
--card-bg: #2d2d2d;
--border-color: #404040;
--input-bg: #333;
--input-border: #555;
--button-bg: #4a90e2;
--button-hover: #357abd;
--header-bg: transparent;
--footer-border: #404040;
--table-header-bg: #3a3a3a;
--table-hover: #3a3a3a;
--toggle-bg: #404040;
--toggle-border: #555;
--toggle-active-bg: #4a90e2;
--shadow: rgba(0,0,0,0.3);
}
/* Auto system theme detection */
@media (prefers-color-scheme: dark) {
:root[data-theme="auto"] {
--bg-color: #1a1a1a;
--text-color: #e0e0e0;
--text-secondary: #b0b0b0;
--text-tertiary: #909090;
--card-bg: #2d2d2d;
--border-color: #404040;
--input-bg: #333;
--input-border: #555;
--button-bg: #4a90e2;
--button-hover: #357abd;
--header-bg: transparent;
--footer-border: #404040;
--table-header-bg: #3a3a3a;
--table-hover: #3a3a3a;
--toggle-bg: #404040;
--toggle-border: #555;
--toggle-active-bg: #4a90e2;
--shadow: rgba(0,0,0,0.3);
}
}
@media (prefers-color-scheme: light) {
:root[data-theme="auto"] {
--bg-color: #f4f4f9;
--text-color: #333;
--text-secondary: #666;
--text-tertiary: #999;
--card-bg: white;
--border-color: #ddd;
--input-bg: white;
--input-border: #ddd;
--button-bg: #007bff;
--button-hover: #0056b3;
--header-bg: transparent;
--footer-border: #ddd;
--table-header-bg: #f8f9fa;
--table-hover: #f8f9fa;
--toggle-bg: #f8f9fa;
--toggle-border: #dee2e6;
--toggle-active-bg: #007bff;
--shadow: rgba(0,0,0,0.1);
}
}
body {
font-family: Arial, sans-serif;
line-height: 1.6;
margin: 0;
padding: 0;
background-color: var(--bg-color);
color: var(--text-color);
transition: background-color 0.3s ease, color 0.3s ease;
}
.container {
max-width: 1000px;
margin: 0 auto;
padding: 20px;
}
header {
text-align: center;
padding-bottom: 20px;
}
.map-section, .form-section {
margin-bottom: 20px;
padding: 15px;
background-color: var(--card-bg);
border-radius: 8px;
box-shadow: 0 2px 4px var(--shadow);
transition: background-color 0.3s ease;
}
.map-section {
height: auto;
min-height: 650px;
padding-bottom: 20px;
}
#map {
width: 100%;
height: 600px;
border-radius: 8px;
margin-bottom: 15px;
}
.form-group {
margin-bottom: 10px;
}
input[type="text"], textarea {
width: calc(100% - 20px);
padding: 8px;
margin-top: 5px;
border: 1px solid var(--input-border);
border-radius: 4px;
background-color: var(--input-bg);
color: var(--text-color);
transition: background-color 0.3s ease, border-color 0.3s ease;
}
.autocomplete-container {
position: relative;
width: 100%;
}
.autocomplete-list {
position: absolute;
top: 100%;
left: 0;
right: 0;
background: var(--card-bg);
border: 1px solid var(--border-color);
border-top: none;
border-radius: 0 0 4px 4px;
max-height: 200px;
overflow-y: auto;
z-index: 1000;
display: none;
box-shadow: 0 4px 6px var(--shadow);
}
.autocomplete-item {
padding: 10px;
cursor: pointer;
border-bottom: 1px solid var(--border-color);
color: var(--text-color);
}
.autocomplete-item:hover,
.autocomplete-item.selected {
background-color: var(--table-hover);
}
.autocomplete-item:last-child {
border-bottom: none;
}
.input-help {
color: var(--text-tertiary);
font-size: 0.85em;
margin-top: 4px;
display: block;
}
button[type="submit"] {
background-color: var(--button-bg);
color: white;
border: none;
padding: 10px 20px;
cursor: pointer;
border-radius: 4px;
transition: background-color 0.2s ease-in;
}
button[type="submit"]:hover {
background-color: var(--button-hover);
}
.message {
margin-top: 10px;
padding: 10px;
display: none;
border-radius: 4px;
}
.success {
background-color: #d4edda;
color: #155724;
}
.error {
background-color: #f8d7da;
color: #721c24;
}
/* Header layout for theme toggle */
.header-content {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 20px;
}
.header-text {
flex: 1;
}
/* Theme toggle button */
.theme-toggle {
background: var(--card-bg);
border: 2px solid var(--border-color);
border-radius: 50%;
width: 50px;
height: 50px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 2px 4px var(--shadow);
flex-shrink: 0;
}
.theme-toggle:hover {
transform: scale(1.1);
box-shadow: 0 4px 8px var(--shadow);
}
.theme-icon {
font-size: 20px;
transition: transform 0.3s ease;
}
[data-theme="dark"] .theme-icon {
transform: rotate(180deg);
}
footer {
text-align: center;
padding: 30px 20px;
margin-top: 30px;
border-top: 1px solid var(--footer-border);
clear: both;
transition: border-color 0.3s ease;
}
.disclaimer {
font-size: 0.8em;
color: var(--text-tertiary);
}
/* Reports header and toggle */
.reports-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.view-toggle {
display: flex;
gap: 10px;
}
.toggle-btn {
background-color: var(--toggle-bg);
border: 2px solid var(--toggle-border);
color: var(--text-color);
padding: 8px 16px;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
font-weight: 500;
transition: all 0.2s ease;
}
.toggle-btn:hover {
opacity: 0.8;
}
.toggle-btn.active {
background-color: var(--toggle-active-bg);
border-color: var(--toggle-active-bg);
color: white;
}
.toggle-btn.active:hover {
opacity: 0.9;
}
/* View containers */
.view-container {
width: 100%;
}
/* Table view styles */
.table-container {
overflow-x: auto;
}
.reports-table {
width: 100%;
border-collapse: collapse;
background: var(--card-bg);
color: var(--text-color);
border-radius: 8px;
overflow: hidden;
box-shadow: 0 2px 4px var(--shadow);
font-size: 14px;
transition: background-color 0.3s ease;
}
.reports-table th,
.reports-table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid var(--border-color);
color: var(--text-color);
}
.reports-table th {
background-color: var(--table-header-bg);
color: var(--text-color);
font-weight: bold;
}
.reports-table tr:hover {
background-color: var(--table-hover);
}
.reports-table tr:last-child td {
border-bottom: none;
}
.table-controls {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.table-info {
color: var(--text-tertiary);
font-size: 14px;
}
/* Table cell specific styles */
.location-cell {
font-weight: 500;
color: var(--text-color);
max-width: 250px;
}
.details-cell {
color: var(--text-secondary);
font-style: italic;
max-width: 200px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.time-cell {
font-size: 12px;
color: var(--text-tertiary);
}
.remaining-cell {
font-weight: 500;
font-size: 12px;
color: var(--text-color);
}
.remaining-cell.urgent {
color: #ff6b6b;
font-weight: 600;
}
.remaining-cell.warning {
color: #ffa726;
font-weight: 600;
}
.remaining-cell.normal {
color: #66bb6a;
}
.loading {
text-align: center;
color: var(--text-tertiary);
font-style: italic;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.container {
padding: 10px;
}
.header-content {
flex-direction: column;
align-items: center;
gap: 15px;
}
.header-text {
text-align: center;
}
.theme-toggle {
align-self: center;
}
header h1 {
font-size: 1.5em;
}
header p {
font-size: 0.9em;
}
.map-section, .form-section {
padding: 10px;
margin-bottom: 15px;
}
#map {
height: 400px;
}
.form-group {
margin-bottom: 15px;
}
input[type="text"], textarea {
font-size: 16px; /* Prevents zoom on iOS */
width: calc(100% - 16px);
padding: 12px 8px;
}
button[type="submit"] {
width: 100%;
padding: 15px;
font-size: 16px;
}
.reports-header {
flex-direction: column;
align-items: stretch;
gap: 15px;
text-align: center;
}
.reports-header h2 {
font-size: 1.3em;
margin-bottom: 0;
}
.view-toggle {
justify-content: center;
}
.toggle-btn {
flex: 1;
font-size: 14px;
padding: 12px 8px;
}
.reports-table {
font-size: 12px;
}
.reports-table th,
.reports-table td {
padding: 8px 4px;
}
.location-cell {
max-width: 120px;
font-size: 11px;
}
.details-cell {
max-width: 100px;
font-size: 11px;
}
.time-cell {
font-size: 10px;
}
.remaining-cell {
font-size: 10px;
}
.autocomplete-list {
max-height: 150px;
}
.input-help {
font-size: 0.8em;
}
footer {
padding: 20px 10px;
font-size: 0.9em;
}
}
/* Extra small screens */
@media (max-width: 480px) {
.container {
padding: 5px;
}
header h1 {
font-size: 1.3em;
}
.map-section, .form-section {
padding: 8px;
}
#map {
height: 300px;
}
.reports-table th {
font-size: 10px;
padding: 6px 2px;
}
.reports-table td {
font-size: 10px;
padding: 6px 2px;
}
.location-cell {
max-width: 100px;
}
.details-cell {
max-width: 80px;
}
.toggle-btn {
font-size: 12px;
padding: 10px 6px;
}
}