:root{--mono: "SF Mono", ui-monospace, "Cascadia Mono", "Roboto Mono", Menlo, Consolas, monospace;--sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "MiSans", "HarmonyOS Sans SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 28px;--fs-caps: 10.5px;--fs-cap: 12px;--fs-body: 14px;--fs-h3: 16px;--fs-h2: 19px;--ease-out: cubic-bezier(.23, 1, .32, 1);--t-press: .15s;--t-pop: .2s;--radius: 10px;--radius-sm: 4px;--z-topbar: 20;--z-dialog: 50}.surface-board{color-scheme:light;--bg: #f2f2f4;--panel: #ffffff;--panel-2: #f4f4f5;--text: #1d1d1f;--muted: #55555b;--faint: #636368;--hairline: #e4e4e7;--hairline-2: #d3d3d8;--line-soft: #ececef;--accent: #1d1d1f;--accent-ink: #ffffff;--accent-dim: rgba(29, 29, 31, .35);--accent-bg: rgba(0, 0, 0, .05);--good: #157f5f;--good-bg: rgba(21, 127, 95, .1);--warn: #8a5416;--warn-bg: rgba(138, 84, 22, .1);--risk: #b3362b;--risk-strong: #8f2b22;--risk-bg: rgba(179, 54, 43, .1);--input-bg: #ffffff;--btn-primary-bg: var(--accent);--btn-primary-ink: #ffffff;--btn-primary-hover: #000000;--toast-bg: #1d1d1f;--toast-ink: #ffffff;--shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 4px 16px rgba(0, 0, 0, .05)}.surface-paper{color-scheme:light;--bg: #edeae1;--panel: #fbfaf6;--panel-2: #f1eee6;--text: #1d1e22;--muted: #5f5d54;--faint: #8b887c;--hairline: #ddd9cc;--hairline-2: #c9c4b4;--accent: #e8a33d;--accent-ink: #1b1c20;--accent-dim: rgba(184, 122, 28, .45);--accent-bg: rgba(232, 163, 61, .14);--good: #20724f;--good-bg: rgba(32, 114, 79, .1);--risk: #b4432e;--risk-strong: #96351f;--risk-bg: rgba(180, 67, 46, .09);--ink: #1d1e22;--ink-soft: #2a2b31;--input-bg: #ffffff;--btn-primary-bg: var(--ink);--btn-primary-ink: #f2efe7;--btn-primary-hover: #000000;--toast-bg: var(--ink);--toast-ink: #f2efe7;--shadow: 0 1px 2px rgba(60, 50, 20, .06), 0 10px 28px rgba(60, 50, 20, .1)}*{box-sizing:border-box;margin:0}html,body,#root{height:100%}body{font-family:var(--sans);font-size:var(--fs-body);background:#f2f2f4;-webkit-font-smoothing:antialiased;line-height:1.5}button,input,select{font:inherit;color:inherit}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}.caps{font-size:var(--fs-caps);font-weight:600;letter-spacing:1.2px;text-transform:uppercase;color:var(--faint)}.surface-board,.surface-paper{min-height:100dvh;background:var(--bg);color:var(--text)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);height:38px;padding:0 var(--sp-4);border:1px solid transparent;border-radius:var(--radius-sm);font-size:var(--fs-body);font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;-webkit-tap-highlight-color:transparent;transition:transform var(--t-press) var(--ease-out),background-color .12s ease,border-color .12s ease,color .12s ease}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.4;cursor:default;transform:none}.btn-primary{background:var(--btn-primary-bg);color:var(--btn-primary-ink)}.btn-ghost{background:#0000000b;border-color:transparent;color:var(--text)}.btn-danger{background:var(--risk);color:#fff}@media(hover:hover)and (pointer:fine){.btn-primary:hover:not(:disabled){background:var(--btn-primary-hover)}.btn-ghost:hover:not(:disabled){border-color:var(--accent-dim);background:var(--accent-bg)}.btn-danger:hover:not(:disabled){background:var(--risk-strong)}}.btn-lg{height:52px;width:100%;font-size:var(--fs-h3);border-radius:12px}.btn-sm{height:30px;padding:0 var(--sp-3);font-size:var(--fs-cap);font-weight:500}.field{display:grid;gap:6px}.field-label{font-size:var(--fs-cap);font-weight:600;color:var(--muted)}.input,.select{height:44px;padding:0 var(--sp-3);border:1px solid var(--hairline-2);border-radius:8px;background:var(--input-bg);color:var(--text);font-size:16px;transition:border-color .12s ease,box-shadow .12s ease}.input::placeholder{color:var(--faint)}.input:focus,.select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}.surface-paper .input:focus,.surface-paper .select:focus{border-color:var(--ink);box-shadow:0 0 0 3px #1d1e221f}.select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23888888' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:30px}.alert{padding:var(--sp-3) var(--sp-4);border:1px solid var(--risk);border-radius:var(--radius-sm);background:var(--risk-bg);color:var(--risk);font-size:var(--fs-cap)}.card{background:var(--panel);border-radius:12px;box-shadow:var(--shadow);padding:var(--sp-5)}.toasts{position:fixed;bottom:calc(20px + env(safe-area-inset-bottom));left:0;right:0;display:grid;justify-items:center;gap:var(--sp-2);z-index:var(--z-dialog);pointer-events:none}.toast{background:var(--toast-bg, #1d1e22);color:var(--toast-ink, #f2efe7);font-size:var(--fs-cap);font-weight:500;padding:10px 16px;border-radius:6px;box-shadow:0 4px 16px #00000059;opacity:0;transform:translateY(8px);transition:opacity var(--t-pop) var(--ease-out),transform var(--t-pop) var(--ease-out)}.toast[data-on=true]{opacity:1;transform:translateY(0)}.overlay{position:fixed;inset:0;z-index:var(--z-dialog)}.overlay-mask{position:absolute;inset:0;background:#08080a8c;opacity:0;transition:opacity var(--t-pop) ease}.overlay[data-on=true] .overlay-mask{opacity:1}.modal{position:absolute;left:50%;top:50%;width:min(360px,calc(100vw - 40px));translate:-50% -50%;background:var(--panel);border-radius:14px;box-shadow:var(--shadow);padding:var(--sp-5);display:grid;gap:var(--sp-4);opacity:0;scale:.96;transition:opacity var(--t-pop) var(--ease-out),scale var(--t-pop) var(--ease-out)}.overlay[data-on=true] .modal{opacity:1;scale:1}.modal-title{font-size:var(--fs-h2);font-weight:700}.modal-text{color:var(--muted);margin-top:6px}.modal-actions{display:flex;justify-content:flex-end;gap:var(--sp-2)}.drawer-panel{position:absolute;top:0;right:0;bottom:0;width:min(380px,100vw);background:var(--panel);border-left:1px solid var(--hairline);box-shadow:-12px 0 40px #0006;transform:translate(100%);transition:transform .24s var(--ease-out);overflow-y:auto;padding:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-4)}.overlay[data-on=true] .drawer-panel{transform:translate(0)}@media(prefers-reduced-motion:reduce){.drawer-panel,.modal,.toast{transition-property:opacity}.drawer-panel{transform:none;opacity:0}.overlay[data-on=true] .drawer-panel{opacity:1}}.stu-mast{display:flex;align-items:center;justify-content:space-between;padding:0 var(--sp-4);height:46px;background:var(--ink);color:#f2efe7}.stu-mast .brand{font-weight:700;letter-spacing:2px;font-size:var(--fs-body)}.stu-mast .caps{color:#f2efe78c}.stu{display:flex;flex-direction:column}.stu-wrap{width:min(440px,100%);margin:0 auto;padding:var(--sp-5) var(--sp-4) calc(var(--sp-6) + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:var(--sp-4);flex:1}.stu-head{display:grid;gap:2px;padding-bottom:var(--sp-3);border-bottom:2px solid var(--ink)}.stu-title{font-size:26px;font-weight:700;letter-spacing:1px}.stu-actions{display:grid;gap:var(--sp-3);margin-top:var(--sp-2)}.stu-note{font-size:var(--fs-cap);color:var(--faint);text-align:center}.assign-room{display:flex;align-items:baseline;gap:var(--sp-3)}.assign-room .room-no{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:52px;font-weight:700;line-height:1.05;letter-spacing:-1px}.assign-room .room-meta{color:var(--muted);font-size:var(--fs-cap)}.pass{background:#fdfcfa;border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;opacity:0;transform:translateY(10px);transition:opacity .26s var(--ease-out),transform .26s var(--ease-out)}.pass[data-on=true]{opacity:1;transform:translateY(0)}@media(prefers-reduced-motion:reduce){.pass{transform:none}}.pass-head{display:flex;justify-content:space-between;align-items:center;padding:var(--sp-3) var(--sp-5);background:var(--ink);color:#f2efe7}.pass-head .caps{color:#f2efe78c}.pass-status{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-cap);font-weight:600;color:#4caf82}.pass-status:before{content:"";width:7px;height:7px;border-radius:50%;background:#4caf82}.pass-main{display:flex;gap:var(--sp-6);padding:var(--sp-5)}.pass-slot{display:grid;gap:4px}.pass-slot .big{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:42px;font-weight:700;line-height:1.1;letter-spacing:-1px}.pass-slot .big-chip{background:var(--accent);color:var(--accent-ink);padding:0 10px;border-radius:8px}.pass-rows{padding:0 var(--sp-5) var(--sp-4);display:grid;gap:var(--sp-2)}.pass-row{display:flex;justify-content:space-between;font-size:var(--fs-cap)}.pass-row .k{color:var(--faint)}.pass-row .v{font-weight:600}.pass-divider{position:relative;border-top:2px dashed var(--hairline-2)}.pass-divider:before,.pass-divider:after{content:"";position:absolute;top:-9px;width:16px;height:16px;border-radius:50%;background:var(--bg)}.pass-divider:before{left:-8px}.pass-divider:after{right:-8px}.pass-stub{display:flex;align-items:center;gap:var(--sp-4);padding:var(--sp-4) var(--sp-5)}.barcode{flex:1;height:34px;background:repeating-linear-gradient(90deg,#1d1e22 0 2px,transparent 2px 4px,#1d1e22 4px 7px,transparent 7px 8px,#1d1e22 8px 9px,transparent 9px 13px,#1d1e22 13px 14px,transparent 14px 16px)}.pass-serial{font-family:var(--mono);font-size:var(--fs-caps);color:var(--faint);letter-spacing:1px}.adm{display:flex;flex-direction:column}.adm-top{position:sticky;top:0;z-index:var(--z-topbar);display:flex;align-items:center;gap:var(--sp-5);height:52px;padding:0 var(--sp-5);background:#ffffffb8;backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border-bottom:1px solid rgba(0,0,0,.07)}@media(prefers-reduced-transparency:reduce){.adm-top{background:var(--panel);backdrop-filter:none;-webkit-backdrop-filter:none}}.adm-brand{display:flex;align-items:baseline;gap:var(--sp-2);white-space:nowrap}.adm-brand .zh{font-size:var(--fs-h3);font-weight:700;letter-spacing:1px}.adm-tabs{display:flex;gap:var(--sp-1);height:100%}.adm-tab{border:0;background:none;padding:0 var(--sp-3);cursor:pointer;color:var(--muted);font-weight:500;border-bottom:2px solid transparent;transition:color .12s ease}.adm-tab[data-on=true]{color:var(--accent);font-weight:600;border-bottom-color:var(--accent)}@media(hover:hover)and (pointer:fine){.adm-tab:hover{color:var(--text)}}.adm-spacer{flex:1}.adm-main{flex:1;padding:var(--sp-5);display:grid;gap:var(--sp-5);align-content:start}.readout{display:flex;align-items:flex-end;width:fit-content;gap:var(--sp-6);padding:var(--sp-1) var(--sp-2)}.readout-cell{display:grid;gap:2px}.readout-cell .n{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:26px;font-weight:700;line-height:1.1}.readout-cell[data-accent=true]{background:var(--accent);border-radius:8px;padding:6px 14px 8px;align-self:center}.readout-cell[data-accent=true] .n{color:var(--accent-ink);font-size:17px;line-height:1.4}.readout-cell[data-accent=true] .caps{color:#ffffff8c}.bay-group{display:grid;gap:var(--sp-3)}.placement-bar{position:sticky;top:68px;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-4);padding:10px 12px 10px 16px;border:1px solid var(--hairline-2);border-radius:12px;background:#ffffffeb;box-shadow:var(--shadow);-webkit-backdrop-filter:blur(16px) saturate(140%);backdrop-filter:blur(16px) saturate(140%)}.placement-bar>span{display:grid;gap:2px;font-size:var(--fs-sm)}.placement-bar small{color:var(--muted);font-size:var(--fs-cap)}.bed-search{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-4)}.bed-search .input{width:min(420px,100%)}.bed-search-result{color:var(--muted);font-size:var(--fs-cap);white-space:nowrap}.bed-search-result[data-empty=true]{color:var(--warn)}.bay-group-label{display:flex;align-items:center;gap:var(--sp-3)}.bay-group-label:after{content:"";flex:1;border-top:1px solid var(--hairline)}.bays{display:grid;grid-template-columns:repeat(auto-fill,minmax(400px,1fr));gap:var(--sp-4)}.bay{background:var(--panel);border-radius:12px;box-shadow:var(--shadow);padding:var(--sp-3) 0 var(--sp-2);display:grid;gap:var(--sp-2);align-content:start}.bay[data-inactive=true]{opacity:.5;background-image:repeating-linear-gradient(45deg,transparent 0 10px,rgba(0,0,0,.03) 10px 12px)}.bay-head{padding:0 var(--sp-4) var(--sp-1);display:flex;align-items:baseline;gap:var(--sp-2);padding:2px 4px 0}.bay-name{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:22px;font-weight:700;letter-spacing:-.5px}.bay-count{margin-left:auto;font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:var(--fs-cap);color:var(--muted)}.tag-off{font-size:var(--fs-caps);font-weight:600;color:var(--warn);background:var(--warn-bg);border:1px solid rgba(138,84,22,.42);border-radius:3px;padding:0 5px}.drawer-head{display:flex;justify-content:space-between;align-items:center}.drawer-title{font-size:var(--fs-h2);font-weight:700}.kv{display:grid;gap:var(--sp-2);padding:var(--sp-3) 0;border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline)}.kv-row{display:flex;justify-content:space-between;font-size:var(--fs-body)}.kv-row .k{color:var(--muted)}.kv-row .v{font-weight:500}.drawer-section{display:grid;gap:var(--sp-2)}.drawer-section-title{font-size:var(--fs-cap);font-weight:600;color:var(--muted)}.export-modal{width:min(480px,calc(100vw - 32px));display:grid;gap:var(--sp-4)}.export-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}.export-copy{margin:0;color:var(--muted);font-size:var(--fs-sm);line-height:1.6}.export-dates{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}@media(max-width:520px){.export-dates{grid-template-columns:1fr}}.inline-row{display:flex;gap:var(--sp-2)}.inline-row>.select,.inline-row>.input{flex:1;min-width:0;height:38px}.filters{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center}.filters .input,.filters .select{height:34px;font-size:var(--fs-body)}.seg{display:inline-flex;border:1px solid var(--hairline-2);border-radius:var(--radius-sm);overflow:hidden}.seg button{border:0;background:none;padding:0 var(--sp-3);height:32px;cursor:pointer;font-size:var(--fs-cap);color:var(--muted);transition:background-color .12s ease,color .12s ease}.seg button[data-on=true]{background:var(--accent);color:var(--accent-ink);font-weight:700}.tbl-wrap{background:var(--panel);border-radius:12px;box-shadow:var(--shadow);overflow-x:auto}.tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:780px}.tbl th{text-align:left;font-size:var(--fs-caps);font-weight:600;letter-spacing:1px;color:var(--faint);padding:10px var(--sp-3);border-bottom:1px solid var(--hairline-2);white-space:nowrap}.tbl td{padding:9px var(--sp-3);border-bottom:1px solid var(--hairline);white-space:nowrap}.tbl tr:last-child td{border-bottom:0}@media(hover:hover)and (pointer:fine){.tbl tbody tr:hover td{background:var(--panel-2)}}.pill{font-size:var(--fs-caps);font-weight:600;border-radius:3px;padding:2px 6px}.pill-active{color:var(--good);background:var(--good-bg)}.pill-out{color:var(--faint);background:var(--panel-2)}.batchbar{position:sticky;bottom:var(--sp-4);display:flex;align-items:center;gap:var(--sp-3);background:var(--panel);border:1px solid var(--hairline-2);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--sp-3) var(--sp-4)}.batchbar .count{font-family:var(--mono);font-weight:700;color:var(--accent)}.settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:var(--sp-4);align-items:start}.room-config-row{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) 0;border-bottom:1px solid var(--hairline)}.room-config-row:last-of-type{border-bottom:0}.room-config-row .order{font-family:var(--mono);color:var(--faint);width:20px}.room-config-row .name{font-family:var(--mono);font-weight:700;flex:1}.switch{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-cap);color:var(--muted);cursor:pointer}.hint{color:var(--faint);font-size:var(--fs-cap);margin-top:4px}.qr-block{display:grid;gap:var(--sp-3);justify-items:center;text-align:center}.qr-frame{background:#fff;padding:12px;border-radius:var(--radius-sm)}.qr-frame img{display:block;width:208px;height:208px}.qr-url{font-family:var(--mono);font-size:var(--fs-cap);color:var(--muted);word-break:break-all}.login-wrap{min-height:100dvh;display:grid;place-items:center;padding:var(--sp-5)}.login-card{width:min(360px,100%);display:grid;gap:var(--sp-4);background:var(--panel);color:var(--text);border:1px solid var(--hairline);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--sp-6)}@media print{body *{visibility:hidden}.print-area,.print-area *{visibility:visible}.print-area{position:fixed;inset:0;display:grid;place-content:center;gap:16px;background:#fff;color:#000}.print-area .qr-frame img{width:340px;height:340px}}.chips{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.chip{border:1.5px solid var(--hairline-2);border-radius:999px;background:var(--panel);color:var(--text);font-size:var(--fs-sm);font-weight:500;padding:7px 14px;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background-color .12s ease,border-color .12s ease,color .12s ease,transform var(--t-press) var(--ease-out)}.chip:active{transform:scale(.95)}.chip[data-sel=true]{background:var(--ink, var(--accent));border-color:var(--ink, var(--accent));color:#f2efe7}.tl{display:grid;gap:var(--sp-3)}.tl-bar-top{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}.tl-legend{display:flex;flex-wrap:wrap;gap:var(--sp-3);font-size:var(--fs-cap);color:var(--muted)}.tl-legend-item{display:inline-flex;align-items:center;gap:6px}.tl-legend-item i{width:10px;height:10px;border-radius:3px}.tl-legend-item i[data-other=true]{border:1px dashed var(--faint)}.seg{display:inline-flex;gap:2px;padding:2px;border-radius:8px;background:#0000000d}.seg-btn{background:transparent;color:var(--muted);border:0;border-radius:6px;padding:4px 14px;font-size:var(--fs-cap);font-weight:600;cursor:pointer;transition:background-color .12s ease,color .12s ease,box-shadow .12s ease}.seg-btn[data-on=true]{background:var(--panel);color:var(--text);box-shadow:0 1px 3px #0000001f}.tl-body{border-radius:12px;box-shadow:var(--shadow);background:var(--panel);overflow:auto;max-height:calc(100vh - 210px);cursor:grab;-webkit-user-select:none;user-select:none}.tl-body:active{cursor:grabbing}.tl-canvas{position:relative}.tl-row{display:flex;border-bottom:1px solid var(--hairline)}.tl-row[data-inactive=true] .tl-track{background:repeating-linear-gradient(-45deg,transparent 0 6px,rgba(0,0,0,.025) 6px 12px);opacity:.55}.tl-label{flex:0 0 176px;position:sticky;left:0;z-index:3;background:var(--panel);border-right:1px solid var(--hairline-2);padding:4px 12px;font-size:var(--fs-cap);color:var(--muted);display:flex;align-items:center;gap:8px;white-space:nowrap}.tl-head{position:sticky;top:0;z-index:4;background:var(--panel)}.tl-head .tl-label{color:var(--faint)}.tl-head .tl-track{height:30px}.tl-tick{position:absolute;top:0;bottom:0;border-left:1px solid var(--hairline)}.tl-tick[data-month=true]{border-left-color:var(--hairline-2)}.tl-tick-label{position:absolute;top:7px;left:4px;font-size:10px;color:var(--faint)}.tl-tick[data-month=true] .tl-tick-label{color:var(--text);font-weight:700}.tl-room-head .tl-label{color:var(--text);font-weight:700;padding-top:8px;padding-bottom:8px}.tl-room-meta{color:var(--faint);font-size:var(--fs-caps);font-weight:400}.tl-room-head .tl-track{background:var(--panel-2)}.tl-track{position:relative;flex:1 0 auto;height:26px}.tl-today{position:absolute;top:0;bottom:0;border-left:2px solid var(--accent);z-index:2}.tl-today span{position:absolute;top:2px;left:3px;font-size:var(--fs-caps);color:var(--accent);font-weight:700}.tl-today-line{position:absolute;top:0;bottom:0;border-left:2px solid var(--accent-dim);z-index:1}.tl-bar{position:absolute;top:4px;height:18px;border:0;border-radius:4px;padding:0 6px;display:flex;align-items:center;overflow:hidden;cursor:pointer;z-index:1;box-shadow:0 0 0 2px var(--panel)}.tl-bar[data-other=true]{border:1px dashed rgba(255,255,255,.65)}.tl-bar-name{font-size:11px;font-weight:600;color:#fff;white-space:nowrap}.tl-dot{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:6px}.tl-pop-note{color:var(--faint);font-size:var(--fs-cap)}.tl-empty{color:var(--muted);padding:var(--sp-5)}.cal{display:grid;gap:var(--sp-3)}.cal-top{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--sp-3)}.cal-nav{display:flex;align-items:center;gap:var(--sp-2)}.cal-month{font-size:var(--fs-h3);font-weight:700;min-width:84px;text-align:center}.cal-hint{color:var(--faint)}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--hairline);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}.cal-wd{background:var(--panel);padding:8px 10px;color:var(--faint)}.cal-cell{background:var(--panel);border:0;min-height:84px;padding:8px 10px;display:flex;flex-direction:column;align-items:flex-start;gap:4px;color:var(--text);cursor:pointer;text-align:left;transition:background-color .12s ease}@media(hover:hover)and (pointer:fine){.cal-cell:not(:disabled):hover{background:var(--panel-2)}}.cal-cell-empty{cursor:default;pointer-events:none}.cal-cell[data-today=true]{box-shadow:inset 0 0 0 2px var(--accent)}.cal-cell[data-state=no_data],.cal-cell[data-state=future]{cursor:default;background:#ffffff9e}.cal-cell[data-state=future]{background-image:repeating-linear-gradient(135deg,transparent 0 12px,rgba(0,0,0,.018) 12px 13px)}.cal-state-copy{margin-top:8px;color:var(--faint);font-size:var(--fs-caps);font-weight:500}.cal-state-copy b{color:var(--muted);font-size:15px}.cal-daynum{font-size:var(--fs-cap);color:var(--muted);font-weight:600}.cal-cell[data-today=true] .cal-daynum{color:var(--accent)}.cal-free{display:flex;align-items:baseline;gap:5px}.cal-free b{font-size:19px;font-weight:700}.cal-free i{font-style:normal;font-size:var(--fs-caps);color:var(--faint)}.cal-flow{display:flex;gap:8px;font-size:var(--fs-caps);font-weight:600}.cal-flow .in{font-style:normal;color:var(--good)}.cal-flow .out{font-style:normal;color:var(--risk)}.cal-modal{width:min(520px,calc(100vw - 40px));max-height:80vh;overflow-y:auto}.cal-sec{display:grid;gap:var(--sp-2)}.cal-sec-empty{color:var(--faint);font-size:var(--fs-cap)}.cal-sec-row{display:flex;align-items:center;gap:var(--sp-3);font-size:var(--fs-cap);border-bottom:1px solid var(--hairline);padding-bottom:6px}.cal-sec-bed{color:var(--muted);flex:0 0 64px}.cal-sec-name{font-weight:600}.cal-sec-meta{color:var(--faint);flex:1}.cal-sec-time{color:var(--muted)}.ck{appearance:none;width:16px;height:16px;margin:0;border:1.5px solid var(--hairline-2);border-radius:4px;background:var(--input-bg, var(--panel));cursor:pointer;display:inline-grid;place-content:center;transition:background-color .12s ease,border-color .12s ease,transform var(--t-press) var(--ease-out);vertical-align:middle}.ck:before{content:"";width:9px;height:9px;clip-path:polygon(14% 44%,0 60%,40% 100%,100% 16%,84% 2%,38% 70%);background:var(--accent-ink);transform:scale(0);transition:transform .12s var(--ease-out)}.ck:checked{background:var(--accent);border-color:var(--accent)}.ck:checked:before{transform:scale(1)}.ck:active{transform:scale(.9)}.ck:focus-visible{outline:2px solid var(--accent-dim);outline-offset:1px}.tab-panel{animation:panel-in .14s var(--ease-out)}@keyframes panel-in{0%{opacity:0;transform:translateY(4px)}}@media(prefers-reduced-motion:reduce){.tab-panel{animation-name:panel-fade}@keyframes panel-fade{0%{opacity:0}}}.board{border:1.5px dashed var(--hairline-2);border-radius:var(--radius);background:var(--panel);padding:var(--sp-4) var(--sp-5);display:grid;gap:var(--sp-1);min-height:88px;align-content:center}.board[data-full=true]{border-color:var(--risk)}.board[data-full=true] .board-main{color:var(--risk-strong, var(--risk))}.board-main{display:flex;align-items:baseline;gap:var(--sp-3);font-size:var(--fs-h2);font-weight:700}.board-meta{color:var(--muted);font-size:var(--fs-cap);font-weight:400}.linklike{background:none;border:0;padding:6px;justify-self:center;margin:0 auto;display:block;color:var(--muted);font-size:var(--fs-body);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--hairline-2);cursor:pointer;transition:color .12s ease}@media(hover:hover)and (pointer:fine){.linklike:hover{color:var(--text)}}.form-sec{color:var(--faint);border-top:1px solid var(--hairline);padding-top:var(--sp-4);margin-top:var(--sp-1)}.pass[data-on=true] .pass-row{animation:pass-row-in .24s var(--ease-out) both}.pass[data-on=true] .pass-row:nth-child(1){animation-delay:.12s}.pass[data-on=true] .pass-row:nth-child(2){animation-delay:.17s}.pass[data-on=true] .pass-row:nth-child(3){animation-delay:.22s}.pass[data-on=true] .pass-row:nth-child(4){animation-delay:.27s}@keyframes pass-row-in{0%{opacity:0;transform:translateY(6px)}}@media(prefers-reduced-motion:reduce){.pass[data-on=true] .pass-row{animation:none}}.plan{display:grid;grid-template-areas:"l1 t1 t2 t3 door" "l1 core core core door" "l2 core core core door" "l2 b1 b2 b3 door";grid-template-columns:1.15fr 1fr 1fr 1fr 44px;grid-template-rows:1fr 26px 26px 1fr;gap:6px;padding:var(--sp-3) var(--sp-4) var(--sp-4)}.plan-bed{min-height:56px;border:1.5px dashed var(--hairline-2);border-radius:8px;background:transparent;color:var(--faint);display:grid;align-content:center;justify-items:center;gap:2px;padding:4px 6px;cursor:pointer;position:relative;-webkit-tap-highlight-color:transparent;transition:background-color .12s ease,border-color .12s ease,transform var(--t-press) var(--ease-out)}.plan-bed:active{transform:scale(.96)}.plan-bed[data-occ=true]{border:1px solid transparent;background:var(--panel-2);color:var(--text)}@media(hover:hover)and (pointer:fine){.plan-bed[data-occ=true]:not(:disabled):hover{filter:brightness(.97)}.plan-bed[data-occ=false]:not([data-sel=true]):hover{border-color:var(--faint);color:var(--muted)}}.plan-bed:disabled{cursor:default}.plan-bed[data-target=move],.plan-bed[data-target=swap]{border-style:solid;border-color:var(--text);box-shadow:0 0 0 3px #00000012}.plan-bed[data-target=move]:after,.plan-bed[data-target=swap]:after{content:"换到这里";position:absolute;right:5px;bottom:4px;font-size:8px;font-weight:700;color:var(--text)}.plan-bed[data-target=swap]:after{content:"与他对调"}.plan-bed[data-current=true]{opacity:.48;box-shadow:inset 0 0 0 1px var(--hairline-2)}.plan-bed[data-search-match=true]{border-color:var(--text);box-shadow:0 0 0 4px #0000001c}@media(max-width:640px){.bed-search{align-items:stretch;flex-wrap:wrap}.bed-search .input{width:100%}.placement-bar{top:58px}}.plan-bed[data-sel=true]{border:1px solid var(--ink, var(--accent));background:var(--ink, var(--accent));color:#f2efe7}.plan-bed[data-sel=true] .plan-no{color:#fff9}.plan-bed[data-sel=true] .plan-empty{font-weight:700}.plan-compact{padding:var(--sp-2) 0 0;gap:5px;grid-template-rows:1fr 20px 20px 1fr}.plan-compact .plan-bed{min-height:48px}.plan-compact .plan-room{font-size:17px}.plan-bed[data-next=true]{border:1px solid var(--accent);background:var(--accent);color:var(--accent-ink)}.plan-bed[data-next=true] .plan-no{color:#fff9}.plan-no{position:absolute;top:4px;left:7px;font-size:10px;font-weight:600;color:var(--faint);font-variant-numeric:tabular-nums}.plan-name{font-size:13px;font-weight:600;line-height:1.25;text-align:center;display:grid;justify-items:center}.plan-squad{font-style:normal;font-size:9.5px;font-weight:500;color:var(--faint);max-width:9ch;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plan-empty{font-size:var(--fs-cap)}.plan-bed[data-next=true] .plan-empty{font-weight:700}.plan-core{display:grid;place-items:center}.plan-room{font-size:21px;font-weight:700;letter-spacing:.04em;color:var(--hairline-2);-webkit-user-select:none;user-select:none}.plan-door{position:relative;display:grid;align-content:center;justify-items:center;gap:2px;color:var(--faint);border-left:1.5px solid var(--hairline)}.plan-door .caps{font-size:9px}.plan-door-arc{width:22px;height:22px;border:1.5px solid var(--hairline-2);border-right:0;border-bottom:0;border-top-left-radius:22px}.bed-dots{display:inline-flex;gap:3px;align-items:center}.bed-dots i{width:7px;height:7px;border-radius:50%;border:1.5px solid var(--hairline-2)}.bed-dots i[data-occ=true]{background:var(--text);border-color:var(--text)}.entries{display:grid;gap:var(--sp-3)}.entry{display:flex;align-items:center;gap:var(--sp-4);text-align:left;background:var(--panel);border:0;border-radius:12px;box-shadow:var(--shadow);padding:var(--sp-4) var(--sp-5);cursor:pointer;color:var(--text);-webkit-tap-highlight-color:transparent;transition:transform var(--t-press) var(--ease-out),background-color .12s ease}.entry:active:not(:disabled){transform:scale(.98)}.entry[data-disabled=true]{cursor:default}.entry[data-disabled=true] .stamp-ink{background:var(--faint)}.stamp{flex:none;width:46px;height:46px;border-radius:9px;display:grid;place-items:center;font-size:19px;font-weight:700}.stamp-ink{background:var(--ink);color:#f2efe7}.stamp-line{border:1.5px solid var(--ink);color:var(--ink)}.entry-body{display:grid;gap:3px;min-width:0}.entry-body b{font-size:var(--fs-h3);font-weight:700}.entry-body i{font-style:normal;font-size:var(--fs-cap);color:var(--muted)}.entry-body .entry-full{color:var(--risk);font-weight:500}.entry-arrow{margin-left:auto;color:var(--faint);font-size:22px;line-height:1}.vgap-a{flex:.42}.vgap-b{flex:1}.aero{padding-top:var(--sp-6);display:grid;gap:var(--sp-2);color:var(--faint)}.aero-line{position:relative;height:26px;display:flex;align-items:center;overflow:hidden}.aero-track{width:100%;border-top:1.5px dashed var(--hairline-2)}.aero-plane{position:absolute;right:10%;width:64px;height:22px;color:var(--ink);opacity:.82;animation:aero-in .9s var(--ease-out) both;animation-delay:.15s}@keyframes aero-in{0%{transform:translate(-46px);opacity:0}to{transform:translate(0);opacity:.82}}.aero-meta{display:flex;justify-content:space-between;letter-spacing:1.5px}@media(prefers-reduced-motion:reduce){.aero-plane{animation:aero-fade .4s ease both}@keyframes aero-fade{0%{opacity:0}}}
