:root{--ink:#191919;--muted:#73736e;--line:#dcdcd7;--soft:#ecece7;--paper:#fff;--bg:#fafaf8;--tint:#f4f4f0;--pick:#dce7e1;--pick-line:#607d6e;--bad:#8c3b24;--bad-bg:#f6ede9;--top:52px}*{box-sizing:border-box}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0;font:13px/1.45 -apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif}button,input,textarea{font:inherit;color:inherit;background:var(--paper);border:1px solid #c9c9c5;border-radius:0}button{cursor:pointer;white-space:nowrap;min-height:32px;padding:4px 12px}button:hover:not(:disabled){border-color:var(--ink)}button:disabled{opacity:.4;cursor:default}button[aria-pressed=true],.primary{background:var(--ink);color:#fff;border-color:var(--ink)}.danger{background:var(--bad);border-color:var(--bad)}.wide{width:100%;min-height:40px}:focus-visible{outline:2px solid var(--ink);outline-offset:1px}input,textarea{width:100%;min-height:36px;padding:6px 10px}textarea{resize:vertical}fieldset{border:0;min-width:0;margin:0;padding:0}.note{color:var(--muted);margin:0;font-size:12px}.note.bad{color:var(--bad)}.pad{padding:24px}.link{min-height:0;color:var(--muted);background:0 0;border:0;padding:0 0 0 8px;font-size:12px;text-decoration:underline}.topbar{z-index:30;height:var(--top);background:var(--paper);border-bottom:1px solid var(--line);align-items:center;gap:24px;padding:0 20px;display:flex;position:sticky;top:0}.brand{align-items:baseline;gap:10px;display:flex}.brand b{letter-spacing:1.5px;font-size:15px}.brand span{color:var(--muted)}.brand em{background:var(--tint);border:1px solid #c9c9c5;padding:1px 6px;font-size:11px;font-style:normal}.week-nav{align-items:center;gap:4px;display:flex}.week-nav>button{min-width:32px}.range{cursor:pointer;margin-left:8px;font-size:14px;font-weight:600;position:relative}.range input{opacity:0;cursor:pointer;min-height:0;padding:0;position:absolute;inset:0}.range input::-webkit-calendar-picker-indicator{cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.actions{gap:6px;margin-left:auto;display:flex}.workspace{height:calc(100vh - var(--top));grid-template-columns:minmax(0,1fr);display:grid}.workspace.with-panel{grid-template-columns:minmax(0,1fr) 360px}.board{min-width:0;overflow:auto}.legend{color:var(--muted);flex-wrap:wrap;align-items:center;gap:6px;margin:0;padding:10px 16px;font-size:11px;display:flex}.legend i{border:1px solid var(--line);width:14px;height:10px;display:inline-block}.legend span{align-items:center;gap:4px;margin-right:6px;display:inline-flex}.legend i.course{border:0;width:4px}.hatch,.week td.closed{background:repeating-linear-gradient(135deg,#f6f6f2 0 5px,#e9e9e4 5px 6px)}.dash{outline-offset:-3px;outline:1px dashed #555}.center{min-height:calc(100vh - var(--top));place-items:center;padding:16px;display:grid}.week{table-layout:fixed;border-collapse:separate;border-spacing:0;-webkit-user-select:none;user-select:none;background:var(--paper);width:100%}.week th,.week td{border-right:1px solid var(--soft);border-bottom:1px solid var(--soft);padding:0}.week tr.first>*{border-top:2px solid #c9c9c5}.week thead th{z-index:3;background:var(--paper);border-bottom:1px solid var(--line);position:sticky;top:0}.week .time{text-align:left;height:30px;color:var(--muted);font-variant-numeric:tabular-nums;padding:0 6px;font-size:11px;font-weight:400}.week .corner{z-index:4;position:sticky;left:0}.day-head{z-index:2;background:var(--paper);vertical-align:top;text-align:left;border-left:3px solid #0000;position:sticky;left:0}.day-head.today{border-left-color:var(--ink)}.day-head.focus b{font-size:15px}.day-head.active{background:var(--tint)}.day-head>button{text-align:left;background:0 0;border:0;flex-wrap:wrap;align-items:baseline;gap:2px 6px;width:100%;min-height:0;padding:9px 8px 4px;display:flex}.day-head>button:hover{background:var(--tint)}.day-head b{font-size:13px;line-height:18px}.day-head span{color:var(--muted);font-size:11px;display:contents}.day-head i{border:1px solid var(--line);color:var(--muted);padding:0 3px;font-size:11px;font-style:normal;line-height:16px}.day-head i.set{background:var(--ink);color:#fff;border-color:var(--ink)}.day-head i.warn{color:var(--bad);border-color:currentColor}.day-head i.fold{border:0;text-decoration:underline}.day-head i.sync{background:var(--pick-line);border:0;border-radius:50%;align-self:center;width:6px;height:6px;padding:0;animation:1s infinite alternate pulse}.day-head .retry{min-height:22px;color:var(--bad);margin:0 8px 6px;padding:0 6px;font-size:11px}@keyframes pulse{to{opacity:.2}}.week td{vertical-align:top}.week td.free{cursor:crosshair;touch-action:none}.week td.free:hover{background:var(--tint)}.week td.closed{cursor:not-allowed}.week td.chosen{border-color:var(--pick);background:var(--pick)!important}.week .size{white-space:nowrap;padding:2px 5px;font-size:11px;font-weight:600;display:block}.week td.day-empty{vertical-align:middle;text-align:center;color:var(--muted);background:var(--tint)}.week td.booked{padding:1px}.block{text-align:left;white-space:normal;width:100%;min-height:0;box-shadow:inset 4px 0 var(--course);border:0;flex-wrap:wrap;align-content:flex-start;align-items:baseline;gap:0 6px;padding:2px 6px 2px 9px;display:flex;overflow:hidden}.block.plain{background:var(--paper);box-shadow:inset 4px 0 var(--course),inset 0 0 0 1px var(--line)}.block:hover{filter:brightness(.95)}.block.pending{outline-offset:-3px;outline:1px dashed #555}.block b{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:12px;overflow:hidden}.block em{font-size:11px;font-style:normal;font-weight:600}.block .br{flex-basis:100%;height:0}.block .phone{font-variant-numeric:tabular-nums;opacity:.75}.block .remark{opacity:.75;flex:1 1 0;min-width:0}.block small{white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.block .course{color:var(--course);font-weight:600}.block .tag{opacity:.7}.inspector{border-left:1px solid var(--line);background:var(--paper);min-height:0;overflow:auto}.panel{flex-direction:column;min-height:100%;display:flex}.panel-head{z-index:1;background:var(--paper);border-bottom:1px solid var(--line);align-items:flex-start;gap:10px;padding:14px 16px;display:flex;position:sticky;top:0}.panel-head>div{flex:1;min-width:0}.panel-head h2{margin:0;font-size:16px}.panel-head p{color:var(--muted);margin:2px 0 0;font-size:12px}.panel-head .dot{flex:none;align-self:stretch;width:10px}.close{background:0 0;border:0;min-height:0;padding:0 4px;font-size:20px;line-height:1}.panel-body{flex-direction:column;flex:1;gap:14px;padding:14px 16px;display:flex}.panel-foot{background:var(--paper);border-top:1px solid var(--line);flex-direction:column;gap:8px;padding:12px 16px;display:flex;position:sticky;bottom:0}.panel-foot .row{gap:8px;display:flex}.panel-foot .row button{flex:1;min-height:40px}.field{flex-direction:column;gap:6px;display:flex}.field>span{color:var(--muted);font-size:12px}.field.inline{flex-direction:row;justify-content:space-between;align-items:center}.field em{background:var(--tint);margin-left:6px;padding:0 4px;font-size:11px;font-style:normal}.group{flex-direction:column;gap:10px;display:flex}.group+.group{border-top:1px solid var(--soft);padding-top:14px}.group h3{margin:0;font-size:13px}.options{flex-direction:column;display:flex}.option{text-align:left;justify-content:space-between;align-items:center;min-height:36px;display:flex}.option+.option{border-top:0}.option small{opacity:.7;font-size:11px}.option.empty:not([aria-pressed=true]){color:var(--muted)}.stepper{border:1px solid #c9c9c5;display:inline-flex}.stepper button{border:0;width:32px;padding:0;font-size:16px}.stepper output{border-inline:1px solid var(--soft);font-variant-numeric:tabular-nums;place-items:center;min-width:40px;font-weight:600;display:grid}.swatches{flex-wrap:wrap;gap:6px;display:flex}.swatches button{border:2px solid #0000;width:28px;height:28px;min-height:0;padding:0}.swatches button[aria-pressed=true]{border-color:var(--ink);box-shadow:inset 0 0 0 2px #fff}.swatches .none{background:var(--paper);width:auto;color:var(--ink);border:1px solid #c9c9c5;padding:0 8px;font-size:12px}.swatches .none[aria-pressed=true]{border:2px solid var(--ink)}.swatch{vertical-align:middle;border:1px solid var(--line);width:18px;height:18px;display:inline-block}.option{box-shadow:inset 4px 0 var(--course)}.option[aria-pressed=true]{box-shadow:inset 4px 0 var(--course),inset 0 0 0 1px var(--ink)}.facts{grid-template-columns:56px 1fr;align-content:start;gap:10px;margin:0;display:grid}.facts dt{color:var(--muted)}.facts dd{overflow-wrap:anywhere;white-space:pre-wrap;margin:0}.facts code{font-size:12px}.list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.list button{text-align:left;border:1px solid var(--soft);border-left:4px solid;grid-template-columns:1fr auto;gap:0 8px;width:100%;padding:6px 10px;display:grid}.list b{text-overflow:ellipsis;overflow:hidden}.list span{font-variant-numeric:tabular-nums;font-size:12px}.list small{color:var(--muted);grid-column:1/-1;font-size:11px}.list em{color:var(--bad);font-style:normal}.login{background:var(--paper);border:1px solid var(--line);flex-direction:column;gap:12px;width:360px;max-width:100%;padding:28px;display:flex}.login h1{margin:0;font-size:22px;font-weight:600}.login-code{background:var(--tint);text-align:center;flex-direction:column;align-items:center;gap:8px;padding:18px;display:flex}.login-code strong{letter-spacing:8px;font:600 34px/1 ui-monospace,SFMono-Regular,Menlo,monospace}.toast{z-index:60;background:var(--ink);color:#fff;align-items:center;gap:12px;max-width:calc(100% - 32px);padding:8px 8px 8px 14px;display:flex;position:fixed;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0000002e}.toast.bad{background:var(--bad)}.toast button{color:#fff;background:0 0;border:0;min-height:24px;padding:0 6px;font-size:16px}@media (max-width:760px){.topbar{flex-wrap:wrap;gap:8px;height:auto;padding:8px 12px}.actions{margin-left:0}.workspace,.workspace.with-panel{grid-template-columns:minmax(0,1fr);height:auto}.board{max-height:calc(100vh - 100px)}.inspector{z-index:40;border:0;border-top:1px solid var(--ink);max-height:75vh;position:fixed;inset:auto 0 0;box-shadow:0 -8px 24px #00000024}}.print-sheet{display:none}@media print{@page{size:A4 landscape;margin:10mm}html,body{background:#fff}body>:not(.print-sheet){display:none!important}.print-sheet{color:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact;width:277mm;font-size:8pt;line-height:1.3;display:block}.print-day{font-size:11pt}.print-sheet header{align-items:baseline;gap:4mm;height:8mm;display:flex}.print-sheet header b{letter-spacing:1px;font-size:11pt}.print-sheet header span{font-size:11pt;font-weight:600}.print-sheet header small{color:#555;margin-left:auto;font-size:8pt}.print-sheet table{table-layout:fixed;border-collapse:collapse;width:100%}.print-sheet col.print-date{width:24mm}.print-day col.print-date{width:30mm}.print-sheet th,.print-sheet td{vertical-align:top;text-align:left;overflow-wrap:anywhere;border:.2mm solid #ccc;padding:1mm 1.2mm}.print-sheet thead th{color:#555;vertical-align:middle;height:6mm;font-size:8pt;font-weight:400}.print-sheet tbody th b{display:block}.print-sheet tbody th small{color:#555;font-size:.85em;font-weight:400;display:block}.print-sheet tr{break-inside:avoid}.print-sheet tr.first>*{border-top:.5mm solid #000}.print-sheet td.booked{border:.2mm solid #888;border-left:1.2mm solid}.print-sheet td.booked.pending{border-style:dashed dashed dashed solid}.print-sheet td .remark{color:#333}.print-sheet td.stacked>*{display:block}.print-sheet td.none{color:#888;vertical-align:middle;text-align:center}.print-sheet footer{color:#555;flex-wrap:wrap;gap:4mm;margin-top:2mm;font-size:7pt;display:flex}.print-sheet footer i{vertical-align:middle;width:1.2mm;height:3mm;margin-right:1mm;display:inline-block}.print-sheet footer i.dashed{border:.2mm dashed #555;width:3mm}}
