:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#213547;background-color:#f5f7fa;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--primary-color: #2563eb;--primary-hover: #1d4ed8;--success-color: #16a34a;--warning-color: #ea580c;--danger-color: #dc2626;--border-color: #e2e8f0;--card-bg: #ffffff;--text-muted: #64748b}@media(prefers-color-scheme:dark){:root{color:#e2e8f0;background-color:#0f172a;--border-color: #334155;--card-bg: #1e293b;--text-muted: #94a3b8}}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}h1,h2,h3,h4{margin:0;line-height:1.2}button{border-radius:6px;border:1px solid var(--border-color);padding:.5em 1em;font-size:.875rem;font-weight:500;font-family:inherit;background-color:var(--card-bg);color:inherit;cursor:pointer;transition:all .2s ease}button:hover{border-color:var(--primary-color);background-color:var(--primary-color);color:#fff}button:disabled{opacity:.5;cursor:not-allowed}button:disabled:hover{background-color:var(--card-bg);border-color:var(--border-color);color:inherit}input[type=text]{border-radius:6px;border:1px solid var(--border-color);padding:.5em 1em;font-size:.875rem;font-family:inherit;background-color:var(--card-bg);color:inherit;width:100%}input[type=text]:focus{outline:2px solid var(--primary-color);outline-offset:-1px}ul{list-style:none;padding:0;margin:0}.app{min-height:100vh;display:flex;flex-direction:column}.app-header{background:linear-gradient(135deg,var(--primary-color) 0%,#1e40af 100%);color:#fff;padding:2rem;text-align:center}.app-header h1{font-size:2rem;margin-bottom:.5rem}.app-header .subtitle{opacity:.9;margin:0}.app-main{flex:1;padding:2rem;max-width:1400px;margin:0 auto;width:100%}.app-footer{background-color:var(--card-bg);border-top:1px solid var(--border-color);padding:1rem;text-align:center;color:var(--text-muted);font-size:.875rem}.upload-section{max-width:600px;margin:0 auto}.file-upload{margin-bottom:2rem}.drop-zone{border:2px dashed var(--border-color);border-radius:12px;padding:3rem 2rem;text-align:center;transition:all .2s ease;background-color:var(--card-bg)}.drop-zone:hover{border-color:var(--primary-color);background-color:#2563eb0d}.drop-zone.loading{opacity:.7;pointer-events:none}.drop-zone input[type=file]{display:none}.drop-zone label{cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:1rem}.upload-icon{font-size:3rem}.upload-text{color:var(--text-muted)}.loading-text{color:var(--primary-color);font-weight:500}.file-info{margin-top:1rem;padding:1rem;background-color:var(--card-bg);border-radius:8px;border:1px solid var(--border-color)}.file-info details{margin-top:.5rem}.file-info summary{cursor:pointer;color:var(--text-muted);font-size:.875rem}.file-list{margin-top:.5rem;font-size:.75rem;max-height:150px;overflow-y:auto}.file-list li{padding:.25rem 0;font-family:monospace}.file-list li.highlight{color:var(--success-color);font-weight:500}.error-message{margin-top:1rem;padding:1rem;background-color:#dc26261a;border:1px solid var(--danger-color);border-radius:8px;color:var(--danger-color)}.info-box{background-color:var(--card-bg);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem}.info-box h3{margin-bottom:1rem}.info-box ul{text-align:left;padding-left:1.5rem;list-style:disc}.info-box li{margin-bottom:.5rem}.privacy-note{margin-top:1rem;padding:.75rem;background-color:#16a34a1a;border-radius:6px;font-size:.875rem;color:var(--success-color)}.data-overview{margin-bottom:2rem}.overview-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.clear-btn{background-color:transparent}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1rem}.stat-card{background-color:var(--card-bg);border:1px solid var(--border-color);border-radius:8px;padding:1rem;text-align:center}.stat-value{display:block;font-size:1.75rem;font-weight:700;color:var(--primary-color)}.stat-label{display:block;font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-top:.25rem}.date-section{margin-bottom:2rem}.date-section h2{margin-bottom:1rem}.date-selector{background-color:var(--card-bg);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem}.date-selector.empty{text-align:center;color:var(--text-muted)}.date-range-info{margin-bottom:1rem;font-size:.875rem;color:var(--text-muted)}.date-count{opacity:.7}.calendar-nav{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.calendar-nav h3{font-size:1.1rem}.nav-btn{padding:.25rem .75rem;font-size:.75rem}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:1.5rem}.calendar-header{text-align:center;font-size:.75rem;font-weight:600;color:var(--text-muted);padding:.5rem}.calendar-cell{aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:6px;font-size:.875rem;border:1px solid transparent;background-color:transparent;padding:.25rem}.calendar-cell.empty{cursor:default}.calendar-cell.unavailable{color:var(--text-muted);opacity:.4}.calendar-cell.available{background-color:#2563eb1a;cursor:pointer}.calendar-cell.available:hover{background-color:#2563eb33;border-color:var(--primary-color);color:inherit}.calendar-cell.selected{background-color:var(--primary-color);color:#fff}.calendar-cell .service-count{font-size:.625rem;opacity:.7}.date-list{border-top:1px solid var(--border-color);padding-top:1rem}.date-list h4{font-size:.875rem;color:var(--text-muted);margin-bottom:.75rem}.date-buttons{display:flex;flex-wrap:wrap;gap:.5rem}.date-btn{display:flex;flex-direction:column;align-items:center;padding:.5rem .75rem;font-size:.75rem;min-width:70px}.date-btn.selected{background-color:var(--primary-color);color:#fff;border-color:var(--primary-color)}.date-btn-day{font-weight:600}.date-btn-date{font-size:.625rem;opacity:.8}.date-btn-services{font-size:.625rem;opacity:.7}.day-details h2{margin-bottom:1rem}.day-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:1.5rem}.summary-item{background-color:var(--card-bg);border:1px solid var(--border-color);border-radius:8px;padding:1rem;text-align:center}.summary-item .number{display:block;font-size:2rem;font-weight:700}.summary-item.active .number{color:var(--success-color)}.summary-item.excluded .number{color:var(--danger-color)}.summary-item.trips .number{color:var(--primary-color)}.summary-item.base .number{color:var(--warning-color)}.summary-item .label{display:block;font-size:.75rem;color:var(--text-muted);text-transform:uppercase;margin-top:.25rem}.day-content{display:grid;grid-template-columns:1fr 2fr;gap:1.5rem}@media(max-width:1024px){.day-content{grid-template-columns:1fr}}.calendar-list{background-color:var(--card-bg);border:1px solid var(--border-color);border-radius:12px;padding:1rem;margin-bottom:1rem}.calendar-list h3{font-size:1rem;margin-bottom:1rem;display:flex;align-items:center;gap:.5rem}.calendar-list h3 .count{font-weight:400;color:var(--text-muted);font-size:.875rem}.calendar-list.active h3{color:var(--success-color)}.calendar-list.excluded h3{color:var(--danger-color)}.calendar-list.base h3{color:var(--warning-color)}.empty-message{color:var(--text-muted);font-size:.875rem;font-style:italic}.calendar-group{margin-bottom:1rem}.calendar-group:last-child{margin-bottom:0}.calendar-group h4{font-size:.75rem;color:var(--text-muted);margin-bottom:.5rem;display:flex;align-items:center;gap:.5rem}.badge{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;font-size:.75rem;font-weight:700}.badge.added{background-color:var(--success-color);color:#fff}.badge.removed{background-color:var(--danger-color);color:#fff}.calendar-item{background-color:#00000005;border-radius:6px;padding:.75rem;margin-bottom:.5rem}@media(prefers-color-scheme:dark){.calendar-item{background-color:#ffffff05}}.calendar-item:last-child{margin-bottom:0}.calendar-item.exception.added{border-left:3px solid var(--success-color)}.calendar-item.exception.removed{border-left:3px solid var(--danger-color)}.calendar-item-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.service-id{font-family:monospace;font-weight:600;font-size:.875rem}.exception-badge{font-size:.625rem;padding:.125rem .375rem;border-radius:4px;font-weight:600;text-transform:uppercase}.exception-badge.added{background-color:var(--success-color);color:#fff}.exception-badge.removed{background-color:var(--danger-color);color:#fff}.calendar-item-details{font-size:.75rem;color:var(--text-muted)}.days-of-week{display:flex;gap:2px;margin-bottom:.5rem}.day-indicator{width:20px;height:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;font-size:.625rem;font-weight:600}.day-indicator.active{background-color:var(--primary-color);color:#fff}.day-indicator.inactive{background-color:var(--border-color);color:var(--text-muted)}.date-range{display:flex;gap:.5rem}.date-range .label{color:var(--text-muted)}.exception-only{font-style:italic}.trips-list{background-color:var(--card-bg);border:1px solid var(--border-color);border-radius:12px;padding:1rem}.trips-list.empty{text-align:center;color:var(--text-muted)}.trips-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.trips-header h3{font-size:1rem}.trips-header .count{font-weight:400;color:var(--text-muted);font-size:.875rem}.trips-stats{display:flex;gap:1rem;font-size:.75rem;color:var(--text-muted)}.trips-controls{display:flex;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}.search-box{flex:1;min-width:200px;position:relative}.search-box input{padding-right:2rem}.clear-search{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);background:transparent;border:none;font-size:1.25rem;line-height:1;padding:.25rem;color:var(--text-muted)}.clear-search:hover{color:var(--danger-color);background:transparent}.view-controls{display:flex;gap:.5rem}.view-controls button{font-size:.75rem;padding:.375rem .75rem}.search-results-info{margin-bottom:1rem;padding:.5rem;background-color:#2563eb1a;border-radius:6px;font-size:.875rem;color:var(--primary-color)}.trips-by-route{max-height:600px;overflow-y:auto}.route-group{border:1px solid var(--border-color);border-radius:8px;margin-bottom:.5rem;overflow:hidden}.route-group:last-child{margin-bottom:0}.route-header{width:100%;display:flex;align-items:center;gap:.75rem;padding:.75rem;background-color:#00000005;border:none;border-radius:0;border-left:4px solid var(--border-color);text-align:left;font-size:.875rem}@media(prefers-color-scheme:dark){.route-header{background-color:#ffffff05}}.route-header:hover{background-color:#0000000d;color:inherit}@media(prefers-color-scheme:dark){.route-header:hover{background-color:#ffffff0d}}.route-badge{padding:.25rem .5rem;border-radius:4px;font-weight:600;font-size:.75rem;background-color:var(--primary-color);color:#fff}.route-name{flex:1;color:var(--text-muted);font-size:.75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trip-count{font-size:.75rem;color:var(--text-muted)}.route-trips{padding:.5rem;overflow-x:auto}.route-trips table{width:100%;border-collapse:collapse;font-size:.75rem}.route-trips th{text-align:left;padding:.5rem;background-color:#00000005;font-weight:600;color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none}@media(prefers-color-scheme:dark){.route-trips th{background-color:#ffffff05}}.route-trips th:hover{color:var(--primary-color)}.route-trips td{padding:.5rem;border-top:1px solid var(--border-color)}.route-trips .trip-id{font-family:monospace;font-size:.6875rem}.route-trips .headsign{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.route-trips .service-id{font-family:monospace;font-size:.6875rem;color:var(--text-muted)}.route-trips .direction{color:var(--text-muted)}@media(max-width:1024px){.day-summary{grid-template-columns:repeat(2,1fr)}}@media(max-width:768px){.app-header{padding:1.5rem 1rem}.app-header h1{font-size:1.5rem}.app-main{padding:1rem}.stats-grid{grid-template-columns:repeat(2,1fr)}.day-summary{grid-template-columns:1fr}.calendar-grid{gap:2px}.calendar-cell{font-size:.75rem}.trips-controls{flex-direction:column}.search-box{width:100%}.view-controls{justify-content:flex-end}}.validation-report{background-color:var(--card-bg);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem;margin-top:2rem}.validation-report h3{margin-bottom:.5rem}.validation-description{color:var(--text-muted);font-size:.875rem;margin-bottom:1rem}.validation-stats{font-size:.875rem;color:var(--text-muted);margin-bottom:1rem;padding:.5rem;background-color:#00000005;border-radius:6px}@media(prefers-color-scheme:dark){.validation-stats{background-color:#ffffff05}}.validation-stats .stat{font-weight:500}.validation-stats .separator{margin:0 .5rem;opacity:.5}.validation-success{display:flex;align-items:center;gap:.5rem;padding:1rem;background-color:#16a34a1a;border:1px solid var(--success-color);border-radius:8px;color:var(--success-color);font-weight:500}.validation-success .icon{font-size:1.25rem}.validation-errors{border:1px solid var(--danger-color);border-radius:8px;overflow:hidden}.validation-error-header{display:flex;align-items:center;gap:.5rem;padding:1rem;background-color:#dc26261a;color:var(--danger-color);font-weight:500}.validation-error-header .icon{font-size:1.25rem}.issues-list{list-style:none;padding:0;margin:0}.issue{border-top:1px solid var(--border-color)}.issue-header{width:100%;display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;background-color:transparent;border:none;border-radius:0;text-align:left;font-size:.875rem;cursor:pointer}.issue-header:hover{background-color:#00000005;color:inherit}@media(prefers-color-scheme:dark){.issue-header:hover{background-color:#ffffff05}}.expand-icon{font-size:.625rem;width:1rem;color:var(--text-muted)}.issue-file{font-family:monospace;font-weight:600;color:var(--danger-color)}.issue-field{font-family:monospace;color:var(--text-muted);font-size:.75rem}.issue-message{flex:1;color:var(--text-muted)}.issue-details{padding:.75rem 1rem 1rem 2.5rem;background-color:#00000005}@media(prefers-color-scheme:dark){.issue-details{background-color:#ffffff05}}.duplicates-header{font-size:.75rem;color:var(--text-muted);margin-bottom:.5rem}.duplicates-list{list-style:none;padding:0;margin:0;font-family:monospace;font-size:.75rem;max-height:200px;overflow-y:auto}.duplicates-list li{padding:.25rem 0;border-bottom:1px solid var(--border-color)}.duplicates-list li:last-child{border-bottom:none}.duplicates-list li.more{color:var(--text-muted);font-style:italic}.validation-spec-note{margin-top:1rem;padding:1rem;background-color:#00000005;border-radius:8px;font-size:.75rem;color:var(--text-muted)}@media(prefers-color-scheme:dark){.validation-spec-note{background-color:#ffffff05}}.validation-spec-note strong{display:block;margin-bottom:.5rem;color:inherit}.validation-spec-note ul{list-style:disc;padding-left:1.5rem;margin:0}.validation-spec-note li{margin-bottom:.25rem}.validation-spec-note code{background-color:#0000000d;padding:.125rem .25rem;border-radius:3px;font-size:.7rem}@media(prefers-color-scheme:dark){.validation-spec-note code{background-color:#ffffff1a}}
