:root{--color-primary: #1d4ed8;--color-primary-strong: #1e3a8a;--color-primary-soft: #dbe7ff;--color-accent: #f59e0b;--color-success: #15803d;--color-success-soft: #dcfce7;--color-warning: #b45309;--color-warning-soft: #fef3c7;--color-danger: #b91c1c;--color-danger-soft: #fee2e2;--color-info-soft: #e0f2fe;--color-bg: #f5f7fb;--color-surface: #ffffff;--color-surface-2: #eef2f9;--color-text: #0f172a;--color-muted: #5b6b82;--color-border: #dbe2ee;--color-sidebar-bg: #0f1f46;--color-sidebar-text: #c9d6f2;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 18px;--shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);--shadow-md: 0 6px 20px rgba(15, 23, 42, .1);--font-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}:root[data-theme=dark]{--color-primary: #6b95ff;--color-primary-strong: #9db8ff;--color-primary-soft: #1c2c55;--color-success: #4ade80;--color-success-soft: #12301e;--color-warning: #fbbf24;--color-warning-soft: #3a2a0a;--color-danger: #f87171;--color-danger-soft: #3b1414;--color-info-soft: #0f2a3a;--color-bg: #0b1222;--color-surface: #121b30;--color-surface-2: #1a2540;--color-text: #e8eefc;--color-muted: #93a4c3;--color-border: #263353;--color-sidebar-bg: #070d1c}:root{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased}:root{--on-primary: var(--color-bg);--overlay: color-mix(in srgb, var(--color-text) 50%, transparent);--hover: color-mix(in srgb, var(--color-text) 5%, transparent);--focus-ring: 0 0 0 3px color-mix(in srgb, var(--color-primary) 35%, transparent);--sidebar-w: 248px}html{font-size:15px}body{line-height:1.45}h1,h2,h3,h4{margin:0;line-height:1.2}p{margin:0}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.muted{color:var(--color-muted)}.small{font-size:.86rem}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.nowrap{white-space:nowrap}.right{text-align:right}.grow{flex:1 1 auto;min-width:0}.app{display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr);min-height:100%}.sidebar{background:var(--color-sidebar-bg);color:var(--color-sidebar-text);position:sticky;top:0;height:100vh;overflow-y:auto;display:flex;flex-direction:column;padding:18px 12px}.brand{display:flex;align-items:center;gap:10px;padding:4px 10px 18px;font-weight:700;font-size:1.15rem;color:var(--color-sidebar-text)}.brand img{width:32px;height:32px;border-radius:9px}.nav{display:flex;flex-direction:column;gap:2px}.nav a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--radius-sm);color:var(--color-sidebar-text);text-decoration:none;font-weight:500;position:relative}.nav a:hover{background:color-mix(in srgb,var(--color-sidebar-text) 10%,transparent);text-decoration:none}.nav a.active{background:color-mix(in srgb,var(--color-sidebar-text) 16%,transparent);font-weight:700}.nav a.active:before{content:"";position:absolute;left:-12px;top:8px;bottom:8px;width:4px;border-radius:0 4px 4px 0;background:var(--color-accent)}.nav a:focus-visible{outline-color:var(--color-sidebar-text)}.nav .ico{width:20px;height:20px;flex:none}.sidebar-foot{margin-top:auto;padding:14px 10px 0;font-size:.8rem;opacity:.75}.main{min-width:0;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:12px;padding:12px 28px;background:var(--color-surface);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:20;min-height:62px}.topbar .school{font-weight:700}.topbar .who{display:flex;flex-direction:column;align-items:flex-end;line-height:1.2}.topbar .who small{color:var(--color-muted)}.icon-btn.menu-btn{display:none}.content{padding:24px 28px 48px;width:100%;max-width:1360px;margin:0 auto}.scrim{display:none}@media (max-width: 900px){.app{grid-template-columns:minmax(0,1fr)}.sidebar{position:fixed;left:0;top:0;bottom:0;width:min(290px,86vw);z-index:60;transform:translate(-102%);transition:transform .2s ease;box-shadow:var(--shadow-md)}.sidebar.open{transform:none}.scrim.open{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);z-index:50}.icon-btn.menu-btn{display:inline-flex}.topbar{padding:10px 16px}.content{padding:18px 16px 40px}.topbar .who{display:none}}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}.page-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:20px}.page-head h1{font-size:1.55rem}.page-head .sub{color:var(--color-muted);margin-top:4px}.page-head .actions{margin-left:auto;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.breadcrumb{font-size:.86rem;color:var(--color-muted);margin-bottom:6px}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.card-pad{padding:18px 20px}.card-head{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid var(--color-border);flex-wrap:wrap}.card-head h2{font-size:1.05rem}.card-head .actions{margin-left:auto;display:flex;gap:8px;align-items:center}.card-body{padding:18px 20px}.stack{display:flex;flex-direction:column;gap:16px}.grid{display:grid;gap:16px}.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.split{grid-template-columns:minmax(0,3fr) minmax(0,2fr);align-items:start}.grid.split-even{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start}@media (max-width: 1100px){.grid.split,.grid.split-even,.grid.cols-3{grid-template-columns:minmax(0,1fr)}}@media (max-width: 700px){.grid.cols-2{grid-template-columns:minmax(0,1fr)}}.stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px;margin-bottom:20px}@media (max-width: 1100px){.stats{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 600px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}}.stat{padding:16px 18px}.stat .label{color:var(--color-muted);font-size:.85rem;font-weight:600}.stat .value{font-size:2rem;font-weight:800;line-height:1.1;margin-top:6px}.stat.tone-success .value{color:var(--color-success)}.stat.tone-warning .value{color:var(--color-warning)}.stat.tone-danger .value{color:var(--color-danger)}.stat.tone-primary .value{color:var(--color-primary)}.alerts{display:flex;flex-direction:column;gap:10px;margin-bottom:20px}.alert{display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-surface);text-decoration:none;color:inherit}a.alert:hover{text-decoration:none;box-shadow:var(--shadow-md)}.alert.warning{background:var(--color-warning-soft);border-color:var(--color-warning)}.alert.danger{background:var(--color-danger-soft);border-color:var(--color-danger)}.alert.info{background:var(--color-info-soft);border-color:var(--color-primary)}.alert.success{background:var(--color-success-soft);border-color:var(--color-success)}.alert .alert-title{font-weight:700}.alert .go{margin-left:auto;font-weight:600;white-space:nowrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);padding:9px 16px;font-weight:600;cursor:pointer;text-decoration:none;line-height:1.2;min-height:40px}.btn:hover:not(:disabled){background:var(--color-surface-2);text-decoration:none}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:var(--color-primary);border-color:var(--color-primary);color:var(--on-primary)}.btn.primary:hover:not(:disabled){background:var(--color-primary-strong);border-color:var(--color-primary-strong)}.btn.danger{background:var(--color-danger);border-color:var(--color-danger);color:var(--on-primary)}.btn.danger:hover:not(:disabled){background:color-mix(in srgb,var(--color-danger) 85%,var(--color-text))}.btn.success{background:var(--color-success);border-color:var(--color-success);color:var(--on-primary)}.btn.success:hover:not(:disabled){background:color-mix(in srgb,var(--color-success) 85%,var(--color-text))}.btn.outline-danger{color:var(--color-danger);border-color:var(--color-danger);background:transparent}.btn.outline-danger:hover:not(:disabled){background:var(--color-danger-soft)}.btn.ghost{background:transparent;border-color:transparent}.btn.ghost:hover:not(:disabled){background:var(--hover)}.btn.sm{padding:5px 11px;min-height:32px;font-size:.88rem}.btn-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.spinner{width:16px;height:16px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .7s linear infinite;display:inline-block}.spinner.lg{width:32px;height:32px;border-width:3px;color:var(--color-primary)}@keyframes spin{to{transform:rotate(360deg)}}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface);cursor:pointer}.icon-btn:hover{background:var(--color-surface-2)}.icon-btn svg{width:20px;height:20px}.form{display:block}.field,.form-row,.form-note,.field-group{margin-top:16px}.form>:first-child,.form-row>.field,.form-row>.field-group,.card-body>.form>:first-child{margin-top:0}.field,.field-group{display:block;border:0;padding:0;min-width:0}.field-label{display:block;font-weight:600;font-size:.9rem;margin-bottom:6px}.field-label .req{color:var(--color-danger);margin-left:2px}.field-hint{display:block;color:var(--color-muted);font-size:.82rem;margin-top:6px}.field-error{display:block;color:var(--color-danger);font-size:.85rem;margin-top:6px;font-weight:600}.form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.form-row.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}@media (max-width: 640px){.form-row,.form-row.cols-3{grid-template-columns:minmax(0,1fr)}.form-row>.field+.field{margin-top:16px}}.input,select.input,textarea.input{width:100%;padding:9px 12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);min-height:40px}textarea.input{resize:vertical;min-height:88px}.input:focus{outline:none;border-color:var(--color-primary);box-shadow:var(--focus-ring)}.input:disabled{background:var(--color-surface-2);color:var(--color-muted)}.input.invalid{border-color:var(--color-danger)}.check{display:flex;gap:10px;align-items:flex-start;cursor:pointer}.check input{width:18px;height:18px;margin:2px 0 0;flex:none;accent-color:var(--color-primary)}.check .check-text{font-weight:600}.check .field-hint{margin-top:2px;font-weight:400}.radio-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.radio-card{display:flex;gap:10px;border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:10px 12px;cursor:pointer;background:var(--color-surface)}.radio-card:has(input:checked){border-color:var(--color-primary);background:var(--color-primary-soft)}.radio-card input{margin-top:3px;accent-color:var(--color-primary)}.radio-card strong{display:block}.radio-card.disabled{opacity:.55;cursor:not-allowed}@media (max-width: 640px){.radio-cards{grid-template-columns:minmax(0,1fr)}}.checklist{border:1px solid var(--color-border);border-radius:var(--radius-sm);max-height:200px;overflow:auto;padding:6px 12px;background:var(--color-surface)}.checklist .check{padding:6px 0}.form-error{margin-top:16px}.filters{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-bottom:16px}.filters .field{margin-top:0;min-width:150px}.filters .field.search{flex:1 1 240px}.banner{padding:12px 14px;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface-2)}.banner.info{background:var(--color-info-soft);border-color:var(--color-primary)}.banner.warning{background:var(--color-warning-soft);border-color:var(--color-warning)}.banner.danger{background:var(--color-danger-soft);border-color:var(--color-danger)}.banner.success{background:var(--color-success-soft);border-color:var(--color-success)}.banner strong{display:block;margin-bottom:2px}.chip{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:999px;font-size:.78rem;font-weight:700;line-height:1.5;white-space:nowrap;background:var(--color-surface-2);color:var(--color-muted);border:1px solid transparent}.chip.success{background:var(--color-success-soft);color:var(--color-success)}.chip.warning{background:var(--color-warning-soft);color:var(--color-warning)}.chip.danger{background:var(--color-danger-soft);color:var(--color-danger)}.chip.info{background:var(--color-info-soft);color:var(--color-primary)}.chip.primary{background:var(--color-primary-soft);color:var(--color-primary-strong)}.chip.outline{background:transparent;border-color:var(--color-border)}.chip .dot{width:7px;height:7px;border-radius:50%;background:currentColor}.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;overflow:hidden;flex:none;background:var(--color-primary-soft);color:var(--color-primary-strong);font-weight:700;width:36px;height:36px;font-size:.8rem;border:1px solid var(--color-border)}.avatar img{width:100%;height:100%;object-fit:cover;display:block}.avatar.sm{width:28px;height:28px;font-size:.7rem}.avatar.lg{width:64px;height:64px;font-size:1.3rem}.avatar.xl{width:96px;height:96px;font-size:1.8rem}.person{display:flex;align-items:center;gap:10px;min-width:0}.person .name{font-weight:600}.person .sub{color:var(--color-muted);font-size:.82rem}.table-wrap{overflow-x:auto}table.table{width:100%;border-collapse:collapse}.table th{text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.04em;color:var(--color-muted);font-weight:700;padding:10px 12px;border-bottom:1px solid var(--color-border);white-space:nowrap;background:var(--color-surface)}.table td{padding:11px 12px;border-bottom:1px solid var(--color-border);vertical-align:middle}.table tbody tr:last-child td{border-bottom:0}.table tbody tr.clickable{cursor:pointer}.table tbody tr.clickable:hover{background:var(--hover)}.table tbody tr.highlight{background:var(--color-warning-soft)}.table td.num,.table th.num{text-align:right;font-variant-numeric:tabular-nums}.table-foot{padding:10px 14px;color:var(--color-muted);font-size:.85rem;border-top:1px solid var(--color-border)}.progress{height:8px;border-radius:99px;background:var(--color-surface-2);overflow:hidden;min-width:90px}.progress>span{display:block;height:100%;background:var(--color-success);border-radius:99px}.progress.late>span{background:var(--color-warning)}.state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px;gap:10px;color:var(--color-muted)}.state h3{color:var(--color-text);font-size:1.05rem}.state .state-ico{width:44px;height:44px;color:var(--color-muted);opacity:.8}.state.error .state-ico{color:var(--color-danger)}.modal-scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px 16px;overflow-y:auto}.modal{background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);width:100%;max-width:560px;border:1px solid var(--color-border);display:flex;flex-direction:column;max-height:88vh}.modal.wide{max-width:820px}.modal.narrow{max-width:440px}.modal-head{display:flex;align-items:center;gap:12px;padding:16px 20px;border-bottom:1px solid var(--color-border)}.modal-head h2{font-size:1.15rem;flex:1}.modal-body{padding:20px;overflow-y:auto}.modal-foot{padding:14px 20px;border-top:1px solid var(--color-border);display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}.toasts{position:fixed;right:16px;bottom:16px;z-index:200;display:flex;flex-direction:column;gap:10px;max-width:min(380px,calc(100vw - 32px))}.toast{background:var(--color-surface);border:1px solid var(--color-border);border-left:5px solid var(--color-primary);border-radius:var(--radius-sm);box-shadow:var(--shadow-md);padding:12px 14px;display:flex;gap:10px;align-items:flex-start}.toast.success{border-left-color:var(--color-success)}.toast.error{border-left-color:var(--color-danger)}.toast button{margin-left:auto;background:none;border:0;cursor:pointer;color:var(--color-muted);font-size:1.1rem;line-height:1}.login-wrap{min-height:100%;display:grid;place-items:center;padding:24px 16px;background:var(--color-bg)}.login-card{width:100%;max-width:400px;padding:32px 28px}.login-card .brand{color:var(--color-text);padding:0 0 6px;font-size:1.4rem}.login-card h1{font-size:1.2rem;margin:18px 0 4px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--color-border);margin-bottom:18px;overflow-x:auto}.tab{padding:10px 16px;border:0;background:none;font-weight:600;color:var(--color-muted);cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-1px;white-space:nowrap}.tab:hover{color:var(--color-text)}.tab[aria-selected=true]{color:var(--color-primary);border-bottom-color:var(--color-primary)}.tab .count{margin-left:6px}.feed{list-style:none;margin:0;padding:0}.feed li{display:flex;gap:12px;align-items:flex-start;padding:11px 20px;border-bottom:1px solid var(--color-border)}.feed li:last-child{border-bottom:0}.feed .time{font-variant-numeric:tabular-nums;color:var(--color-muted);font-size:.85rem;white-space:nowrap}.kv{display:grid;grid-template-columns:150px minmax(0,1fr);gap:10px 14px;margin:0}.kv dt{color:var(--color-muted);font-weight:600;font-size:.88rem}.kv dd{margin:0}.live{display:inline-flex;align-items:center;gap:8px;color:var(--color-muted);font-size:.85rem}.live .pulse{width:8px;height:8px;border-radius:50%;background:var(--color-success)}.live.stale .pulse{background:var(--color-warning)}.auth-card{padding:16px 18px;display:flex;flex-direction:column;gap:12px}.auth-card .top{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.auth-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px}.auth-grid .lbl{color:var(--color-muted);font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.pairing{text-align:center;padding:16px;border-radius:var(--radius-md);background:var(--color-primary-soft);border:2px dashed var(--color-primary)}.pairing .code{font-size:2.3rem;font-weight:800;letter-spacing:.14em;color:var(--color-primary-strong);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.pairing .lbl{font-weight:700;color:var(--color-primary-strong);font-size:.85rem;text-transform:uppercase;letter-spacing:.06em}.device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px}@media (max-width: 420px){.device-grid{grid-template-columns:minmax(0,1fr)}}.temp-pass{font-size:1.6rem;font-weight:800;letter-spacing:.06em;text-align:center;padding:16px;border-radius:var(--radius-md);background:var(--color-surface-2);border:1px solid var(--color-border);word-break:break-all;-webkit-user-select:all;user-select:all}.snapshot{width:56px;height:56px;border-radius:var(--radius-sm);object-fit:cover;border:1px solid var(--color-border);cursor:zoom-in;display:block}.snapshot.big{width:100%;height:auto;max-height:340px;object-fit:contain;cursor:default;background:var(--color-surface-2)}.face-preview{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.face-preview img{width:144px;height:144px;border-radius:var(--radius-md);object-fit:cover;border:1px solid var(--color-border)}.video-box{position:relative;background:var(--color-surface-2);border-radius:var(--radius-md);overflow:hidden;aspect-ratio:4 / 3;border:1px solid var(--color-border)}.video-box video{width:100%;height:100%;object-fit:cover;display:block;transform:scaleX(-1)}.video-box .oval{position:absolute;top:10%;right:28%;bottom:10%;left:28%;border:3px dashed var(--color-accent);border-radius:50%;pointer-events:none}.pick-list{list-style:none;margin:6px 0 0;padding:4px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);max-height:240px;overflow:auto}.pick-list button{display:flex;width:100%;align-items:center;gap:10px;padding:7px 8px;border:0;background:none;text-align:left;cursor:pointer;border-radius:var(--radius-sm)}.pick-list button:hover,.pick-list button:focus-visible{background:var(--color-surface-2)}.picked{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--color-primary);border-radius:var(--radius-sm);background:var(--color-primary-soft)}.explain{border-left:4px solid var(--color-primary);background:var(--color-surface-2);padding:10px 14px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:.9rem}.link-btn{background:none;border:0;padding:0;color:var(--color-primary);cursor:pointer;font-weight:600}.link-btn:hover{text-decoration:underline}.ann-body{white-space:pre-wrap}.ann-card{padding:16px 20px;cursor:pointer}.ann-card:hover{box-shadow:var(--shadow-md)}.divider{height:1px;background:var(--color-border);margin:16px 0}.field-group>.field:first-child{margin-top:0}.btn svg.ico{width:18px;height:18px}.feed .grow{min-width:110px}.cap:first-letter{text-transform:uppercase}legend{padding:0}.table td.col-student,.table th.col-student{min-width:230px}.table td.col-actions{white-space:nowrap}.cap{display:inline-block}.topbar .btn{white-space:nowrap}.login-wrap{position:relative}.login-theme{position:absolute;top:16px;right:16px}.pick-list button.selected{background:var(--color-primary-soft);outline:2px solid var(--color-primary)}.pick-list button{flex-wrap:wrap}.modal:focus{outline:none}fieldset{margin-inline:0}.picked,.radio-card:has(input:checked){--color-muted: var(--color-primary-strong)}.wd{display:inline-block;padding:1px 8px;border-radius:999px;font-size:.74rem;font-weight:700;color:var(--color-muted);background:var(--color-surface-2);opacity:.7}.wd.on{color:var(--color-primary-strong);background:var(--color-primary-soft);opacity:1}.wd-btn{padding:6px 12px;border-radius:999px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);font-weight:600;cursor:pointer;min-height:34px}.wd-btn:hover{background:var(--color-surface-2)}.wd-btn.on{background:var(--color-primary);border-color:var(--color-primary);color:var(--on-primary)}.group-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-top:1px solid var(--color-border);border-left:1px solid var(--color-border)}.cal-head{padding:8px;font-size:.76rem;font-weight:700;text-transform:uppercase;color:var(--color-muted);text-align:center;border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border);background:var(--color-surface-2)}.cal-cell{min-height:104px;padding:4px;border-right:1px solid var(--color-border);border-bottom:1px solid var(--color-border);background:var(--color-surface);display:flex;flex-direction:column;gap:3px;min-width:0}.cal-cell.out{background:var(--color-bg)}.cal-cell.out .cal-day{opacity:.55}.cal-cell.today .cal-day{background:var(--color-primary);color:var(--on-primary);border-radius:999px}.cal-day{align-self:flex-start;font-size:.82rem;font-weight:700;min-width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;padding:0 6px;background:none;border:0;color:inherit;cursor:pointer}.cal-item{display:block;width:100%;text-align:left;border:0;border-left:3px solid currentColor;border-radius:4px;padding:1px 5px;font-size:.74rem;font-weight:600;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:var(--color-surface-2);color:var(--color-muted)}.cal-item.danger{background:var(--color-danger-soft);color:var(--color-danger)}.cal-item.warning{background:var(--color-warning-soft);color:var(--color-warning)}.cal-item.success{background:var(--color-success-soft);color:var(--color-success)}.cal-item.info{background:var(--color-info-soft);color:var(--color-primary)}.cal-item.primary{background:var(--color-primary-soft);color:var(--color-primary-strong)}.cal-more{font-size:.72rem;color:var(--color-muted);padding-left:4px}.legend{display:flex;flex-wrap:wrap;gap:8px}.sel-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 14px;background:var(--color-primary-soft);border:1px solid var(--color-primary);border-radius:var(--radius-sm);margin-bottom:12px;color:var(--color-primary-strong);font-weight:600}.table td.chk,.table th.chk{width:40px;padding-right:0}.table input[type=checkbox]{width:17px;height:17px;accent-color:var(--color-primary)}details.more{margin-top:16px;border:1px solid var(--color-border);border-radius:var(--radius-sm)}details.more>summary{cursor:pointer;padding:10px 14px;font-weight:600;list-style:none;display:flex;align-items:center;gap:8px}details.more>summary:before{content:"▸";display:inline-block;transition:transform .15s}details.more[open]>summary:before{transform:rotate(90deg)}details.more>.more-body{padding:0 14px 16px}.bulk-area{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem;min-height:160px;white-space:pre}.row-err td{background:var(--color-danger-soft)}.sched-box{padding:10px 14px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface-2)}@media (max-width: 700px){.cal-cell{min-height:70px}.cal-item{font-size:.68rem}}.field-group.boxed{border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:4px 14px 16px}.field-group.boxed>legend{padding:0 6px}.sched-box .chip{white-space:normal;line-height:1.3;padding:4px 10px;border-radius:12px;text-align:left}.plat-shell{min-height:100%;background:var(--color-bg)}.plat-top{gap:16px}.plat-brand{display:inline-flex;align-items:center;gap:10px;font-weight:800;color:var(--color-text);text-decoration:none;font-size:1.05rem}.plat-brand:hover{text-decoration:none}.plat-nav{display:flex;gap:4px}.plat-nav a{padding:8px 12px;border-radius:var(--radius-sm);color:var(--color-muted);font-weight:600;text-decoration:none}.plat-nav a:hover{background:var(--hover);text-decoration:none}.plat-nav a.active{color:var(--color-primary);background:var(--color-primary-soft)}@media (max-width: 900px){.plat-top{flex-wrap:wrap;padding:10px 16px}.plat-top .who{display:none}}.plat-url{word-break:break-all}
