:root {
  color-scheme: light;
  --ink: #18211d;
  --muted: #69736d;
  --line: #d9dedb;
  --line-strong: #c1c9c4;
  --paper: #fff;
  --canvas: #f3f5f3;
  --soft: #edf2ee;
  --accent: #145d43;
  --accent-dark: #0c4933;
  --warn: #8b5917;
  --warn-bg: #fff5df;
  --danger: #9b302b;
  --final: #e7efe9;
  --quiz: #e8eef4;
  --report: #f1ece2;
  --homework: #eeeaf4;
  --shadow: 0 16px 42px rgba(25,42,34,.1);
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

* { box-sizing: border-box; }
body { margin: 0; color: var(--ink); background: var(--canvas); font-size: 14px; line-height: 1.5; }
button, input, select { font: inherit; }
button { cursor: pointer; }
h1, h2, h3, p { margin-top: 0; }
h1 { margin-bottom: 0; font-size: clamp(1.35rem, 2.6vw, 1.9rem); font-weight: 680; letter-spacing: -.025em; }
h2 { margin-bottom: .2rem; font-size: 1.1rem; }
h3 { margin-bottom: 0; font-size: .94rem; }
[hidden] { display: none !important; }
.eyebrow { margin-bottom: .22rem; color: var(--accent); font-size: .7rem; font-weight: 780; letter-spacing: .1em; text-transform: uppercase; }
.muted { color: var(--muted); }
.compact { margin-bottom: 0; font-size: .8rem; }

input, select {
  width: 100%; min-height: 38px; padding: .5rem .62rem; color: var(--ink); background: var(--paper);
  border: 1px solid var(--line-strong); border-radius: 3px; outline: none;
}
input:focus, select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(20,93,67,.1); }
button { min-height: 38px; padding: .48rem .78rem; color: var(--ink); background: var(--paper); border: 1px solid var(--line-strong); border-radius: 3px; font-weight: 650; }
button:hover { background: #fafbfa; border-color: #919b95; }
.primary { color: #fff; background: var(--accent); border-color: var(--accent); }
.primary:hover { background: var(--accent-dark); border-color: var(--accent-dark); }
.quiet { background: transparent; }
.wide { width: 100%; }
.small { min-height: 32px; padding: .3rem .6rem; font-size: .78rem; }

.auth-gate { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; padding: 1.25rem; background: #e9ede9; }
.auth-card { width: min(430px,100%); padding: 2rem; background: var(--paper); border: 1px solid var(--line); box-shadow: var(--shadow); }
.auth-card h1 { margin-bottom: .7rem; }
.auth-card label { display: block; margin-bottom: .32rem; font-size: .8rem; font-weight: 680; }
.form-error { min-height: 1.35rem; margin: .2rem 0; color: var(--danger); font-size: .8rem; }

.topbar { position: sticky; top: 0; z-index: 20; display: flex; align-items: center; justify-content: space-between; gap: 1rem; min-height: 74px; padding: .8rem clamp(1rem,3vw,2.3rem); background: rgba(255,255,255,.97); border-bottom: 1px solid var(--line); backdrop-filter: blur(10px); }
.top-actions { display: flex; align-items: center; gap: .55rem; }
.related-nav { display: flex; gap: .35rem; }
.related-nav a { min-height: 34px; padding: .38rem .58rem; color: #3f5148; border: 1px solid var(--line); border-radius: 3px; text-decoration: none; font-size: .73rem; font-weight: 650; }
.related-nav a:hover { border-color: #919b95; background: #fafbfa; }
.save-state { color: var(--muted); font-size: .78rem; }
.save-state.dirty { color: var(--warn); }
.save-state.error { color: var(--danger); }

.page { padding: 1.2rem clamp(.75rem,2.5vw,2rem) 3rem; }
.summary-strip { display: grid; grid-template-columns: repeat(6,minmax(0,1fr)); max-width: 1180px; margin: 0 auto 1rem; background: var(--paper); border: 1px solid var(--line); }
.summary-strip > div { padding: .72rem 1rem; border-right: 1px solid var(--line); }
.summary-strip > div:last-child { border-right: 0; }
.summary-strip span { display: block; color: var(--muted); font-size: .7rem; }
.summary-strip strong { font-size: 1.08rem; font-variant-numeric: tabular-nums; }

.category-cards { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: .65rem; max-width: 1180px; margin: 0 auto 1rem; }
.category-card { padding: .7rem .85rem; background: var(--paper); border: 1px solid var(--line); }
.category-card span { color: var(--muted); font-size: .72rem; }
.category-card strong { display: block; font-size: 1rem; }
.category-card.final { border-top: 3px solid #5f8a70; }
.category-card.quizzes { border-top: 3px solid #6685a4; }
.category-card.reports { border-top: 3px solid #a18457; }
.category-card.homework { border-top: 3px solid #826f9b; }

.curve-lab { max-width: 1180px; margin: 0 auto 1rem; background: var(--paper); border: 1px solid var(--line); }
.curve-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .9rem 1rem; border-bottom: 1px solid var(--line); }
.heading-with-badge { display: flex; align-items: center; gap: .55rem; }
.heading-with-badge h2 { margin: 0; }
.state-badge { padding: .15rem .42rem; color: var(--accent-dark); background: #e5efe8; border: 1px solid #c4d8ca; border-radius: 2px; font-size: .66rem; font-weight: 730; }
.state-badge.preview { color: var(--warn); background: var(--warn-bg); border-color: #e2c88f; }
.curve-actions { display: flex; gap: .45rem; }
.curve-grid { display: grid; grid-template-columns: minmax(540px,1.1fr) minmax(390px,.9fr); gap: 1rem; padding: 1rem; }
.formula-controls { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .65rem; align-content: start; }
.formula-controls > label:not(.switch-control) > span { display: flex; justify-content: space-between; gap: .4rem; margin-bottom: .25rem; font-size: .72rem; font-weight: 680; }
.formula-controls small { color: var(--muted); font-size: .63rem; font-weight: 500; }
.switch-control { grid-column: 1 / -1; display: flex; align-items: center; gap: .65rem; min-height: 52px; padding: .55rem .65rem; background: var(--soft); border: 1px solid var(--line); }
.switch-control input { width: 18px; min-height: 18px; }
.switch-control span { display: flex; flex-direction: column; }
.switch-control small { margin-top: .05rem; }
.formula-readout { grid-column: 1 / -1; display: flex; flex-direction: column; gap: .25rem; padding: .6rem .7rem; color: #45554d; background: #f7f9f7; border-left: 3px solid var(--accent); }
.formula-readout code { color: var(--ink); font-size: .78rem; font-weight: 700; white-space: normal; }
.formula-readout span { color: var(--muted); font-size: .7rem; }
.formula-metrics { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(4,1fr); border: 1px solid var(--line); }
.formula-metrics div { padding: .45rem .55rem; border-right: 1px solid var(--line); }
.formula-metrics div:last-child { border: 0; }
.formula-metrics span { display: block; color: var(--muted); font-size: .62rem; }
.formula-metrics strong { font-size: .92rem; font-variant-numeric: tabular-nums; }
.curve-figure { margin: 0; padding: .2rem .35rem .6rem; border: 1px solid var(--line); background: #fbfcfb; }
.curve-figure svg { display: block; width: 100%; height: 265px; }
.curve-figure figcaption { display: flex; justify-content: space-between; gap: 1rem; padding: 0 .55rem; font-size: .68rem; }
.curve-figure figcaption span { color: var(--muted); text-align: right; }

.gradebook-panel { background: var(--paper); border: 1px solid var(--line); }
.table-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1rem; border-bottom: 1px solid var(--line); }
.toolbar-controls { display: flex; align-items: center; gap: .55rem; }
.toolbar-controls > input[type="search"] { width: 190px; }
.check-label { display: inline-flex; align-items: center; gap: .35rem; white-space: nowrap; font-size: .78rem; }
.check-label input { width: 16px; min-height: 16px; }
.notice { padding: .55rem 1rem; color: #46574e; background: #f0f4f1; border-bottom: 1px solid var(--line); font-size: .78rem; }

.table-wrap { max-height: calc(100vh - 305px); overflow: auto; }
.gradebook-table { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; }
.gradebook-table th, .gradebook-table td { height: 48px; padding: .35rem .42rem; background: var(--paper); border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); text-align: center; vertical-align: middle; }
.gradebook-table th { position: sticky; top: 0; z-index: 6; height: 42px; color: #39463f; background: #f7f8f7; font-size: .72rem; }
.gradebook-table thead tr:nth-child(2) th { top: 42px; height: 54px; }
.gradebook-table .category-head { font-weight: 760; letter-spacing: .02em; }
.gradebook-table .category-head.final, .gradebook-table .subtotal.final { background: var(--final); }
.gradebook-table .category-head.quizzes, .gradebook-table .subtotal.quizzes { background: var(--quiz); }
.gradebook-table .category-head.reports, .gradebook-table .subtotal.reports { background: var(--report); }
.gradebook-table .category-head.homework, .gradebook-table .subtotal.homework { background: var(--homework); }
.gradebook-table .assessment-head { width: 92px; min-width: 92px; }
.gradebook-table .assessment-head span { display: block; color: var(--muted); font-size: .65rem; font-weight: 500; }
.gradebook-table .subtotal { width: 94px; min-width: 94px; font-variant-numeric: tabular-nums; font-weight: 750; }
.gradebook-table .total-cell { width: 96px; min-width: 96px; color: #fff; background: var(--accent); font-size: .95rem; font-weight: 800; font-variant-numeric: tabular-nums; }
.gradebook-table .formula-column { width: 82px; min-width: 82px; background: #f4f6f4; font-variant-numeric: tabular-nums; }
.gradebook-table .curve-column { color: var(--accent-dark); background: #edf4ef; }
.gradebook-table .activity-column { position: sticky; right: 196px; z-index: 8; width: 94px; min-width: 94px; background: #f8f5ec; box-shadow: -4px 0 7px rgba(30,45,37,.04); }
.gradebook-table thead .activity-column { z-index: 10; }
.activity-input { min-height: 34px; padding: .35rem .25rem; text-align: center; font-weight: 680; font-variant-numeric: tabular-nums; }
.activity-input.positive { color: var(--accent-dark); border-color: #9ab9a7; background: #f0f7f2; }
.activity-input.negative { color: var(--danger); border-color: #d8aaa6; background: #fff7f6; }

.sticky-id { position: sticky !important; left: 0; z-index: 8 !important; width: 112px; min-width: 112px; text-align: left !important; }
.sticky-name { position: sticky !important; left: 112px; z-index: 8 !important; width: 220px; min-width: 220px; max-width: 220px; text-align: left !important; box-shadow: 5px 0 8px rgba(30,45,37,.04); }
tbody .sticky-id, tbody .sticky-name, tfoot .sticky-id, tfoot .sticky-name { background: var(--paper); }
.sticky-total { position: sticky !important; right: 100px; z-index: 8 !important; }
.sticky-confirm { position: sticky !important; right: 0; z-index: 8 !important; width: 100px; min-width: 100px; background: #f7f8f7 !important; }
thead .sticky-total, thead .sticky-confirm { z-index: 10 !important; }
.student-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 680; }
.student-id { color: var(--muted); font-size: .74rem; font-variant-numeric: tabular-nums; }

.score-cell { position: relative; width: 92px; min-width: 92px; }
.score-input { min-height: 34px; padding: .35rem .28rem; text-align: center; font-weight: 680; font-variant-numeric: tabular-nums; }
.score-input.missing { background: var(--warn-bg); border-color: #dfc48f; }
.score-input.override { border-color: #6e89a4; background: #f2f7fb; }
.source-dot { position: absolute; top: 5px; right: 6px; width: 6px; height: 6px; background: #6685a4; border-radius: 50%; }
.cell-state { position: absolute; right: 5px; bottom: 2px; color: var(--muted); font-size: .56rem; }
.cell-state.saving { color: var(--warn); }
.cell-state.error { color: var(--danger); }
.confirm-button { min-height: 31px; padding: .3rem .5rem; font-size: .72rem; }
.confirm-button.confirmed { color: var(--accent-dark); background: #e1eee5; border-color: #b9d1c1; }
.row-incomplete .sticky-id { box-shadow: inset 3px 0 #d6a44a; }
.row-confirmed .sticky-id { box-shadow: inset 3px 0 var(--accent); }
.gradebook-table tfoot th, .gradebook-table tfoot td { position: sticky; bottom: 0; z-index: 7; height: 43px; background: #f3f5f3; font-weight: 750; }
.gradebook-table tfoot .sticky-id, .gradebook-table tfoot .sticky-name { z-index: 9 !important; background: #f3f5f3; }
.mean-note { display: block; color: var(--muted); font-size: .6rem; font-weight: 500; }

.settings-dialog { width: min(1240px,96vw); height: min(850px,94vh); padding: 0; background: var(--paper); border: 1px solid var(--line-strong); box-shadow: var(--shadow); }
.settings-dialog::backdrop, .export-dialog::backdrop { background: rgba(20,30,25,.42); }
.dialog-shell { display: grid; grid-template-rows: auto 1fr auto; height: 100%; }
.dialog-head, .dialog-actions { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 1rem 1.2rem; border-bottom: 1px solid var(--line); }
.dialog-actions { border-top: 1px solid var(--line); border-bottom: 0; }
.dialog-actions > div { display: flex; gap: .5rem; }
.icon-button { width: 38px; padding: 0; font-size: 1.2rem; }
.settings-body { overflow: auto; padding: 1rem 1.2rem; }
.general-settings { display: grid; grid-template-columns: minmax(280px,2fr) 140px 180px; gap: .8rem; align-items: end; }
.general-settings label, .setting-row label { font-size: .72rem; font-weight: 680; }
.weight-audit { min-height: 38px; padding: .45rem .65rem; background: var(--soft); border: 1px solid var(--line); }
.weight-audit span { display: block; color: var(--muted); font-size: .63rem; }
.weight-audit strong.warn { color: var(--warn); }
.settings-section { margin-top: 1.2rem; }
.settings-section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: .55rem; }
.category-settings { display: grid; grid-template-columns: repeat(4,minmax(160px,1fr)); gap: .6rem; }
.category-setting { padding: .65rem; background: var(--soft); border: 1px solid var(--line); }
.category-setting span { display: block; margin-bottom: .25rem; color: var(--muted); font-size: .62rem; }
.assessment-settings-head, .assessment-setting { display: grid; grid-template-columns: minmax(155px,1.4fr) minmax(95px,.8fr) minmax(115px,1fr) 82px 78px 70px 62px 90px; gap: .45rem; align-items: center; }
.assessment-settings-head { padding: .3rem .55rem; color: var(--muted); font-size: .66rem; }
.assessment-setting { padding: .5rem .55rem; border-top: 1px solid var(--line); }
.assessment-setting:first-child { border-top: 1px solid var(--line); }
.assessment-setting input, .assessment-setting select { min-height: 34px; padding: .35rem .45rem; font-size: .78rem; }
.assessment-setting .mini-check { display: grid; place-items: center; }
.assessment-setting .mini-check input { width: 17px; min-height: 17px; }
.source-label { color: var(--muted); font-size: .66rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.export-dialog { width: min(960px,94vw); padding: 0; background: var(--paper); border: 1px solid var(--line-strong); box-shadow: var(--shadow); }
.export-shell { min-height: 0; }
.export-body { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .75rem; padding: 1rem 1.2rem 1.2rem; }
.export-card { display: flex; flex-direction: column; align-items: stretch; gap: .75rem; padding: 1rem; border: 1px solid var(--line); background: #fbfcfb; }
.export-card h3 { margin: .2rem 0; }
.export-card p { margin: 0; color: var(--muted); font-size: .76rem; }
.export-card > button { align-self: flex-start; margin-top: auto; }
.safe-export { border-top: 3px solid var(--accent); }
.announcement-export { border-top: 3px solid #6685a4; }
.announcement-option { display: flex; align-items: center; gap: .45rem; font-size: .74rem !important; }
.announcement-option input { width: 16px; min-height: 16px; }
.custom-export { grid-column: 1 / -1; }
.export-tag { color: var(--accent); font-size: .64rem; font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }
.export-card > label { font-size: .7rem; font-weight: 680; }
.export-buttons { display: flex; gap: .45rem; }
.export-options { display: grid; grid-template-columns: repeat(3,1fr); gap: .5rem; padding: .7rem; background: var(--soft); }
.export-options label { display: flex; align-items: center; gap: .4rem; font-size: .72rem; }
.export-options input { width: 16px; min-height: 16px; }

.toast { position: fixed; right: 1rem; bottom: 1rem; z-index: 80; max-width: 390px; padding: .7rem .9rem; color: #fff; background: #26322c; box-shadow: var(--shadow); opacity: 0; transform: translateY(10px); pointer-events: none; transition: .18s ease; }
.toast.show { opacity: 1; transform: translateY(0); }
.toast.error { background: var(--danger); }

@media (max-width: 900px) {
  .topbar, .table-toolbar { align-items: flex-start; flex-direction: column; }
  .top-actions, .toolbar-controls { width: 100%; flex-wrap: wrap; }
  .related-nav { width: 100%; overflow-x: auto; }
  .summary-strip { grid-template-columns: repeat(3,1fr); }
  .summary-strip > div { border-bottom: 1px solid var(--line); }
  .category-cards { grid-template-columns: repeat(2,1fr); }
  .table-wrap { max-height: calc(100vh - 390px); }
  .sticky-name { width: 165px; min-width: 165px; max-width: 165px; }
  .assessment-settings-head { display: none; }
  .assessment-setting { grid-template-columns: repeat(2,minmax(130px,1fr)); padding: .8rem; }
  .assessment-setting > *::before { display: block; color: var(--muted); font-size: .6rem; }
  .category-settings { grid-template-columns: repeat(2,1fr); }
  .general-settings { grid-template-columns: 1fr 1fr; }
  .general-settings > :first-child { grid-column: 1 / -1; }
  .curve-head { align-items: flex-start; flex-direction: column; }
  .curve-grid { grid-template-columns: 1fr; }
}

@media (max-width: 560px) {
  .page { padding: .75rem .45rem 2rem; }
  .top-actions button { flex: 1; }
  .summary-strip { grid-template-columns: repeat(2,1fr); }
  .category-cards { grid-template-columns: 1fr 1fr; }
  .curve-actions { width: 100%; flex-wrap: wrap; }
  .curve-actions button { flex: 1; }
  .curve-grid { padding: .7rem; }
  .formula-controls { grid-template-columns: 1fr; }
  .switch-control, .formula-readout, .formula-metrics { grid-column: 1; }
  .formula-metrics { grid-template-columns: repeat(2,1fr); }
  .curve-figure svg { height: 230px; }
  .curve-figure figcaption { flex-direction: column; gap: .15rem; }
  .curve-figure figcaption span { text-align: left; }
  .toolbar-controls > input[type="search"] { width: 100%; }
  .sticky-id { width: 92px; min-width: 92px; }
  .sticky-name { left: 92px; width: 130px; min-width: 130px; max-width: 130px; }
  .settings-dialog { width: 100vw; height: 100vh; max-width: none; max-height: none; }
  .category-settings, .general-settings, .assessment-setting { grid-template-columns: 1fr; }
  .export-dialog { width: 100vw; max-width: none; }
  .export-body, .export-options { grid-template-columns: 1fr; }
  .custom-export { grid-column: 1; }
}

@media (prefers-color-scheme: dark){
  :root:not([data-theme]){color-scheme:dark;--ink:#edf4f2;--muted:#a5b4b0;--line:#2c3a37;--line-strong:#40504c;--paper:#17211f;--canvas:#101716;--soft:#1b2825;--warn:#f0b35f;--warn-bg:#352814;--danger:#ff9898;--final:#20372d;--quiz:#203244;--report:#3b3224;--homework:#342d43}
}
:root[data-theme="dark"]{color-scheme:dark;--ink:#edf4f2;--muted:#a5b4b0;--line:#2c3a37;--line-strong:#40504c;--paper:#17211f;--canvas:#101716;--soft:#1b2825;--warn:#f0b35f;--warn-bg:#352814;--danger:#ff9898;--final:#20372d;--quiz:#203244;--report:#3b3224;--homework:#342d43}
:root[data-theme="dark"] body{background:var(--canvas);color:var(--ink)}
:root[data-theme="dark"] .topbar{background:rgba(23,33,31,.97)}
:root[data-theme="dark"] button,
:root[data-theme="dark"] input,
:root[data-theme="dark"] select{color:var(--ink);background:var(--paper);border-color:var(--line-strong)}
:root[data-theme="dark"] button:hover{background:#21302c;border-color:#6a8179}
:root[data-theme="dark"] .related-nav a{color:#c7ddd4}
:root[data-theme="dark"] .formula-readout{color:#c5d4ce;background:#1b2825}
:root[data-theme="dark"] .curve-figure{background:#17211f}
:root[data-theme="dark"] .notice{color:#c5d4ce;background:#1b2825}
:root[data-theme="dark"] .gradebook-table th{color:#d0ded8;background:#1b2825}
:root[data-theme="dark"] .gradebook-table .formula-column{background:#1b2825}
:root[data-theme="dark"] .gradebook-table .curve-column{color:#9be1c5;background:#20372d}
:root[data-theme="dark"] .gradebook-table .activity-column{background:#332e24}
:root[data-theme="dark"] .sticky-confirm,
:root[data-theme="dark"] .gradebook-table tfoot th,
:root[data-theme="dark"] .gradebook-table tfoot td{background:#1b2825!important}
:root[data-theme="dark"] .export-card{background:#17211f}
@media (prefers-color-scheme:dark){
  :root:not([data-theme]) .auth-gate{background:#101716}
  :root:not([data-theme]) .topbar{background:rgba(23,33,31,.97)}
  :root:not([data-theme]) button:hover{background:#21302c;border-color:#6a8179}
  :root:not([data-theme]) .related-nav a{color:#c7ddd4}
  :root:not([data-theme]) .formula-readout{color:#c5d4ce;background:#1b2825}
  :root:not([data-theme]) .curve-figure{background:#17211f}
  :root:not([data-theme]) .notice{color:#c5d4ce;background:#1b2825}
  :root:not([data-theme]) .gradebook-table th{color:#d0ded8;background:#1b2825}
  :root:not([data-theme]) .gradebook-table .formula-column{background:#1b2825}
  :root:not([data-theme]) .gradebook-table .curve-column{color:#9be1c5;background:#20372d}
  :root:not([data-theme]) .gradebook-table .activity-column{background:#332e24}
  :root:not([data-theme]) .sticky-confirm,:root:not([data-theme]) .gradebook-table tfoot th,:root:not([data-theme]) .gradebook-table tfoot td{background:#1b2825!important}
  :root:not([data-theme]) .export-card{background:#17211f}
}
