- Extract duplicated theme-toggle styles into shared mixin (theme-toggle-styles) - Remove duplicate CSS across privacy.scss, admin.scss, index.scss, and main.scss - Apply mixin consistently to .theme-toggle, .theme-toggle-admin classes - Update git repository references from GitHub to git.deco.sh - Update README.md, privacy.html, and deploy script URLs - Build optimized CSS with consolidated styles
402 lines
6.6 KiB
SCSS
402 lines
6.6 KiB
SCSS
// Import variables and mixins
|
|
@use '../variables' as *;
|
|
@use '../mixins' as *;
|
|
|
|
// Main application styles for index.html
|
|
.container {
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
padding: $spacing-lg;
|
|
}
|
|
|
|
.header {
|
|
margin-bottom: $spacing-lg;
|
|
padding: $spacing-md 0;
|
|
border-bottom: 1px solid var(--border-color);
|
|
}
|
|
|
|
.header-content {
|
|
@include flex-between;
|
|
align-items: flex-start;
|
|
gap: $spacing-lg;
|
|
}
|
|
|
|
.header-text {
|
|
flex: 1;
|
|
|
|
h1 {
|
|
color: var(--text-color);
|
|
font-size: $font-size-xxl;
|
|
margin: 0 0 $spacing-xs 0;
|
|
}
|
|
|
|
p {
|
|
color: var(--text-color);
|
|
opacity: 0.8;
|
|
margin: 0;
|
|
font-size: $font-size-md;
|
|
}
|
|
}
|
|
|
|
// Responsive header
|
|
@include mobile {
|
|
.header-content {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
gap: $spacing-md;
|
|
}
|
|
|
|
.header-text {
|
|
text-align: center;
|
|
|
|
h1 {
|
|
font-size: $font-size-xl;
|
|
}
|
|
|
|
p {
|
|
font-size: $font-size-sm;
|
|
}
|
|
}
|
|
|
|
.theme-toggle {
|
|
@include theme-toggle-styles;
|
|
align-self: center;
|
|
}
|
|
}
|
|
|
|
.title {
|
|
color: var(--text-color);
|
|
font-size: $font-size-xxl;
|
|
margin: 0;
|
|
}
|
|
|
|
.subtitle {
|
|
color: var(--text-color);
|
|
opacity: 0.8;
|
|
margin: $spacing-xs 0;
|
|
}
|
|
|
|
// Map and view controls
|
|
.view-controls {
|
|
@include flex-center;
|
|
gap: $spacing-sm;
|
|
margin-bottom: $spacing-lg;
|
|
}
|
|
|
|
.view-btn {
|
|
@include button;
|
|
|
|
&.active {
|
|
background-color: $primary-color;
|
|
color: white;
|
|
}
|
|
|
|
&:not(.active) {
|
|
background-color: transparent;
|
|
color: var(--text-color);
|
|
border: 1px solid var(--border-color);
|
|
}
|
|
}
|
|
|
|
// Map container
|
|
.map-view {
|
|
width: 100%;
|
|
height: 500px;
|
|
border-radius: $border-radius-md;
|
|
overflow: hidden;
|
|
box-shadow: $shadow-md;
|
|
|
|
@include mobile {
|
|
height: 400px;
|
|
}
|
|
}
|
|
|
|
// Specific map element styling
|
|
#map {
|
|
height: 500px;
|
|
width: 100%;
|
|
border-radius: $border-radius-md;
|
|
box-shadow: $shadow-md;
|
|
margin: $spacing-lg 0;
|
|
|
|
@include mobile {
|
|
height: 400px;
|
|
}
|
|
}
|
|
|
|
// Reports table (main page)
|
|
.reports-table {
|
|
@include table-base;
|
|
|
|
th {
|
|
background-color: var(--bg-secondary, var(--card-bg));
|
|
color: var(--text-color);
|
|
font-weight: 600;
|
|
padding: 1rem;
|
|
border-bottom: 2px solid var(--border-color);
|
|
|
|
&:first-child {
|
|
border-top-left-radius: $border-radius-md;
|
|
}
|
|
|
|
&:last-child {
|
|
border-top-right-radius: $border-radius-md;
|
|
}
|
|
}
|
|
|
|
td {
|
|
padding: 1rem;
|
|
border-bottom: 1px solid var(--border-color);
|
|
color: var(--text-color);
|
|
vertical-align: top;
|
|
|
|
&:first-child {
|
|
padding-left: 1.5rem;
|
|
}
|
|
|
|
&:last-child {
|
|
padding-right: 1.5rem;
|
|
}
|
|
}
|
|
|
|
tbody tr {
|
|
transition: background-color 0.2s ease;
|
|
|
|
&:hover {
|
|
background-color: var(--bg-hover, var(--table-hover));
|
|
}
|
|
|
|
&:last-child td {
|
|
border-bottom: none;
|
|
}
|
|
}
|
|
|
|
// Specific cell styles
|
|
td.location-cell {
|
|
color: var(--text-color);
|
|
font-size: $font-size-sm;
|
|
font-weight: 500;
|
|
max-width: 250px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
td.details-cell {
|
|
color: var(--text-color);
|
|
font-size: 14px;
|
|
font-weight: 400;
|
|
max-width: 200px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
font-style: italic;
|
|
}
|
|
|
|
td.time-cell {
|
|
color: var(--text-color);
|
|
font-size: 12px;
|
|
font-weight: 400;
|
|
}
|
|
|
|
td.remaining-cell {
|
|
color: var(--text-color);
|
|
font-size: 12px;
|
|
font-weight: 500;
|
|
|
|
&.urgent {
|
|
@include status-indicator(var(--status-danger, $danger-color), white);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.025em;
|
|
}
|
|
|
|
&.warning {
|
|
@include status-indicator(var(--status-warning, $warning-color), white);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.025em;
|
|
}
|
|
|
|
&.normal {
|
|
@include status-indicator(var(--status-info, $info-color), white);
|
|
}
|
|
}
|
|
|
|
@include mobile {
|
|
display: block;
|
|
overflow-x: auto;
|
|
white-space: nowrap;
|
|
|
|
th, td {
|
|
min-width: 120px;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Form section
|
|
.form-section {
|
|
@include card;
|
|
margin-bottom: $spacing-lg;
|
|
|
|
h3 {
|
|
margin-top: 0;
|
|
margin-bottom: $spacing-md;
|
|
color: var(--text-color);
|
|
}
|
|
}
|
|
|
|
// Map section with card styling
|
|
.map-section {
|
|
@include card;
|
|
margin-bottom: $spacing-lg;
|
|
|
|
h2 {
|
|
margin-top: 0;
|
|
margin-bottom: $spacing-md;
|
|
color: var(--text-color);
|
|
}
|
|
}
|
|
|
|
// Reports header
|
|
.reports-header {
|
|
@include flex-between;
|
|
align-items: center;
|
|
margin-bottom: $spacing-lg;
|
|
|
|
h2 {
|
|
margin: 0;
|
|
}
|
|
}
|
|
|
|
// View toggle buttons
|
|
.view-toggle {
|
|
display: flex;
|
|
gap: $spacing-xs;
|
|
}
|
|
|
|
.toggle-btn {
|
|
@include button($size: sm);
|
|
|
|
&.active {
|
|
background-color: $primary-color;
|
|
color: white;
|
|
}
|
|
|
|
&:not(.active) {
|
|
background-color: transparent;
|
|
color: var(--text-color);
|
|
border: 1px solid var(--border-color);
|
|
}
|
|
}
|
|
|
|
// View containers
|
|
.view-container {
|
|
margin-top: $spacing-md;
|
|
}
|
|
|
|
// Map info styling
|
|
.map-info {
|
|
margin-top: $spacing-md;
|
|
padding: $spacing-md;
|
|
background-color: var(--bg-secondary);
|
|
border-radius: $border-radius-sm;
|
|
border: 1px solid var(--border-color);
|
|
|
|
p {
|
|
margin: $spacing-xs 0;
|
|
font-size: $font-size-sm;
|
|
color: var(--text-color);
|
|
|
|
&:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Table controls
|
|
.table-controls {
|
|
margin-bottom: $spacing-md;
|
|
}
|
|
|
|
.table-info {
|
|
text-align: center;
|
|
|
|
p {
|
|
margin: 0;
|
|
color: var(--text-color);
|
|
font-size: $font-size-md;
|
|
}
|
|
}
|
|
|
|
.table-container {
|
|
overflow-x: auto;
|
|
}
|
|
|
|
// Add location form
|
|
.add-location-form {
|
|
display: grid;
|
|
grid-template-columns: 1fr auto;
|
|
gap: $spacing-md;
|
|
align-items: end;
|
|
|
|
@include mobile {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.location-input {
|
|
@include input-base;
|
|
min-width: 300px;
|
|
|
|
@include mobile {
|
|
min-width: unset;
|
|
}
|
|
}
|
|
|
|
.add-btn {
|
|
@include button($bg-color: $success-color);
|
|
}
|
|
}
|
|
|
|
// Location count display
|
|
.location-count {
|
|
color: var(--text-color);
|
|
font-size: $font-size-md;
|
|
margin-bottom: $spacing-md;
|
|
text-align: center;
|
|
}
|
|
|
|
// Error/Success messages
|
|
.error-message {
|
|
@include card($spacing-md);
|
|
background-color: #f8d7da;
|
|
color: #721c24;
|
|
border: 1px solid #f5c6cb;
|
|
margin: $spacing-md 0;
|
|
|
|
&.success {
|
|
background-color: #d4edda;
|
|
color: #155724;
|
|
border-color: #c3e6cb;
|
|
}
|
|
}
|
|
|
|
// Loading states
|
|
.loading {
|
|
text-align: center;
|
|
color: var(--text-color);
|
|
opacity: 0.7;
|
|
padding: $spacing-lg;
|
|
}
|
|
|
|
// Theme toggle (shared with admin)
|
|
.theme-section {
|
|
position: fixed;
|
|
top: $spacing-lg;
|
|
right: $spacing-lg;
|
|
z-index: 100;
|
|
|
|
@include mobile {
|
|
position: static;
|
|
margin-bottom: $spacing-lg;
|
|
text-align: center;
|
|
}
|
|
}
|