:root{--bg: #f5f4ef;--card: #fffefa;--surface-soft: #f0eee6;--line: #e3e0d5;--line-soft: #edeade;--txt: #22211c;--sub: #8a8780;--radius: 14px;--radius-sm: 10px;--radius-xs: 8px;--shadow: 0 1px 2px rgba(34, 33, 28, .05), 0 8px 24px rgba(34, 33, 28, .05);--font-ui: "Times New Roman", "Liberation Serif", Georgia, "Microsoft YaHei UI", "Microsoft YaHei", "微软雅黑", system-ui, sans-serif;--font-display: var(--font-ui);--font-mono: Consolas, "Cascadia Mono", "Courier New", monospace;--font-num: "Times New Roman", "Liberation Serif", Georgia, "Microsoft YaHei UI", "Microsoft YaHei", "微软雅黑", system-ui, sans-serif;--peach-weak: #f6e7dc;--peach: #c15f3c;--peach-strong: #a94f30;--sage-weak: #e9f2eb;--sage: #3f6f51;--sage-strong: #2f543d;--sky-weak: #e9f1f5;--sky: #35657a;--sky-strong: #2a5164;--honey-weak: #f6f0de;--honey: #8a6a2f;--honey-strong: #6e5424;--rose-weak: #f8ecec;--rose: #a63a3a;--rose-strong: #8a2e2e;--acc: var(--peach);--acc-strong: var(--peach-strong);--acc-weak: var(--peach-weak);--accent-warm: var(--peach);--ok: var(--sage);--ok-weak: var(--sage-weak);--sky-info: var(--sky);--warn: var(--honey);--warn-weak: var(--honey-weak);--danger: var(--rose);--danger-weak: var(--rose-weak);--att-ok: var(--sage);--att-ok-weak: #eef4ef;--att-late: #b07324;--att-late-weak: #f7efe0;--att-leave: var(--sky);--att-leave-weak: var(--sky-weak);--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--row-h: 44px;--cell-pad-x: 12px;--ctrl-h: 34px;--stat-icon: 40px;--panel-pad: 18px;--bg-weak: var(--surface-soft);--fs-title: 22px;--fs-stat-md: 18px;--fs-card: 17px;--fs-body: 14px;--fs-th: 12.5px;--fs-hint: 12px;--fs-badge: 11.5px;--fs-stat-lg: 22px;--fs-num-xl: 36px;--fs-sm: 12px;--fw-regular: 400;--fw-medium: 500;--fw-semi: 600;--fw-card: 650;--fw-bold: 700;--z-content: 0;--z-handle: 10;--z-float: 20;--z-menu: 40;--z-modal: 100;--z-toast: 200;--ease-out: cubic-bezier(.2,.8,.2,1);--t-fast: .14s;--t: .18s;--t-slow: .2s}.error-strip{display:flex;align-items:center;gap:8px;padding:8px 16px;background:var(--danger-weak);border:1px solid var(--danger);border-radius:var(--radius-sm);color:var(--danger);font-size:var(--fs-body)}.error-dismiss{margin-left:auto;border:0;background:transparent;color:inherit;font-size:var(--fs-card);line-height:1;cursor:pointer;min-width:32px;min-height:32px}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{font-family:var(--font-ui);background:var(--bg);color:var(--txt);font-size:var(--fs-body);font-weight:var(--fw-regular);line-height:1.55;letter-spacing:0}.app-shell{display:grid;grid-template-rows:auto minmax(0,1fr);grid-template-columns:200px minmax(0,1fr);height:100dvh;min-width:0;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px);position:relative;overflow:hidden;background-color:var(--bg)}.app-shell>*{position:relative;z-index:1}@supports (padding: var(--sa-top, 0px)){.app-shell{padding-top:var(--sa-top, env(safe-area-inset-top, 0px));padding-bottom:var(--sa-bottom, env(safe-area-inset-bottom, 0px));padding-left:var(--sa-left, env(safe-area-inset-left, 0px));padding-right:var(--sa-right, env(safe-area-inset-right, 0px))}}.topbar{grid-column:1 / 3;display:flex;align-items:center;gap:var(--sp-3);padding:0 clamp(12px,2vw,24px);background:var(--card);border-bottom:1px solid var(--line);min-height:64px;flex-wrap:wrap;position:relative}.topbar .brand{font-family:var(--font-display);font-weight:var(--fw-card);font-size:var(--fs-card);letter-spacing:.01em;color:var(--txt);display:inline-flex;align-items:center;gap:var(--sp-2)}.brand-mark{width:34px;height:34px;border-radius:10px;background:var(--acc);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-card);font-weight:var(--fw-bold);flex-shrink:0}.brand-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}h1,h2,h3,.card h3,.panel-head h2{font-family:var(--font-display)}.topbar .ctx{display:flex;align-items:center;gap:var(--sp-2);margin-left:auto;flex-wrap:wrap}.topbar .ctx .lbl{color:var(--sub);font-size:var(--fs-body)}.topbar .ctx .wb-select{width:auto}.ctx-field{display:flex;align-items:center;gap:var(--sp-1);min-width:0}.btn.nav-toggle{display:none}.nav{background:var(--card);border-right:1px solid var(--line);padding:var(--sp-3) var(--sp-2);overflow-y:auto;min-width:0}.nav a{display:flex;align-items:center;gap:var(--sp-2);padding:10px 12px;margin:2px 0;border-radius:999px;color:var(--txt);text-decoration:none;font-size:var(--fs-body);transition:background-color var(--t-fast) ease,color var(--t-fast) ease,transform var(--t-fast) ease}.nav a:hover{background:var(--acc-weak);color:var(--acc-strong);transform:translateY(-1px)}.nav a.router-link-active{background:var(--acc);color:#fff;font-weight:var(--fw-semi)}.nav-icon{width:18px;height:18px;display:inline-flex;flex-shrink:0}.nav-icon svg{width:18px;height:18px;display:block}.main{overflow:auto;min-height:0;padding:clamp(18px,2vw,24px) clamp(18px,2.5vw,32px) 40px;min-width:0}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:16px}.card h3{margin:0 0 var(--sp-3);font-size:var(--fs-card);font-weight:var(--fw-card)}.card .hint{color:var(--sub);font-size:var(--fs-hint);font-weight:var(--fw-regular);margin-left:var(--sp-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);background:var(--card);color:var(--txt);border-radius:var(--radius-sm);padding:6px 14px;font-size:var(--fs-body);cursor:pointer;font-family:inherit;font-weight:var(--fw-medium);line-height:1.3;white-space:nowrap;min-height:32px;box-sizing:border-box;transition:border-color .14s ease,color .14s ease,background-color .14s ease,opacity .14s ease}.btn:hover{border-color:var(--acc);color:var(--acc-strong);background:var(--surface-soft)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--acc);border-color:var(--acc);color:#fff}.btn-primary:hover{background:var(--acc-strong);border-color:var(--acc-strong);color:#fff}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-danger:hover{background:var(--danger);border-color:var(--danger);color:#fff;opacity:.9}.btn-ghost{border-color:transparent;background:transparent}.btn-ghost:hover{background:var(--surface-soft)}.btn-sm{padding:4px 10px;font-size:var(--fs-body);min-height:32px;border-radius:var(--radius-sm)}.overflow-menu{position:relative;display:inline-flex}.overflow-trigger{min-width:32px;padding-left:8px;padding-right:8px}.overflow-panel{position:absolute;top:calc(100% + 6px);right:0;min-width:168px;z-index:var(--z-menu);padding:6px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:var(--shadow);display:flex;flex-direction:column;gap:2px}.overflow-item{display:flex;align-items:center;gap:8px;width:100%;border:0;background:transparent;color:var(--txt);font:inherit;font-size:var(--fs-body);text-align:left;text-decoration:none;padding:8px 10px;border-radius:8px;cursor:pointer;min-height:32px}.overflow-item:hover{background:var(--acc-weak);color:var(--acc-strong)}.overflow-item.danger{color:var(--danger)}.overflow-item.danger:hover{background:var(--danger-weak);color:var(--danger)}.overflow-item:disabled{opacity:.45;cursor:not-allowed}.overflow-divider{height:1px;background:var(--line-soft);margin:4px 2px}.wb-input,.wb-select,.wb-textarea{width:100%;border:1px solid var(--line);border-radius:var(--radius-sm);padding:7px 12px;font-size:var(--fs-body);font-family:inherit;background:#fff;color:var(--txt);box-shadow:inset 0 1px #22211c05}input[type=number],input[type=tel],input[inputmode=numeric],input[inputmode=decimal],.wb-input[type=number],.fr input[type=number],.fr input[inputmode=numeric],.fr input[inputmode=decimal],.wb-input.num,.fr input.num,.wb-input.tabular-number,.fr input.tabular-number,.wb-input.score-num-input,.fr .score-num-input{font-family:var(--font-num);font-variant-numeric:tabular-nums}.wb-input,.wb-select{min-height:var(--ctrl-h);line-height:1.35;box-sizing:border-box}.wb-input,.wb-select,.wb-textarea{transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.wb-input:hover,.wb-select:hover,.wb-textarea:hover{border-color:#d0ccbf}.wb-input:focus,.wb-select:focus,.wb-textarea:focus{outline:none;border-color:var(--acc);box-shadow:0 0 0 2px var(--acc-weak)}.wb-textarea{min-height:72px;resize:vertical;border-radius:var(--radius-sm)}.wb-input.is-err{border-color:var(--danger);box-shadow:0 0 0 2px var(--danger-weak)}.wb-input::placeholder,.wb-textarea::placeholder{color:#a8a494}.wb-table{width:100%;border-collapse:separate;border-spacing:0;background:var(--card)}.wb-table thead{background:var(--surface-soft)}.wb-table th,.wb-table td{border-bottom:1px solid var(--line);padding:8px var(--cell-pad-x);height:var(--row-h);text-align:left;font-size:var(--fs-body)}.wb-table th{background:var(--surface-soft);background-clip:padding-box;position:static;top:auto;z-index:var(--z-content);cursor:pointer;user-select:none;white-space:nowrap;font-weight:var(--fw-semi);font-size:var(--fs-th);color:var(--sub);box-shadow:0 1px 0 var(--line)}.wb-table th.plain{cursor:default}.wb-table tbody{z-index:var(--z-content)}.wb-table tbody td{background:var(--card)}.wb-table tbody tr:hover td{background:var(--surface-soft)}.wb-table td.clip{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:0}.table-freeze-card{padding:0;overflow:hidden}.table-freeze{display:flex;flex-direction:column;max-height:calc(100dvh - 170px - var(--sa-top, 0px) - var(--sa-bottom, 0px));min-height:0}.table-freeze-head-wrap{flex:0 0 auto;overflow:hidden;scrollbar-gutter:stable;background:var(--surface-soft)}.table-freeze-body{flex:1 1 auto;min-height:0;overflow:auto;overflow-anchor:none;scrollbar-gutter:stable}.table-freeze-head,.table-freeze-body-table{table-layout:fixed;width:100%}.table-freeze-head,.table-freeze-head thead,.table-freeze-head th{position:static;top:auto;z-index:var(--z-content);isolation:auto}.table-freeze-head,.table-freeze-head thead{background:var(--surface-soft)}.table-freeze-head th{position:static;background:var(--surface-soft);box-shadow:0 1px 0 var(--line)}.field-col-sort{width:56px}.field-col-name{width:18%}.field-col-control{width:96px}.field-col-opts{width:22%}.field-col-req{width:52px}.field-col-group{width:88px}.field-col-status{width:72px}.field-col-ops{width:152px}.field-ops{white-space:nowrap}.field-admin-mobile{display:none}.roster-col-check{width:48px}.wb-table th.roster-check-cell,.wb-table td.roster-check-cell{padding:0;width:48px}.roster-check-hit{display:flex;align-items:center;justify-content:center;width:48px;min-height:44px;margin:0;cursor:pointer}.roster-sep{border-right:0}.wb-table .roster-th,.wb-table th.col-resizable{position:relative}.roster-th-txt,.col-head-txt{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:4px}.roster-resizer,.col-resizer{position:absolute;top:0;bottom:0;right:0;width:12px;cursor:col-resize;z-index:var(--z-handle);touch-action:none;user-select:none}.roster-resizer:after,.col-resizer:after{content:"";position:absolute;inset:8px 0 8px auto;width:2px;background:var(--line-soft);transition:background-color .1s ease,top .1s ease,bottom .1s ease}.roster-resizer:hover:after,.roster-resizer.dragging:after,.col-resizer:hover:after,.col-resizer.dragging:after{top:0;bottom:0;background:var(--acc)}.wb-table th.col-sortable{cursor:pointer;user-select:none}.wb-table th.col-sortable:hover{background:var(--surface-soft)}.wb-table th.is-sorted .col-head-txt{color:var(--acc-strong)}.sort-mark{color:var(--acc);font-weight:var(--fw-semi);font-size:var(--fs-badge);font-family:var(--font-ui);background:var(--acc-weak);border-radius:999px;padding:0 6px}.table-freeze .wb-table .exam-col-seq,.table-freeze .wb-table .exam-col-name,.table-freeze .wb-table .exam-col-subject-rank,.table-freeze .wb-table .exam-col-total,.table-freeze .wb-table .exam-col-rank{width:auto}.exam-col-seq{width:56px}.exam-col-name{width:88px}.exam-col-subject-rank{width:76px}.exam-col-total{width:64px}.exam-col-rank{width:56px}.import-col-file{width:28%}.import-col-field{width:36%}.term-col-ops{width:248px}.photo-col-ops{width:220px}.leave-col-ops{width:140px}.wb-table .num{font-family:var(--font-num);font-variant-numeric:tabular-nums}.identifier-text{font-family:var(--font-num)!important;font-variant-numeric:tabular-nums;letter-spacing:.02em}.tabular-number{font-family:var(--font-num);font-variant-numeric:tabular-nums}.badge{display:inline-block;border-radius:6px;padding:1px 8px;font-size:var(--fs-badge);font-weight:var(--fw-medium);line-height:1.2}.toolbar-tag{display:inline-flex;align-items:center;justify-content:center;min-height:32px;padding:6px 14px;font-size:var(--fs-badge);font-weight:var(--fw-medium);line-height:1.3;border-radius:var(--radius-sm);box-sizing:border-box}.badge.red{background:var(--rose-weak);color:var(--rose)}.badge.blue{background:var(--sky-weak);color:var(--sky)}.badge.green{background:var(--sage-weak);color:var(--sage)}.badge.orange{background:var(--honey-weak);color:var(--honey)}.badge.gray{background:var(--bg);color:var(--sub)}.badge.late{background:var(--att-late-weak);color:var(--att-late)}.badge.leave{background:var(--att-leave-weak);color:var(--att-leave)}.badge.leave-soft{background:var(--surface-soft);color:var(--sub);font-weight:var(--fw-regular)}.badge.ok{background:var(--att-ok-weak);color:var(--att-ok)}.modal-mask{position:fixed;inset:0;background:#22211c8c;backdrop-filter:blur(2px);display:flex;z-index:var(--z-modal);padding:var(--sa-top, env(safe-area-inset-top, 0px)) var(--sa-right, env(safe-area-inset-right, 0px)) var(--sa-bottom, env(safe-area-inset-bottom, 0px)) var(--sa-left, env(safe-area-inset-left, 0px))}.modal-mask{align-items:center;justify-content:center}.modal-box{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);max-height:100%;display:flex;flex-direction:column;box-shadow:0 2px 6px #22211c0f,0 18px 48px #22211c24;overflow:hidden}.modal-box-sm{width:min(420px,94vw);min-width:min(320px,94vw);max-width:min(420px,94vw)}.modal-box-md{width:min(520px,94vw);min-width:min(360px,94vw);max-width:min(520px,94vw)}.modal-box-lg{width:min(720px,94vw);min-width:min(360px,94vw);max-width:min(760px,94vw)}.modal-mask-no-close{cursor:default}.modal-x{margin-left:auto;flex:0 0 auto;min-width:32px;padding:4px 8px}.modal-head{padding:12px 18px;border-bottom:1px solid var(--line-soft);font-weight:var(--fw-card);font-family:var(--font-display);font-size:var(--fs-card);display:flex;align-items:center;gap:10px;background:#faf8f2}.modal-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-body{padding:var(--panel-pad);overflow:auto;flex:1 1 auto;min-height:0}.modal-foot{padding:12px 18px;border-top:1px solid var(--line-soft);display:flex;gap:8px;justify-content:flex-end;align-items:center;background:#faf8f2}.modal-foot .btn:disabled{opacity:.4}.modal-foot-fill{display:flex;gap:var(--sp-2);width:100%}.modal-foot-fill>.btn{flex:1 1 0}.modal-body .fr-label{font-size:var(--fs-body);font-weight:var(--fw-semi);color:var(--sub);letter-spacing:.01em}.modal-body .fr{gap:6px}.modal-body .statusbar{line-height:1.55}.modal-body>.table-freeze,.modal-body .table-freeze{max-height:60dvh}.modal-mask-page{background:var(--bg);align-items:stretch;justify-content:stretch;backdrop-filter:none}.modal-box-page{width:100%;min-width:0;max-width:none;height:100%;max-height:none;border-radius:0;border:0;box-shadow:none}.modal-box-page .modal-head{display:flex;align-items:center;gap:10px;padding:10px 12px}.modal-box-page .modal-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-box-page .modal-back{flex:0 0 auto}.modal-box-page .modal-body{flex:1 1 auto;min-height:0;padding:12px}.modal-box-page .modal-foot{flex:0 0 auto}.form-help{border:1px solid var(--line-soft);border-radius:var(--radius-sm);background:var(--surface-soft);padding:0;margin-top:4px}.form-help>summary{cursor:pointer;list-style:none;padding:10px 12px;font-size:var(--fs-body);font-weight:var(--fw-semi);color:var(--sub);display:flex;align-items:center;gap:6px}.form-help>summary::-webkit-details-marker{display:none}.form-help>summary:before{content:"▸";color:var(--acc);transition:transform .14s ease}.form-help[open]>summary:before{transform:rotate(90deg)}.form-help>.form-help-body{padding:0 12px 12px;font-size:var(--fs-th);line-height:1.65;color:var(--sub)}.form-help>.form-help-body b{color:var(--txt)}.dyn-group{margin-bottom:18px}.dyn-group-title{margin:0 0 8px;font-size:var(--fs-body);color:var(--sub);border-bottom:1px dashed var(--line);padding-bottom:4px}.dyn-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:var(--sp-3) var(--sp-4)}.fr{display:flex;flex-direction:column;gap:4px}.fr.wide{grid-column:1 / -1}.fr-label{font-size:var(--fs-body);font-weight:var(--fw-semi);color:var(--sub)}.fr-label .req{color:var(--danger);margin-left:2px}.fr-err{color:var(--danger);font-size:var(--fs-hint)}.fr-addr{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,140px),1fr));gap:6px}.fr-addr .addr-detail{grid-column:1 / -1}.stepper{display:flex;gap:6px;margin-bottom:16px}.step{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:20px;background:var(--bg);color:var(--sub);font-size:var(--fs-body)}.step .step-no{width:20px;height:20px;border-radius:50%;background:var(--line);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-hint);font-family:var(--font-num)}.step.active{background:var(--acc-weak);color:var(--acc-strong);font-weight:var(--fw-semi)}.step.active .step-no{background:var(--acc)}.step.done .step-no{background:var(--ok)}.seg-tabs{display:flex;flex-wrap:wrap;gap:var(--sp-1);align-items:center;min-width:0}.seg-tab{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;min-height:32px;padding:6px 14px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--txt);font-family:inherit;font-size:var(--fs-body);font-weight:var(--fw-medium);cursor:pointer;transition:background-color var(--t-fast) ease,color var(--t-fast) ease,border-color var(--t-fast) ease}.seg-tab:hover{border-color:var(--acc);color:var(--acc-strong)}.seg-tab.active{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:var(--fw-semi)}.filter-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}.filter-row{display:flex;gap:6px;align-items:center}.filter-row .wb-select,.filter-row .wb-input{width:auto;min-width:140px}.toast-wrap{position:fixed;top:calc(14px + var(--sa-top, 0px));left:50%;transform:translate(-50%);z-index:var(--z-toast);display:flex;flex-direction:column;gap:8px}.toast-item{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--acc);border-radius:var(--radius-sm);padding:8px 14px;box-shadow:var(--shadow);max-width:520px}.toast-item.error{border-left-color:var(--danger);color:var(--danger)}.toast-item.ok{border-left-color:var(--ok)}.stat-cards{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px;align-items:stretch}.stat-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:var(--panel-pad);box-shadow:var(--shadow);flex:0 1 auto;width:max-content;min-width:150px;max-width:100%;display:flex;flex-direction:column;gap:var(--sp-2);overflow:hidden}.fluid-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:16px;margin-bottom:16px}.stat-card .v{font-size:var(--fs-num-xl);font-weight:var(--fw-bold);font-family:var(--font-num);font-variant-numeric:tabular-nums;line-height:1.05;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-card .l{color:var(--sub);font-size:var(--fs-hint)}.stat-card-row{display:flex;flex-wrap:wrap;gap:var(--sp-3);align-items:stretch}.icon-badge{width:var(--stat-icon);height:var(--stat-icon);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--txt)}.icon-badge svg{width:20px;height:20px;display:block}.icon-badge.peach{background:var(--peach-weak);color:var(--peach)}.icon-badge.sage{background:var(--sage-weak);color:var(--sage)}.icon-badge.sky{background:var(--sky-weak);color:var(--sky)}.icon-badge.honey{background:var(--honey-weak);color:var(--honey)}.icon-badge.rose{background:var(--rose-weak);color:var(--rose)}.icon-badge.sm{width:24px;height:24px}.icon-badge.sm svg{width:14px;height:14px}.field-icon-label{display:inline-flex;align-items:center;gap:6px}.dashboard-panel{position:relative;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:var(--panel-pad);overflow:hidden}.panel-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.panel-head h2{margin:0;font-size:var(--fs-card);font-weight:var(--fw-card)}.empty{text-align:center;color:var(--sub);padding:48px 0}.page-title{margin:0 0 var(--sp-2);font-size:var(--fs-title);font-weight:var(--fw-card);line-height:1.3}.page-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-4);min-width:0}.page-head-main{min-width:0;flex:1 1 12rem}.page-head-title{margin:0;font-size:var(--fs-title);font-weight:var(--fw-card);line-height:1.3;color:var(--txt)}.page-head-hint{margin:var(--sp-1) 0 0;color:var(--sub);font-size:var(--fs-hint);line-height:1.4;overflow-wrap:anywhere}.page-head-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);flex-shrink:0}.page-head-below{flex:1 1 100%;min-width:0}.stat-card .num-xl,.summary-value.num-xl{font-family:var(--font-num);font-size:var(--fs-num-xl);font-weight:var(--fw-bold);line-height:1.05;font-variant-numeric:tabular-nums;color:var(--txt)}.toolbar{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap;margin-bottom:var(--sp-4)}.statusbar{color:var(--sub);font-size:var(--fs-hint);margin-top:8px}.warn-strip{background:var(--warn-weak);color:var(--warn);border:1px solid #e6d7b3;border-radius:var(--radius-sm);padding:8px 12px;margin-bottom:12px;font-size:var(--fs-body)}.mono{font-family:var(--font-mono);font-size:var(--fs-hint)}.kv-list dd.mono{font-size:var(--fs-body)}.trend-line{stroke:var(--sage)}.trend-dot{fill:var(--sage)}.trend-axis{display:flex;justify-content:space-between;font-size:var(--fs-hint);color:var(--sub)}a{color:var(--acc)}@keyframes page-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes modal-in{0%{opacity:0;transform:translateY(6px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}@keyframes menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes toast-in{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.btn{transition:background-color var(--t-fast) ease,border-color var(--t-fast) ease,color var(--t-fast) ease,transform var(--t-fast) ease,box-shadow var(--t-fast) ease}.btn:hover:not(:disabled){transform:translateY(-1px)}.btn:active:not(:disabled){transform:scale(.98);transition-duration:80ms}.btn-primary:hover:not(:disabled){background:var(--acc-strong);border-color:var(--acc-strong)}.card{transition:box-shadow .16s ease,border-color .16s ease}.card:hover{box-shadow:0 2px 4px #22211c0f,0 12px 32px #22211c14;border-color:#d0ccbf}.modal-mask{animation:overlay-in var(--t) ease}.modal-box{animation:modal-in var(--t-slow) var(--ease-out)}.overflow-panel{animation:menu-in var(--t-fast) var(--ease-out)}.toast-item{animation:toast-in var(--t) var(--ease-out)}.main>*,.matrix-page,.board-shell,.admin-list-card,.login-wrap{animation:page-in var(--t) var(--ease-out)}.sort-mark{animation:overlay-in .12s ease}.badge.orange{animation:overlay-in var(--t-fast) ease}.chip{display:inline-flex;align-items:center;gap:4px;min-height:32px;padding:3px 10px;border:1px solid transparent;border-radius:999px;background:var(--surface-soft);color:var(--txt);font-family:inherit;font-size:var(--fs-badge);font-weight:var(--fw-medium);line-height:1.3;cursor:pointer;transition:background-color var(--t-fast) ease,color var(--t-fast) ease,transform var(--t-fast) ease,border-color var(--t-fast) ease}.chip:hover{transform:translateY(-1px)}.chip.chipActive,.chip.on,.chip.is-on{background:var(--acc);border-color:var(--acc);color:#fff;transform:translateY(-1px)}.chip.chipSub{background:var(--bg);border-color:var(--line);color:var(--sub)}.chip.chipEdit{padding-right:6px;background:var(--surface-soft);border-color:var(--line)}.chip.chipEdit:hover{border-color:var(--acc)}input[type=checkbox],input[type=radio]{accent-color:var(--acc);width:16px;height:16px}.roster-card{transition:transform var(--t-fast) ease,box-shadow var(--t-fast) ease,border-color var(--t-fast) ease}.roster-card:hover{transform:translateY(-1px);box-shadow:var(--shadow)}.roster-index-bubble{animation:modal-in .12s var(--ease-out)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media(max-width:900px){.field-admin-desktop{display:none}.field-admin-mobile{display:block}}@media(max-width:48rem){.app-shell{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr)}.topbar{grid-column:1;gap:.5rem;padding:.5rem 3vw}.btn.nav-toggle{display:inline-flex}.topbar .brand{flex:1;min-width:0;font-size:var(--fs-card)}.topbar .ctx{flex-basis:100%;display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:.5rem;margin:0}.ctx-field{gap:.25rem}.ctx-field .lbl{flex-shrink:0}.topbar .ctx .wb-select{width:100%;min-width:0}.nav{display:none;grid-column:1;grid-row:2;max-height:35dvh;border-right:0;border-bottom:1px solid var(--line);padding:.5rem 3vw}.nav.nav-open{display:grid;grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));gap:.25rem}.nav a{margin:0}.main{grid-column:1;grid-row:3;padding:3vw}}@media(pointer:coarse){.btn,.btn-sm,.wb-input,.wb-select,.wb-textarea,.nav a,.overflow-trigger,.overflow-item,.toolbar-tag,.chip,.chipEdit,.chip.on,.name-card,.att-state-btn,.att-period-chip,.att-name,.roster-index-key,.roster-card,.step,.fold-card-head{min-height:2.75rem}.roster-index{min-width:28px;padding-right:4px;padding-left:4px}.roster-index-key{min-width:24px;min-height:2.75rem}.btn-sm{padding-top:8px;padding-bottom:8px}.overflow-trigger{min-width:2.75rem}.toolbar-tag{padding-top:8px;padding-bottom:8px}.quick-actions a,.panel-link,.class-link{display:inline-flex;align-items:center;min-height:2.75rem}}.app-shell.standalone-shell{display:flex;flex-direction:column}.standalone-shell>.main{flex:1;display:flex;flex-direction:column;padding:0;overflow:hidden}.detail-page{flex:1;min-height:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto}.detail-head,.detail-foot{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-3);padding:var(--sp-3) clamp(18px,3vw,32px);background:var(--card)}.detail-head{border-bottom:1px solid var(--line)}.detail-head h1{margin:0;font-size:var(--fs-title);font-weight:var(--fw-card);line-height:1.3}.detail-body{overflow:auto;min-height:0;padding:clamp(12px,2.5vmin,32px) clamp(18px,3vw,32px)}.detail-body .dyn-group{border:1px solid var(--line);border-radius:var(--radius);background:var(--card);padding:clamp(12px,2vmin,24px)}.detail-body .dyn-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-4) var(--sp-5)}.detail-body .dyn-group-title{margin-bottom:var(--sp-3);font-weight:var(--fw-semi);color:var(--txt);font-size:var(--fs-card)}.detail-foot{border-top:1px solid var(--line)}@media(max-width:64rem){.detail-body .dyn-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:40rem){.detail-body .dyn-grid{grid-template-columns:minmax(0,1fr)}.detail-foot{gap:var(--sp-2)}.detail-foot>span:empty{display:none}.detail-foot .btn{flex:1 1 40%}}.column-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));gap:.75rem}.column-option{display:flex;align-items:center;gap:.75rem;margin:0}.field-scope-select{min-height:var(--ctrl-h);border:1px solid var(--line);border-radius:var(--radius-sm);padding:4px 8px;font-size:var(--fs-body);font-family:inherit;background:var(--card);color:var(--txt)}.avatar-circle{position:relative;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;overflow:hidden;background:var(--acc-weak, #e8e4dc);color:var(--sub);font-weight:var(--fw-semi, 600);flex-shrink:0;vertical-align:middle;line-height:1;user-select:none;box-shadow:0 0 0 2px var(--card)}.avatar-circle img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.avatar-ph{pointer-events:none}.avatar-28{width:28px;height:28px;font-size:12px}.avatar-30{width:30px;height:30px;font-size:13px}.avatar-96{width:96px;height:96px;font-size:2rem}.name-with-avatar{display:inline-flex;align-items:center;gap:8px;min-width:0;max-width:100%}.name-with-avatar .name-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.roster-card-name-row{display:inline-flex;align-items:center;gap:8px;min-width:0}.student-edit-layout{display:grid;grid-template-columns:140px minmax(0,1fr);gap:var(--sp-5);align-items:start}.student-edit-side{display:flex;flex-direction:column;align-items:center;gap:var(--sp-3);padding:var(--sp-4) var(--sp-2);border:1px solid var(--line);border-radius:var(--radius);background:var(--card)}.student-edit-name{font-weight:var(--fw-semi, 600);font-size:var(--fs-body);text-align:center;word-break:break-all}.student-edit-main{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0}.student-edit-main .dyn-group{border:1px solid var(--line);border-radius:var(--radius);background:var(--card);padding:clamp(12px,2vmin,24px)}.student-edit-main .dyn-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-4) var(--sp-5)}.student-edit-main .dyn-group-title{margin-bottom:var(--sp-3);font-weight:var(--fw-card);color:var(--txt);font-size:var(--fs-card)}@media(max-width:64rem){.student-edit-main .dyn-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:48rem){.student-edit-layout{grid-template-columns:minmax(0,1fr)}.student-edit-side{flex-direction:row;justify-content:flex-start}}@media(max-width:40rem){.student-edit-main .dyn-grid{grid-template-columns:minmax(0,1fr)}}.pairing-orphan-row{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line-soft)}.pairing-orphan-row:last-child{border-bottom:0}.pairing-orphan-thumb{width:44px;height:44px;border-radius:var(--radius-sm);object-fit:cover;background:var(--bg);border:1px solid var(--line);display:block}.pairing-orphan-meta{min-width:0;font-size:var(--fs-hint);color:var(--sub)}.pairing-orphan-meta .mono{overflow-wrap:anywhere}.pairing-orphan-ops{display:inline-flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.photo-detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,24rem),1fr));gap:var(--sp-4)}@media(min-width:64rem){.photo-detail-grid{grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr)}}.photo-preview{display:flex;align-items:center;justify-content:center;padding:var(--panel-pad)}.photo-preview img{max-width:100%;max-height:65dvh;object-fit:contain;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-soft)}.photo-detail-grid .mono{overflow-wrap:anywhere}.photo-tags{margin:1rem 0;border:1px solid var(--line);border-radius:var(--radius-sm);display:flex;flex-wrap:wrap;gap:.75rem}.photo-tags label{display:inline-flex;align-items:center;gap:.5rem}.detail-body>.stat-cards .stat-card{flex:1 1 8rem;min-width:0}.backup-list{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}.backup-row{display:grid;grid-template-columns:minmax(0,1fr) 5.5rem 11rem auto;gap:10px;align-items:center;padding:8px var(--cell-pad-x);min-height:var(--row-h);border-bottom:1px solid var(--line-soft);font-size:var(--fs-body)}.backup-row:last-child{border-bottom:0}.backup-ops{display:inline-flex;gap:6px;justify-content:flex-end}.backup-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.backup-size,.backup-time{color:var(--sub)}@media(max-width:40rem){.backup-row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name ops" "size ops" "time ops";row-gap:1px;align-items:start}.backup-name{grid-area:name;white-space:normal;overflow-wrap:anywhere}.backup-size{grid-area:size}.backup-time{grid-area:time}.backup-row>.backup-ops{grid-area:ops;align-self:center}}.kv-list{margin:0 0 8px}.kv-list>div{display:grid;grid-template-columns:minmax(7rem,9rem) minmax(0,1fr);gap:4px 12px;padding:7px 0;border-bottom:1px solid var(--line-soft);align-items:baseline}.kv-list>div:last-child{border-bottom:0}.kv-list dt{color:var(--sub);font-size:var(--fs-body)}.kv-list dd{margin:0;min-width:0;overflow-wrap:anywhere;font-size:var(--fs-body)}.kv-list dd .wb-input,.kv-list dd input{max-width:420px}.wrap-anywhere{overflow-wrap:anywhere;word-break:break-word}.sync-ok{color:var(--ok)}.sync-bad{color:var(--danger)}.field-inline{margin-left:8px;width:min(220px,60vw)}.confirm-word{display:flex;flex-direction:column;gap:5px;margin-top:12px}.confirm-word .field-inline{margin-left:0;width:100%}@media(max-width:40rem){.kv-list>div{grid-template-columns:minmax(0,1fr);gap:2px}.kv-list dd .wb-input,.kv-list dd input{max-width:100%}.field-inline{margin-left:0;display:block;margin-top:4px;width:100%}}.roster-search{margin-bottom:0;max-width:320px}.roster-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-2)}.roster-card{display:flex;flex-direction:column;gap:4px;text-align:left;padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--card);color:var(--txt);font:inherit;cursor:pointer;box-shadow:var(--shadow)}.roster-card:hover{border-color:var(--acc)}.roster-card-top{display:flex;align-items:center;gap:8px}.roster-card-name-row{display:flex;align-items:center;gap:6px;min-width:0}.roster-card-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:var(--fw-card);font-size:var(--fs-card)}.roster-card-meta{color:var(--sub);font-size:var(--fs-hint);overflow-wrap:anywhere}.roster-cards.has-index{padding-right:22px}.roster-index{position:fixed;right:2px;top:50%;transform:translateY(-50%);z-index:var(--z-float);display:flex;flex-direction:column;gap:1px;max-height:70dvh;overflow-y:auto;padding:4px 3px;border:1px solid var(--line);border-radius:10px;background:var(--card);box-shadow:var(--shadow);touch-action:none;user-select:none}.roster-index.roster-index-desktop{position:static;transform:none;flex:0 0 auto;align-self:flex-start;max-height:calc(100dvh - 220px);overflow:auto;padding:4px 3px}.roster-index-key{min-width:24px;min-height:24px;padding:0 2px;border:0;background:none;color:var(--sub);font:inherit;font-size:var(--fs-badge);line-height:1.2;cursor:pointer}.roster-index-key.on{color:var(--acc);font-weight:var(--fw-bold);background:var(--acc-weak);border-radius:999px}.roster-index-bubble{position:fixed;right:36px;top:50%;transform:translateY(-50%);z-index:var(--z-float);width:72px;height:72px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--acc);color:#fff;font-size:var(--fs-num-xl);font-weight:var(--fw-bold);box-shadow:var(--shadow);pointer-events:none}.board-scroll-x{overflow-x:auto;overflow-y:hidden;max-width:100%}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.flex-wrap{display:flex;flex-wrap:wrap}.flex-1,.spacer{flex:1 1 auto;min-width:0}.items-center{display:flex;align-items:center}.items-baseline{display:flex;align-items:baseline}.gap-1{gap:var(--sp-1)}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.mt-0{margin-top:0}.mt-1{margin-top:var(--sp-1)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--sp-1)}.mb-2{margin-bottom:var(--sp-2)}.mb-3{margin-bottom:var(--sp-3)}.ml-1{margin-left:var(--sp-1)}.ml-2{margin-left:var(--sp-2)}.ml-3{margin-left:var(--sp-3)}.mr-1{margin-right:var(--sp-1)}.mr-2{margin-right:var(--sp-2)}.p-1{padding:var(--sp-1)}.p-2{padding:var(--sp-2)}.pt-2{padding-top:var(--sp-2)}.w-110{width:110px}.w-140{width:140px}.w-150{width:150px}.w-160{width:160px}.w-180{width:180px}.w-200{width:200px}.w-220{width:220px}.w-280{width:280px}.max-w-280{max-width:280px}.text-sub{color:var(--sub)}.text-ok{color:var(--ok)}.text-acc{color:var(--acc)}.cursor-p{cursor:pointer}.chip-row{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center}.row-check{display:flex;gap:var(--sp-2);align-items:center;padding:6px 0;min-height:32px}.row-label{display:flex;gap:var(--sp-1);align-items:center;color:var(--sub);font-size:var(--fs-body)}.scroll-box{overflow:auto;border:1px solid var(--line);border-radius:var(--radius-xs);padding:var(--sp-2)}.scroll-box-sm{max-height:200px}.scroll-box-md{max-height:260px}.scroll-box-lg{max-height:300px}.badge-pad{padding:var(--sp-1) 10px}.wrap-pre{white-space:pre-wrap}.ok-strip{background:var(--ok-weak);color:var(--ok);border:1px solid #c5ddd0;border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);font-size:var(--fs-body)}.danger-strip{background:var(--danger-weak);color:var(--danger);border:1px solid #e4c4c4;border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);margin-bottom:var(--sp-3);font-size:var(--fs-body);display:flex;gap:8px;align-items:flex-start}.danger-strip:before{content:"";flex:0 0 auto;width:18px;height:18px;margin-top:1px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 4 2.8 19.2A1.6 1.6 0 0 0 4.2 21.5h15.6a1.6 1.6 0 0 0 1.4-2.3z' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 10v4.5M12 17.6h.01' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 4 2.8 19.2A1.6 1.6 0 0 0 4.2 21.5h15.6a1.6 1.6 0 0 0 1.4-2.3z' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 10v4.5M12 17.6h.01' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat}.confirm-word-hint{margin:0;color:var(--sub);font-size:var(--fs-hint)}.leave-log-title{position:relative;margin:18px 0 10px;padding-left:10px;font-size:var(--fs-card);font-weight:var(--fw-card)}.leave-log-title:before{content:"";position:absolute;left:0;top:2px;bottom:2px;width:4px;border-radius:2px;background:var(--acc)}.modal-body .leave-form .dyn-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3) var(--sp-4)}.detail-body>.leave-form{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:var(--panel-pad)}@media(max-width:40rem){.modal-body .leave-form .dyn-grid{grid-template-columns:minmax(0,1fr)}}.missing-tbl .badge{border-radius:999px;border:1px solid var(--rose);padding:2px 10px}.soft-card{background:var(--surface-soft);border:1px solid var(--line-soft);border-radius:var(--radius-sm);padding:var(--sp-3);margin-top:var(--sp-3)}.step.is-clickable,.step.is-clickable:hover{cursor:pointer}.btn-danger-text{color:var(--danger)}.acc-link{color:var(--acc)}.fold-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);margin-bottom:var(--sp-2);overflow:hidden}.fold-card-head{width:100%;border:0;background:var(--card);color:var(--txt);padding:var(--sp-3);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);text-align:left;font:inherit;cursor:pointer}.fold-card-head:hover{background:var(--surface-soft)}.fold-card-title,.fold-card-state{display:inline-flex;align-items:center;gap:var(--sp-2);min-width:0}.fold-card-title b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fold-card-state{flex-shrink:0}.fold-card-chevron{color:var(--sub);font-size:var(--fs-hint)}.fold-card-body{border-top:1px solid var(--line);padding:var(--sp-3)}.fold-card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-2) var(--sp-3);margin:0}.fold-card-grid>div{min-width:0}.fold-card-grid dt{color:var(--sub);font-size:var(--fs-hint);margin-bottom:2px}.fold-card-grid dd{margin:0;overflow-wrap:anywhere}.fold-card-actions{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-3)}.period-slots{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-2)}.period-slot{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0;min-height:56px;padding:var(--sp-2) var(--sp-1);border:1px solid var(--line-soft);border-radius:var(--radius-xs);background:var(--card);color:var(--txt);font:inherit;cursor:pointer;transition:border-color var(--t-fast) ease,background-color var(--t-fast) ease}.period-slot:hover{border-color:var(--acc)}.period-slot-label{color:var(--sub);font-size:var(--fs-badge);line-height:1.2}.period-slot-state{font-size:var(--fs-body);font-weight:var(--fw-semi);line-height:1.3}.period-slot-note{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--sub);font-size:10px;line-height:1.2}.log-cards{display:flex;flex-direction:column;gap:var(--sp-2)}.log-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--card);padding:12px 14px}.log-card.is-editing{border-color:var(--acc);background:var(--acc-weak)}.log-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-2)}.log-card-head strong{font-size:var(--fs-card);font-weight:var(--fw-card)}.log-card-meta{color:var(--sub);font-size:var(--fs-hint);overflow-wrap:anywhere}.log-card-reason{font-size:var(--fs-body);overflow-wrap:anywhere}.log-card-ops{display:flex;gap:var(--sp-2);margin-top:var(--sp-1)}.seat-pool{min-height:120px;border-style:dashed}.seat-cell.is-over,.seat-pool.is-over{border-color:var(--sage);background:var(--sage-weak);border-style:dashed}.term-page{min-width:0}.term-stack{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-4);margin-bottom:var(--sp-4);align-items:start}.term-ops{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.class-link{color:var(--txt);text-decoration:none;cursor:pointer}.class-link:hover{color:var(--acc)}.term-tbl .num{text-align:right}.section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);margin-bottom:14px}.section-head h3{margin:0 0 2px}@media(max-width:960px){.term-stack{grid-template-columns:minmax(0,1fr)}}@media(max-width:900px){.fold-card-grid{grid-template-columns:minmax(0,1fr)}.fold-card-actions .btn{flex:1 1 auto}}@media(pointer:coarse){.roster-index-key,.name-card{min-height:44px}.roster-index-key{min-width:24px;min-height:2.75rem}.att-state-btn,.att-period-chip{min-height:44px}.name-card{min-height:2.75rem}}
