:root{--ground:#f3f2ee;--paper:#fbfbf8;--ink:#16171a;--muted:#62656c;--rule:#dcdbd4;--accent:#16171a;--accent-ink:#fbfbf8;--gold:#a88a4a;--pin:#f5c518;--pin-ink:#16171a;--ok:#1f7a45;--warn:#a36b00;--bad:#b3261e;--display:"Saira Condensed", "Zen Kaku Gothic New", "Hiragino Kaku Gothic ProN", sans-serif;--body:"Zen Kaku Gothic New", "Hiragino Kaku Gothic ProN", "Yu Gothic", system-ui, sans-serif}[data-theme=dark]{--ground:#0b0b0c;--paper:#151517;--ink:#ecebe6;--muted:#9a9993;--rule:#2a2a2d;--accent:#d8c28c;--accent-ink:#0b0b0c;--gold:#d8c28c;--ok:#4fd18b;--warn:#f2b84b;--bad:#ff6b5e}[data-theme=grey]{--ground:#3a3a3c;--paper:#434345;--ink:#fff;--muted:#b9b9bb;--rule:#55555a;--accent:#fff;--accent-ink:#26262a;--gold:#fff;--ok:#6fdba0;--warn:#f2b84b;--bad:#ff8a80}[data-theme=mist]{--ground:#e4e4e6;--paper:#f5f5f6;--ink:#232326;--muted:#6a6a70;--rule:#cdcdd1;--accent:#3a3a3c;--accent-ink:#fff;--gold:#3a3a3c}*{box-sizing:border-box}[hidden]{display:none!important}input[type=date],input[type=time]{appearance:none;text-align:left;min-width:0;max-width:100%;min-height:2.6em}html{-webkit-text-size-adjust:100%}body{background:var(--ground);color:var(--ink);font-family:var(--body);margin:0;padding-block:0 48px;padding-inline:16px;font-size:15px;line-height:1.7}a{color:inherit}:focus-visible{outline:2px solid var(--gold);outline-offset:2px}h1,h2,h3{text-wrap:balance;margin:0;line-height:1.3}.wrap{max-width:960px;margin-inline:auto}.narrow{max-width:440px;margin-inline:auto}.topbar{border-bottom:1px solid var(--rule);flex-wrap:wrap;align-items:center;gap:8px 20px;margin-bottom:24px;padding-block:14px;display:flex}.brand{font-family:var(--display);letter-spacing:.14em;font-size:18px;font-weight:700;text-decoration:none}.topbar nav{flex-wrap:wrap;gap:4px 16px;font-size:14px;display:flex}.topbar nav a{color:var(--muted);text-decoration:none}.topbar nav a[aria-current=page]{color:var(--ink);font-weight:700}.topbar .spacer{flex:1}.page-title{margin-bottom:16px;font-size:22px}.section{gap:12px;margin-block:28px;display:grid}.section h2{font-size:17px}.label{letter-spacing:.08em;color:var(--muted);font-size:12px}.muted{color:var(--muted)}.num{font-family:var(--display);font-variant-numeric:tabular-nums}.panel{background:var(--paper);border:1px solid var(--rule);border-radius:8px;padding:16px}.btn{font:inherit;border:1px solid var(--accent);background:var(--accent);color:var(--accent-ink);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:9px 16px;font-size:14px;font-weight:700;text-decoration:none;display:inline-flex}.btn.ghost{color:var(--ink);border-color:var(--rule);background:0 0}.btn.danger{color:var(--bad);border-color:var(--bad);background:0 0}.btn:disabled{opacity:.5;cursor:default}.qr-wrap{align-content:start;justify-items:center;gap:6px;display:grid}.qr-png{padding:4px 10px;font-size:12px}@media print{.qr-png{display:none}}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}form.stack{gap:14px;display:grid}.field{gap:4px;display:grid}.field label{font-size:13px;font-weight:700}.field small{color:var(--muted);font-size:12px}input,select,textarea{font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--rule);border-radius:6px;width:100%;padding:9px 11px;font-size:16px}textarea{resize:vertical;min-height:88px}input[type=time],input[type=date],input[type=datetime-local]{-webkit-min-logical-width:0;min-width:0;max-width:100%}.grid2{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;display:grid}@media (width<=480px){.grid2{grid-template-columns:minmax(0,1fr)}}.notice{border:1px solid var(--rule);background:var(--paper);border-radius:6px;padding:10px 14px;font-size:14px}.notice.ok{border-color:var(--ok)}.notice.bad{border-color:var(--bad);color:var(--bad)}.secret{letter-spacing:.06em;font-family:ui-monospace,SFMono-Regular,monospace;font-size:18px}.table-wrap{background:var(--paper);border:1px solid var(--rule);border-radius:8px;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:14px}th,td{text-align:left;border-bottom:1px solid var(--rule);white-space:nowrap;padding:9px 12px}th{color:var(--muted);letter-spacing:.04em;font-size:12px;font-weight:500}tr:last-child td{border-bottom:0}td a{font-weight:700}.belt-chip{align-items:center;gap:6px;font-size:13px;display:inline-flex}.belt-chip i{border:1px solid #0003;border-radius:2px;width:22px;height:8px;display:inline-block;position:relative}.pill{border:1px solid var(--rule);color:var(--muted);border-radius:999px;padding:1px 8px;font-size:12px}.pill.active{color:var(--ok);border-color:var(--ok)}.pill.pinned{background:var(--pin);border-color:var(--pin);color:var(--pin-ink);letter-spacing:.02em;font-weight:700}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.tt-scroll{margin-block:4px;overflow-x:auto}.tt{--tt-row:20px;background:var(--rule);border:1px solid var(--rule);border-radius:8px;grid-template-columns:30px repeat(7,minmax(46px,1fr));gap:1px;min-width:352px;display:grid;overflow:hidden}.tt-corner,.tt-head,.tt-col,.tt-hour{background:var(--paper)}.tt-head{text-align:center;gap:1px;padding:5px 0 6px;line-height:1.1;display:grid}.tt-wd{letter-spacing:.06em;color:var(--muted);font-size:10px}.tt-date{font-size:13px;font-weight:700}.tt-head.is-today .tt-wd,.tt-head.is-today .tt-date{color:var(--pin)}.tt-col.is-today{background:color-mix(in srgb, var(--ink) 7%, var(--paper))}.tt-rule{border-top:1px solid var(--rule);pointer-events:none}.tt-gap{background:var(--paper);color:var(--muted);text-align:center;grid-column:1/-1;font-size:9px;line-height:12px}.tt-hour{color:var(--muted);text-align:right;grid-column:1;margin-top:-4px;padding-right:3px;font-size:10px;line-height:1}.tt-item{background:var(--accent);color:var(--accent-ink);border-radius:4px;flex-direction:column;gap:1px;margin:1px;padding:2px 3px;font-size:10px;line-height:1.2;display:flex;overflow:hidden}.tt-item b{overflow-wrap:anywhere;line-break:anywhere;font-weight:700}.tt-item.is-long b{letter-spacing:-.02em;font-size:8.5px;line-height:1.15}.tt-item[data-pop-title]{cursor:pointer}.tt-pop{z-index:90;background:var(--ink);max-width:min(240px,100vw - 16px);color:var(--paper);pointer-events:none;border-radius:8px;gap:2px;padding:8px 10px;font-size:12px;line-height:1.35;display:grid;position:fixed;box-shadow:0 4px 16px #00000059}.tt-pop b{font-size:13px}.tt-sub{opacity:.7;white-space:nowrap;text-overflow:ellipsis;font-size:9px;overflow:hidden}.tt-slot{border:1px solid var(--muted);color:var(--ink);cursor:pointer;font-family:var(--display);background:0 0}.tt-slot:hover{background:color-mix(in srgb, var(--ink) 12%, transparent)}.tt-slot.is-chosen{background:var(--pin);border-color:var(--pin);color:var(--pin-ink);font-weight:700}.tt-nav{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.tt-nav b{font-size:13px}.avatar{object-fit:cover;background:color-mix(in srgb, var(--ink) 12%, var(--paper));width:34px;height:34px;color:var(--muted);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:13px;font-weight:700;line-height:1;display:inline-flex;overflow:hidden}.avatar.sm{width:24px;height:24px;font-size:11px}.avatar.xs{vertical-align:-3px;width:14px;height:14px;margin-right:3px;font-size:8px}.avatar.lg{width:60px;height:60px;font-size:22px}.pv-teacher{align-items:center;gap:7px;display:inline-flex}.tt-item.is-off{opacity:.55}.tt-item.is-off b{text-decoration:line-through}.tt-off{opacity:1;font-weight:700}.tt-item.is-extra{border-left:3px solid var(--pin)}.news-thumb{object-fit:cover;border-radius:8px;width:100%;max-height:160px;margin-top:6px;display:block}.crop-dialog{z-index:100;background:#000000b3;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.crop-box{background:var(--paper);color:var(--ink);border-radius:14px;justify-items:center;gap:10px;width:min(100%,330px);padding:18px;display:grid}.crop-box b{text-align:center;font-size:14px}.crop-stage{aspect-ratio:1;width:280px;max-width:100%;position:relative}.crop-stage canvas{touch-action:none;cursor:grab;background:#222;border-radius:8px;width:100%;height:100%;display:block}.crop-stage canvas:active{cursor:grabbing}.crop-ring{pointer-events:none;clip-path:inset(0 round 8px);border-radius:50%;outline:2px solid #fff;position:absolute;inset:0;box-shadow:0 0 0 999px #00000073}.crop-hint{color:var(--muted);margin:0;font-size:12px}.crop-box input[type=range]{width:100%}.crop-actions{justify-content:flex-end;gap:8px;width:100%;display:flex}
