:root {
    color-scheme:light;
    --ink:#243b35;
    --muted:#596b64;
    --paper:#f5f6f1;
    --line:#dce3da;
    --green:#216345;
    --amber:#80570d;
    --red:#a03232;
    --grey:#525e64;
}

* {
    box-sizing:border-box;
}

body {
    margin:0;
    background:var(--paper);
    color:var(--ink);
    font:16px/1.55 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}

a {
    color:var(--green);
    text-underline-offset:4px;
}

a:hover {
    text-decoration-thickness:2px;
}

button,input {
    font:inherit;
}

h1,h2,h3,h4,h5,p {
    margin-top:0;
}

h1 {
    font-size:clamp(1.9rem,3.4vw,2.8rem);
    line-height:1.13;
    letter-spacing:-.04em;
    margin-bottom:14px;
}

h2 {
    font-size:1.5rem;
    line-height:1.25;
    letter-spacing:-.025em;
    margin-bottom:12px;
}

h3 {
    font-size:1.12rem;
    margin-bottom:10px;
}

h4,h5 {
    font-size:.9rem;
    margin-bottom:8px;
}

p {
    margin-bottom:12px;
}

code {
    font: .8rem/1.5 ui-monospace,SFMono-Regular,Consolas,monospace;
    overflow-wrap:anywhere;
}

time {
    font-variant-numeric:tabular-nums;
}

.site-header {
    min-height:90px;
    padding:20px max(24px,calc((100vw - 1440px)/2));
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:20px;
    background:#fff;
    border-bottom:1px solid var(--line);
}

.brand {
    display:flex;
    gap:13px;
    align-items:center;
    text-decoration:none;
    font-size:.8rem;
    letter-spacing:.13em;
    font-weight:750;
    color:var(--ink);
}

.brand-mark {
    display:grid;
    place-items:center;
    width:42px;
    height:42px;
    background:var(--ink);
    color:#fff;
    border-radius:50%;
    font:600 .8rem/1 system-ui;
    letter-spacing:-.02em;
}

.brand-caption {
    display:block;
    color:var(--muted);
    letter-spacing:0;
    font-size:.8rem;
    font-weight:400;
    margin-top:3px;
}

.timezone {
    font-size:.8rem;
    color:var(--muted);
}

.page {
    max-width:1488px;
    margin:0 auto;
    padding:44px 24px 64px;
}

.page-heading {
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:24px;
    margin-bottom:28px;
}

.page-heading p {
    color:var(--muted);
    margin-bottom:0;
}

.eyebrow {
    text-transform:uppercase;
    letter-spacing:.15em;
    font-size:.69rem;
    font-weight:750;
    color:var(--green);
    margin-bottom:12px;
}

.summary {
    text-align:right;
    min-width:185px;
}

.summary strong {
    display:block;
    font-size:1.15rem;
}

.summary span {
    font-size:.8rem;
    color:var(--muted);
}

.panel {
    background:#fff;
    border:1px solid var(--line);
    border-radius:14px;
    overflow:hidden;
}

.table-scroll {
    overflow-x:auto;
}

table {
    border-collapse:collapse;
    width:100%;
    text-align:left;
}

th,td {
    padding:20px 22px;
    vertical-align:top;
    border-bottom:1px solid var(--line);
}

thead th {
    background:#eef2eb;
    color:var(--muted);
    font-size:.69rem;
    text-transform:uppercase;
    letter-spacing:.08em;
    font-weight:650;
}

tbody tr:last-child>th,tbody tr:last-child>td {
    border-bottom:0;
}

.course-table tbody th {
    min-width:200px;
}

.course-table td {
    font-size:.84rem;
}

.course-code {
    display:block;
    text-transform:uppercase;
    font-size:.66rem;
    letter-spacing:.12em;
    color:var(--muted);
    margin-bottom:5px;
}

.course-name {
    font-size:1rem;
    color:var(--ink);
    text-decoration:none;
}

.cell-detail {
    display:block;
    color:var(--muted);
    font-size:.76rem;
    margin-top:6px;
    font-weight:400;
}

.snapshot-id {
    overflow-wrap:anywhere;
}

.text-link {
    white-space:nowrap;
    text-decoration:none;
    font-weight:600;
}

.text-link span[aria-hidden] {
    margin-left:8px;
}

.band,.state {
    display:inline-block;
    font-size:.65rem;
    line-height:1.4;
    font-weight:750;
    letter-spacing:.035em;
    border-radius:5px;
    padding:4px 7px;
    vertical-align:middle;
    background:#edf0f1;
    color:var(--grey);
    overflow-wrap:anywhere;
}

.band.green,.state.fresh,.state.complete {
    background:#e9f3ea;
    color:var(--green);
}

.band.amber {
    background:#fff1d5;
    color:var(--amber);
}

.band.red {
    background:#fbeae7;
    color:var(--red);
}

.state.stale,.state.partial {
    background:#fff2dc;
    color:#80570d;
}

.state.verified {
    border:1px solid var(--green);
    background:transparent;
    color:var(--green);
}

.state.expired {
    background:#fff2dc;
    color:#80570d;
}

.state.none {
    background:#edf0f1;
    color:var(--grey);
}

.course-report {
    padding:24px;
    margin-top:36px;
}

.report-fields {
    display:grid;
    grid-template-columns:minmax(120px, 180px) minmax(0, 1fr);
    gap:9px 20px;
    font-size:.84rem;
}

.report-fields dt {
    color:var(--muted);
}

.report-fields dd,.report-lightning {
    overflow-wrap:anywhere;
    white-space:pre-wrap;
}

.report-lightning,.report-history {
    font-size:.84rem;
    margin-top:20px;
}

.lightning-note {
    color:var(--muted);
}

.report-history li {
    padding:20px 0;
    border-top:1px solid var(--line);
}

.band.unknown,.state.unknown,.state.insufficient_horizon,.state.invalid,.state.missing {
    background:#edf0f1;
    color:var(--grey);
}

.back-link {
    display:inline-block;
    font-size:.85rem;
    margin-bottom:22px;
    text-decoration:none;
}

.window-form {
    padding:24px;
    margin-bottom:40px;
}

.form-heading {
    margin-bottom:20px;
}

.form-heading h2 {
    font-size:1.13rem;
    margin-bottom:5px;
}

.form-heading p {
    font-size:.8rem;
    color:var(--muted);
    margin-bottom:0;
}

.form-fields {
    display:grid;
    grid-template-columns:1.1fr .9fr 1fr 1fr auto;
    gap:18px;
    align-items:start;
}

label {
    display:block;
    font-size:.8rem;
    font-weight:650;
}

label span {
    display:block;
    font-size:.68rem;
    font-weight:400;
    color:var(--muted);
    margin-top:5px;
}

input {
    display:block;
    width:100%;
    margin-top:7px;
    padding:10px 12px;
    min-height:45px;
    border:1px solid #a8b8ae;
    border-radius:6px;
    background:#fff;
    color:var(--ink);
}

input:focus {
    outline:2px solid var(--green);
    outline-offset:2px;
}

.button {
    display:inline-block;
    border:1px solid var(--green);
    background:var(--green);
    color:#fff;
    border-radius:6px;
    padding:11px 18px;
    font-size:.85rem;
    font-weight:650;
    text-decoration:none;
    cursor:pointer;
    min-height:45px;
}

.form-fields .button {
    margin-top:27px;
    white-space:nowrap;
}

.button:hover {
    background:#174a33;
}

.input-error {
    color:#8f2424;
    background:#fff0ec;
    border-left:3px solid #a03232;
    padding:12px 15px;
    font-size:.9rem;
}

.section-heading {
    display:flex;
    align-items:start;
    justify-content:space-between;
    gap:20px;
    margin-bottom:20px;
}

.section-heading>p {
    font-size:.78rem;
    max-width:300px;
    color:var(--muted);
}

.evaluation-grid,.context-grid {
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:22px;
}

.evaluation {
    padding:24px;
}

.evaluation>.section-heading {
    margin-bottom:4px;
}

.evaluation>p {
    font-size:.8rem;
    color:var(--muted);
    margin-bottom:22px;
}

.metrics {
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:22px;
}

.indicator h4 {
    color:var(--muted);
    font-size:.76rem;
    font-weight:500;
}

.metric-value {
    font-variant-numeric:tabular-nums;
    display:block;
    font-size:1.65rem;
    font-weight:650;
    letter-spacing:-.04em;
    line-height:1.35;
}

.unit {
    font-size:.8rem;
    letter-spacing:0;
    font-weight:450;
}

.indicator>.band {
    margin-top:5px;
}

.metric-note {
    display:block;
    color:var(--muted);
    font-size:.7rem;
    margin-top:6px;
}

.threshold {
    font-size:.71rem;
    color:var(--muted);
    margin:9px 0 0;
}

.off-hour {
    border-top:1px solid var(--line);
    margin-top:25px;
    padding-top:18px;
}

.off-hour p {
    font-size:.76rem;
}

.interval-view {
    padding:12px 0;
}

.interval-view p {
    overflow-wrap:anywhere;
}

.approximate {
    background:#f4f6ef;
    border-radius:6px;
    padding:12px;
}

.bin-details {
    margin:20px 0;
    font-size:.77rem;
}

.bin-details summary,.sort-details summary {
    cursor:pointer;
    font-weight:600;
    padding:8px 0;
}

.bin-details dl,.missing-panel dl {
    margin:8px 0;
}

.bin-details dd {
    margin:4px 0 14px;
    overflow-wrap:anywhere;
    color:var(--muted);
}

dt {
    font-weight:600;
}

dd {
    margin:0;
}

.reason-list {
    list-style:none;
    padding:0;
    margin:16px 0;
    font-size:.75rem;
}

.reason-list li {
    margin:8px 0;
}

.reason-list code {
    display:block;
    color:#4e6459;
    font-size:.67rem;
}

.reason-list span {
    color:var(--muted);
}

.daylight {
    padding:22px 24px;
    margin-top:22px;
    display:grid;
    grid-template-columns:1fr 1.5fr 1fr;
    gap:24px;
}

.daylight p {
    font-size:.8rem;
    color:var(--muted);
}

.daylight dl {
    display:grid;
    grid-template-columns:auto 1fr;
    gap:8px 20px;
    font-size:.8rem;
}

.daylight .threshold {
    margin-top:0;
}

.provenance {
    font-size:.76rem;
    color:var(--muted);
    padding:16px 0 28px;
    overflow-wrap:anywhere;
}

.comparison-section {
    margin-top:24px;
    margin-bottom:36px;
}

.comparison-table {
    min-width:1190px;
    table-layout:fixed;
}

.comparison-table th,.comparison-table td {
    padding:20px 12px;
}

.comparison-table th:first-child {
    width:17%;
}

.comparison-table th:last-child {
    width:21%;
}

.comparison-table th:nth-child(2) {
    width:13%;
}

.comparison-table tbody th {
    font-size:.8rem;
    font-weight:500;
}

.rank {
    display:inline-block;
    font-weight:700;
    font-size:1.15rem;
    margin:0 9px 12px 0;
}

.requested-tag {
    font-size:.63rem;
    color:var(--green);
    border:1px solid #bed3c0;
    padding:3px 6px;
    border-radius:4px;
}

.window-start {
    display:block;
    font-size:.82rem;
}

.comparison-table tr[data-requested=true] {
    background:#fafcf8;
}

.comparison-table tr[data-requested=true]>th {
    box-shadow:inset 3px 0 var(--green);
}

.comparison-period+.comparison-period {
    border-top:1px dashed var(--line);
    padding-top:14px;
    margin-top:14px;
}

.period-label {
    display:block;
    font-size:.65rem;
    color:var(--muted);
    margin-bottom:7px;
}

.comparison-table .metric-value {
    font-size:1.05rem;
    letter-spacing:-.02em;
}

.comparison-table .unit {
    font-size:.63rem;
}

.comparison-table .metric-note {
    font-size:.63rem;
}

.comparison-table .state {
    font-size:.58rem;
    padding:4px;
}

.comparison-context .reason-list {
    margin-top:0;
}

.comparison-context .reason-list span {
    font-size:.67rem;
}

.sort-details {
    font-size:.69rem;
    margin-top:20px;
}

.sort-key {
    display:block;
    font-size:.65rem;
    white-space:normal;
}

.context-grid {
    margin-top:36px;
}

.context-box {
    padding:24px;
}

.context-box h2 {
    text-transform:none;
    font-size:1.23rem;
}

.context-box>p:not(.eyebrow) {
    font-size:.8rem;
    color:var(--muted);
}

.context-values {
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:12px 20px;
    font-size:.84rem;
}

.context-values dt {
    font-weight:450;
    color:var(--muted);
}

.context-values dd {
    text-align:right;
    font-variant-numeric:tabular-nums;
    overflow-wrap:anywhere;
}

.daily-date+.daily-date {
    border-top:1px solid var(--line);
    padding-top:20px;
    margin-top:20px;
}

.daily-date h3 {
    font-size:.9rem;
}

.missing-panel {
    padding:24px;
    margin-top:30px;
    border-top:3px solid #8d9c8e;
}

.missing-panel dl {
    display:grid;
    grid-template-columns:230px 1fr;
    gap:10px;
    font-size:.82rem;
}

.missing-panel dd {
    overflow-wrap:anywhere;
}

.missing-evaluation {
    border-top:1px solid var(--line);
    padding-top:18px;
    margin-top:20px;
}

.missing-evaluation h3 {
    font-size:.9rem;
}

.missing-evaluation p {
    font-size:.8rem;
    overflow-wrap:anywhere;
}

.missing-panel .bin-details li {
    margin:8px 0;
    overflow-wrap:anywhere;
}

.site-footer {
    max-width:1488px;
    margin:0 auto;
    padding:28px 24px 40px;
    border-top:1px solid var(--line);
    color:var(--muted);
    font-size:.73rem;
}

.site-footer p {
    margin:5px 0;
}

.empty-state {
    padding:44px;
    max-width:760px;
    margin:30px auto;
}

.empty-state p {
    color:var(--muted);
}

.empty-state .button {
    margin-top:16px;
}

.sr-only,.skip-link:not(:focus) {
    position:absolute;
    width:1px;
    height:1px;
    padding:0;
    margin:-1px;
    overflow:hidden;
    clip:rect(0,0,0,0);
    white-space:nowrap;
    border:0;
}

.skip-link:focus {
    position:fixed;
    top:8px;
    left:8px;
    background:#fff;
    padding:12px;
    z-index:10;
}

a:focus-visible,button:focus-visible,summary:focus-visible {
    outline:2px solid var(--green);
    outline-offset:4px;
}

@media(max-width:1050px) {
    .form-fields {
        grid-template-columns:1fr 1fr;
    }
    .form-fields .button {
        margin-top:0;
    }
    .daylight {
        grid-template-columns:1fr 2fr;
    }
    .daylight>.threshold {
        grid-column:1/-1;
    }
    .metrics {
        gap:16px;
    }
    .evaluation {
        padding:20px;
    }
    .comparison-table {
        min-width:1100px;
    }
    .course-table th,.course-table td {
        padding:18px 14px;
    }
}

@media(max-width:699px) {
    .course-report {
        padding:20px;
    }
    .report-fields {
        grid-template-columns:1fr;
        gap:3px;
    }
    .report-fields dd {
        margin-bottom:10px;
    }
    .site-header {
        padding:18px 20px;
        align-items:start;
    }
    .timezone {
        max-width:112px;
        text-align:right;
        font-size:.69rem;
    }
    .page {
        padding:30px 16px 42px;
    }
    .page-heading {
        display:block;
        margin-bottom:24px;
    }
    .summary {
        text-align:left;
        margin-top:20px;
    }
    .summary strong {
        display:inline;
        margin-right:10px;
    }
    .page-heading h1 {
        font-size:2rem;
    }
    .evaluation-grid,.context-grid,.form-fields,.metrics,.daylight {
        grid-template-columns:1fr;
    }
    .window-form,.evaluation,.context-box,.missing-panel {
        padding:20px;
    }
    .form-fields {
        gap:15px;
    }
    .form-fields .button {
        width:100%;
        margin-top:3px;
    }
    .section-heading {
        display:block;
    }
    .section-heading>p {
        max-width:none;
        margin-top:12px;
    }
    .evaluation .section-heading {
        display:flex;
        align-items:center;
    }
    .metrics {
        gap:0;
    }
    .metrics .indicator {
        padding:16px 0;
        border-bottom:1px solid var(--line);
    }
    .metrics .indicator:first-child {
        padding-top:0;
    }
    .metric-value {
        font-size:1.75rem;
    }
    .daylight {
        gap:8px;
        padding:20px;
    }
    .daylight dl {
        grid-template-columns:1fr;
        gap:3px;
    }
    .daylight dd {
        margin-bottom:12px;
    }
    .daylight>.threshold {
        grid-column:auto;
    }
    .context-values {
        grid-template-columns:1fr;
        gap:3px;
    }
    .context-values dd {
        text-align:left;
        margin-bottom:12px;
    }
    .missing-panel dl {
        grid-template-columns:1fr;
        gap:3px;
    }
    .missing-panel dd {
        margin-bottom:10px;
    }
    .course-table thead,.comparison-table thead {
        position:absolute;
        width:1px;
        height:1px;
        overflow:hidden;
        clip:rect(0,0,0,0);
    }
    .course-table,.comparison-table,.course-table tbody,.comparison-table tbody {
        display:block;
        min-width:0;
    }
    .course-table tr,.comparison-table tr {
        display:block;
        padding:20px;
        border-bottom:1px solid var(--line);
    }
    .course-table tr:last-child,.comparison-table tr:last-child {
        border-bottom:0;
    }
    .course-table th,.course-table td,.comparison-table th,.comparison-table td {
        display:block;
        width:100%;
        padding:10px 0;
        border:0;
        min-width:0;
    }
    .course-table tbody th {
        padding-top:0;
    }
    .course-table td::before,.comparison-table td::before {
        content:attr(data-label);
        display:block;
        font-size:.65rem;
        font-weight:700;
        letter-spacing:.07em;
        text-transform:uppercase;
        color:var(--muted);
        margin-bottom:8px;
    }
    .comparison-table tr[data-requested=true]>th {
        box-shadow:none;
    }
    .comparison-table tr[data-requested=true] {
        border-left:3px solid var(--green);
    }
    .comparison-table th:first-child {
        width:100%;
    }
    .comparison-table .comparison-period {
        padding:0;
        margin:10px 0;
        border:0;
    }
    .comparison-table .metric-value {
        font-size:1.2rem;
    }
    .comparison-table .unit {
        font-size:.8rem;
    }
    .comparison-table .state,.comparison-table .band {
        font-size:.67rem;
    }
    .comparison-table .metric-note {
        font-size:.75rem;
    }
    .comparison-context .reason-list span {
        font-size:.78rem;
    }
    .comparison-context .reason-list code,.sort-key {
        font-size:.73rem;
    }
    .window-start {
        font-size:1rem;
    }
    .cell-detail {
        font-size:.8rem;
    }
    .course-table .course-name {
        font-size:1.15rem;
    }
    .course-table td {
        font-size:.9rem;
    }
    .table-scroll {
        overflow:visible;
    }
    .site-footer {
        padding:24px 18px;
    }
    .empty-state {
        padding:25px;
    }
    .provenance {
        padding-bottom:8px;
    }
}

.header-actions { display:flex; align-items:center; gap:18px; }
.logout-button { margin-top:0; padding:9px 14px; }
.login-page { max-width:500px; margin:8vh auto; }
.login-panel,.report-form { padding:26px; }
.login-panel h1 { font-size:2rem; margin-bottom:20px; }
.login-panel input { width:100%; }
.auth-attribution { color:var(--muted); font-size:.75rem; margin-top:24px; }
.report-form { margin:20px 0 30px; }
.report-form>p { color:var(--muted); font-size:.85rem; margin:8px 0 20px; }
.report-inputs { display:grid; grid-template-columns:1fr 1fr; gap:18px 24px; }
.report-inputs>div { min-width:0; }
.report-inputs .wide { grid-column:1/-1; }
.report-inputs input,.report-inputs select,.report-inputs textarea {
    width:100%; padding:10px 12px; font:inherit; border:1px solid var(--line); border-radius:5px; background:#fff; color:var(--ink);
}
.report-inputs textarea { resize:vertical; }
.report-inputs small { display:block; color:var(--muted); font-size:.75rem; margin-top:6px; }
input:focus-visible,select:focus-visible,textarea:focus-visible { outline:2px solid var(--green); outline-offset:2px; }
@media(max-width:699px) {
    .header-actions { flex-direction:column; align-items:flex-end; gap:10px; }
    .report-inputs { grid-template-columns:1fr; }
    .report-form { padding:20px; }
}
