@font-face{font-family:AddingtonCF;src:url(/fonts/AddingtonCF-Regular.otf) format("opentype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:AddingtonCF;src:url(/fonts/AddingtonCF-RegularItalic.otf) format("opentype");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:AddingtonCF;src:url(/fonts/AddingtonCF-Medium.otf) format("opentype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:AddingtonCF;src:url(/fonts/AddingtonCF-DemiBold.otf) format("opentype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:AddingtonCF;src:url(/fonts/AddingtonCF-Bold.otf) format("opentype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:ChopinScript;src:url(/fonts/ChopinScript.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}:root{--ink: #270307;--ink-soft: #4a2a2e;--cream: #efe9db;--tan: #ccba94;--tan-deep: #b9a67e;--ivory: #f5f0d8;--paper: #fbf7ec;--paper-inset: #fffdf6;--line: #e2dccd;--muted: #7a6f63;--accent: #8a5a2b;--margin-rule: rgba(163, 53, 47, .3);--note-rule: rgba(39, 3, 7, .06);--ring-stain: rgba(122, 74, 34, .14);--ok: #2f7d4f;--err: #a3352f;--font-display: "AddingtonCF", "Times New Roman", Georgia, serif;--font-ui: "Inter", "Helvetica Neue", Arial, sans-serif;--font-script: "ChopinScript", "AddingtonCF", cursive;--font-mono: "Courier Prime", ui-monospace, "Cascadia Mono", Consolas, monospace;--shadow-sheet: 0 1px 2px rgba(39, 3, 7, .06), 0 14px 28px -20px rgba(39, 3, 7, .35)}*{box-sizing:border-box}body{margin:0;font-family:var(--font-ui);font-size:16px;background:var(--cream);color:var(--ink);line-height:1.55;letter-spacing:-.01em;-webkit-font-smoothing:antialiased}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;opacity:.5;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.045'/%3E%3C/svg%3E")}.app{position:relative;z-index:1;min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;background:var(--tan);color:var(--ink);border-bottom:4px double var(--ink)}.brand-link{display:flex;align-items:baseline;gap:10px;text-decoration:none}.brand-mark{height:42px;width:auto;display:block;align-self:center}.brand{color:var(--ink);text-decoration:none;font-family:var(--font-script);font-weight:400;font-size:40px;line-height:1}.brand-tag{color:var(--ink-soft);font-family:var(--font-mono);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.22em}.topbar .muted{color:var(--ink-soft);font-family:var(--font-mono);font-size:12px}.login-mark{width:150px;height:auto;margin:0 auto 8px;display:block}h1.script{font-family:var(--font-script);font-weight:400;font-size:88px;line-height:.9;margin:0;color:var(--ink)}.login-sub{font-family:var(--font-mono);font-size:14px;letter-spacing:.34em;text-transform:uppercase;color:var(--ink-soft);margin:8px 0 12px}.content{width:100%;max-width:880px;margin:34px auto;padding:0 20px;flex:1}h1,h2,h3{font-family:var(--font-display);color:var(--ink);font-weight:600;line-height:1.12}h1{font-size:46px;margin:0 0 6px;letter-spacing:-.01em}h2{font-size:33px;margin:0 0 16px;padding-bottom:10px;border-bottom:1px solid var(--line)}h3{font-size:24px;margin:22px 0 10px}h4{margin:10px 0 6px;font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.12em}.card{position:relative;background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:28px 30px;box-shadow:var(--shadow-sheet);margin-bottom:24px}.card.centered{max-width:480px;margin:76px auto;text-align:center;padding:40px 34px;overflow:hidden}.card.centered h1{font-size:52px}.card.centered h2{border-bottom:none;padding-bottom:0}.card.centered>*{position:relative;z-index:1}.card.centered:before{content:"";position:absolute;z-index:0;width:min(280px,72%);aspect-ratio:280 / 316;top:8px;left:50%;transform:translate(-50%) rotate(-6deg);background:url(/coffee-ring.png) center / contain no-repeat;opacity:.16}@media (max-width: 640px){.card.centered:before{opacity:.11}}.empty-state{color:var(--muted);text-align:center;padding:30px 0 24px}.empty-state:before{content:"";display:block;width:150px;height:170px;margin:0 auto 12px;background:url(/coffee-ring.png) center / contain no-repeat;opacity:.18;transform:rotate(-5deg)}.muted{color:var(--muted)}.small{font-size:13px}.row{display:flex;align-items:flex-start}.row.center{align-items:center}.row.between{justify-content:space-between;align-items:center}.row.gap{gap:12px}.row.wrap{flex-wrap:wrap}button,.button{font:inherit;font-weight:500;border:1px solid var(--ink);background:transparent;color:var(--ink);padding:9px 18px;border-radius:6px;cursor:pointer;text-decoration:none;display:inline-block;transition:background .15s,color .15s,box-shadow .15s}button:hover,.button:hover{background:var(--ink);color:var(--ivory)}button.primary,.button.primary{background:var(--ink);color:var(--ivory);border-color:var(--ink)}button.primary:hover{background:var(--ink-soft)}button.ghost,.button.ghost{border-color:var(--tan-deep)}button.ghost:hover{border-color:var(--ink);background:transparent;color:var(--ink)}button:disabled{opacity:.45;cursor:default}.badge{display:inline-block;background:var(--ivory);color:var(--accent);padding:4px 12px;border-radius:4px;font-size:12px;font-weight:700;border:1px solid var(--tan-deep);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em}.callout{background:var(--ivory);border-left:3px solid var(--tan-deep);padding:12px 16px;border-radius:4px;color:var(--ink-soft)}.error{color:var(--err);font-weight:600}.field{display:block;margin:14px 0}.field-label{display:block;font-weight:600;margin-bottom:5px}.field-hint{display:block;color:var(--muted);font-size:12px;margin-bottom:4px;font-family:var(--font-mono)}input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input:not([type]),textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:4px;font:inherit;background:#fffdf7;color:var(--ink)}input:focus,textarea:focus{outline:2px solid var(--tan-deep);outline-offset:1px;border-color:var(--tan-deep)}textarea{line-height:28px;background-image:repeating-linear-gradient(var(--paper-inset),var(--paper-inset) 27px,var(--note-rule) 27px,var(--note-rule) 28px);background-attachment:local}.table{width:100%;border-collapse:collapse}.table th,.table td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line)}.table th{font-family:var(--font-mono);font-weight:700;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.1em}.pill{padding:3px 11px;border-radius:4px;font-size:11px;font-weight:700;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em}.pill.draft{background:var(--tan);color:var(--ink)}.pill.published{background:#d9ecdd;color:var(--ok)}.list{list-style:none;padding:0;margin:0}.list-item{padding:14px 2px;border-bottom:1px solid var(--line)}.student-form{border:1px solid var(--line);border-radius:4px;padding:14px 16px;margin:8px 0 14px;background:var(--paper-inset)}.student-form .field{min-width:170px}.credential-note{border:1px dashed var(--margin-rule);border-radius:4px;padding:12px 16px;margin:8px 0 14px;background:#fffdf7}.credential-line{font-family:var(--font-mono);font-size:14px}.linklike{background:none;border:none;padding:0;cursor:pointer;color:var(--accent);font-family:var(--font-mono);font-size:12.5px;text-decoration:underline;text-underline-offset:3px}.reset-link{margin:14px 0 0}.pill-btn{border:none;cursor:pointer}.pill-btn:hover{opacity:.85}.pill-active{background:var(--accent);color:#fffdf8}.scale-meaning{margin:10px 0 0;padding:8px 12px;font-size:13.5px;color:var(--ink-soft);border-left:3px solid var(--tan);background:#fffdf7;border-radius:0 4px 4px 0}.wheel-list-hint{margin:4px 0 10px}.wheel-list-row{transition:background .12s}.wheel-list-row.hovered{background:var(--paper-inset)}.wheel-term{background:none;border:none;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit;text-align:left;border-bottom:1px solid transparent;line-height:1.5}.wheel-term:hover,.wheel-term:focus-visible{border-bottom-color:var(--ink);outline:none}.wheel-term-cat{font-family:var(--font-mono);font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:11px}.wheel-term-group{font-weight:600}.wheel-term-leaf{color:var(--ink-soft)}.wheel-sep{color:var(--muted)}.wheel-note{margin:10px 0;padding:10px 14px;font-size:14px;border:1px dashed var(--margin-rule);border-radius:4px;background:#fffdf7}.wheel-note-editor{margin:10px 0 14px;max-width:460px}.button.danger,button.danger{color:#a3352f;border-color:#a3352f73}.button.danger:hover,button.danger:hover{background:#a3352f14}.assign-panel{border:1px solid var(--line);border-radius:4px;padding:14px 16px;margin:4px 0 10px;background:var(--paper-inset)}.assign-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:6px 16px;margin:12px 0 14px}.assign-item{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}.sample-editor,.slot{border:1px solid var(--line);border-radius:4px;padding:20px;margin:18px 0;background:var(--paper-inset)}.cata-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}.cata-section,.intensity-row,.scale{border:1px solid var(--line);border-radius:4px;padding:10px 14px;margin:8px 0;background:#fffdf7}.cata-section legend,.intensity-row legend,.scale legend{font-weight:600;padding:0 4px}.check,.radio{display:block;padding:4px 0;cursor:pointer}.check input,.radio input{margin-right:8px;accent-color:var(--accent)}.intensity-row{display:block}.intensity-row .radio{display:inline-block;margin-right:18px}.scale-row{display:flex;flex-wrap:wrap;gap:6px}.scale-btn{width:38px;text-align:center;padding:7px 0;border-radius:4px;font-family:var(--font-mono)}.scale-btn.active{background:var(--ink);color:var(--ivory);border-color:var(--ink)}.reveal-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.reveal{color:var(--accent);font-family:var(--font-display);font-weight:600}.tight{margin:4px 0;padding-left:18px}.tight li{margin:3px 0}.topbar-link{color:var(--ink);font-family:var(--font-mono);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;text-decoration:none;padding:4px 2px;border-bottom:2px solid transparent}.topbar-link:hover{border-bottom-color:var(--ink)}.topbar-user{text-decoration:none;border-bottom:1px dotted transparent}.topbar-user:hover{border-bottom-color:var(--muted)}.name-form{max-width:340px;margin:18px auto 0;text-align:left}.login-actions{display:flex;flex-direction:column;gap:12px;max-width:300px;margin:22px auto 6px}.login-actions .primary{width:100%;text-align:center}.wheel-wrap{display:flex;flex-direction:column;align-items:center;gap:20px}.wheel-svg{width:400px;max-width:100%}.wheel-detail{width:100%}.wheel-wedge{cursor:pointer}.wheel-wedge:hover{opacity:.85}.wheel-wedge:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.wheel-svg-full{width:560px;max-width:100%;height:auto}.wheel-hub-text{font-family:var(--font-display);font-size:17px;font-weight:600;fill:var(--ink)}.wheel-cat-label{font-family:var(--font-ui);font-size:13px;font-weight:600;fill:#fffdf8;pointer-events:none}.wheel-cat-label-out{font-family:var(--font-display);font-size:21px;font-weight:600;fill:var(--ink);transition:opacity .15s}.wheel-wedge-hot{stroke:var(--ink);stroke-width:2.5}.wheel-sub-label{font-family:var(--font-ui);font-size:11px;fill:var(--ink);pointer-events:none}.wheel-t2-label{font-family:var(--font-ui);font-size:9.5px;font-weight:600;fill:var(--ink)}.wheel-t3-label{font-family:var(--font-ui);font-size:9px;fill:var(--ink-soft)}.wheel-svg{touch-action:manipulation}.wheel-hub{cursor:pointer}.wheel-hub:hover circle{opacity:.9}.wheel-hub:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.wheel-hub-back{font-family:var(--font-mono);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;opacity:.85}.wheel-z1-label{font-family:var(--font-ui);font-size:15px;font-weight:600;fill:var(--ink)}.wheel-z1-leaf{font-family:var(--font-ui);font-size:13px;fill:var(--ink-soft)}.wheel-z2-leaf{font-family:var(--font-ui);font-size:17px;fill:var(--ink)}.wheel-crumbs{align-items:center}.wheel-crumb-here{font-family:var(--font-mono)}@media (max-width: 640px){.topbar{flex-wrap:wrap;row-gap:8px;padding:12px 14px}.row.gap{flex-wrap:wrap;row-gap:8px}.brand{font-size:32px}.brand-mark{height:34px}.content{margin:18px auto;padding:0 10px}.card{padding:20px 16px}.card.centered{margin:28px auto;padding:28px 18px}.row.between{flex-wrap:wrap;row-gap:10px}.card,.table-scroll,.wheel-detail{overflow-x:auto}.wheel-svg-full{width:100%}}.table.small{font-size:13px}.journal-entry{border:1px solid var(--line);border-radius:4px;padding:16px 18px 16px 52px;margin:16px 0;background:linear-gradient(90deg,transparent 39px,var(--margin-rule) 39px,var(--margin-rule) 40px,transparent 40px),repeating-linear-gradient(var(--paper-inset),var(--paper-inset) 27px,var(--note-rule) 27px,var(--note-rule) 28px);box-shadow:var(--shadow-sheet)}.journal-entry h3{margin:0}.chips-row{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}.chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--tan-deep);background:var(--paper-inset);color:var(--ink);padding:3px 10px;border-radius:999px;font-size:13px;cursor:pointer}.chip:hover{border-color:var(--accent)}.chip-selected{background:var(--ivory);border-color:var(--accent);font-weight:600}.chip-static{cursor:default}.chip-static:hover{border-color:var(--tan-deep)}.desc-group{border:1px solid var(--line);border-radius:4px;padding:8px 12px;margin:6px 0;background:var(--paper-inset)}.desc-group summary{cursor:pointer;font-weight:600}.desc-group summary .legend-swatch{margin-right:4px}.readiness-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin:10px 0 6px}.readiness-card{border:1px solid var(--line);border-radius:4px;padding:14px 16px;background:var(--paper-inset);border-left-width:4px}.readiness-card.status-ready{border-left-color:var(--ok)}.readiness-card.status-approaching{border-left-color:var(--accent)}.readiness-card.status-not-ready{border-left-color:var(--tan-deep)}.readiness-card.status-no-data{border-left-color:var(--line)}.status-pill-ready{background:#d9ecdd;color:var(--ok)}.status-pill-approaching{background:var(--ivory);color:var(--accent)}.status-pill-not-ready{background:var(--tan);color:var(--ink)}.status-pill-no-data{background:#eee7da;color:var(--muted)}.readiness-card .req-met{color:var(--ink)}.readiness-card .req-unmet{color:var(--muted)}.charts{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:10px 0 22px}.chart-card{border:1px solid var(--line);border-radius:4px;padding:16px;background:var(--paper-inset)}.chart-card.wide{grid-column:1 / -1}.chart-card h4{margin-top:0}.stat-tile{padding:8px 0 4px}.stat-num{font-family:var(--font-display);font-size:46px;font-weight:600;color:var(--ink);line-height:1}.stat-label{font-weight:600;margin:6px 0 2px}.legend-row{display:flex;align-items:center;color:var(--muted);margin:6px 0 0}.legend-swatch{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:middle}.matrix-scroll{overflow-x:auto}.matrix{border-collapse:separate;border-spacing:3px;font-size:13px}.matrix th{color:var(--muted);font-weight:600;padding:4px 8px;text-align:center}.matrix th.row-head{text-align:right;white-space:nowrap}.matrix td{min-width:62px;text-align:center;padding:8px 6px;border-radius:4px;border:1px solid var(--line);font-variant-numeric:tabular-nums}.matrix sup.fa{font-size:9px;margin-left:3px;opacity:.85}@media (max-width: 720px){.charts{grid-template-columns:1fr}}@media (max-width: 620px){.reveal-grid{grid-template-columns:1fr}h1{font-size:38px}.card.centered h1{font-size:42px}}
