.toaster{position:fixed;bottom:20px;right:20px;z-index:1000;display:flex;flex-direction:column;gap:10px;max-width:min(420px,calc(100vw - 40px))}.toast{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:8px;color:#fff;font-size:15px;line-height:1.35;box-shadow:0 6px 20px #00000040;animation:toast-in .12s ease-out}.toast--error{background:var(--error)}.toast--info{background:var(--cta-blue)}.toast__message{flex:1}.toast__close{flex:none;background:none;border:none;color:#fff;font-size:20px;line-height:1;cursor:pointer;padding:0 2px;opacity:.85}.toast__close:hover{opacity:1}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.cta{border:none;border-radius:var(--radius);color:var(--cta-text);font-size:14px;font-weight:600;padding:9px 16px;cursor:pointer;white-space:nowrap;transition:background .12s ease,box-shadow .12s ease}.cta:disabled{opacity:.55;cursor:not-allowed}.cta--loading{display:inline-flex;align-items:center;gap:7px}.cta__spinner{width:13px;height:13px;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;animation:cta-spin .6s linear infinite;flex:none}@keyframes cta-spin{to{transform:rotate(360deg)}}.cta--orange{background:var(--brand);color:#fff;box-shadow:0 1px 4px #f2651347}.cta--orange:hover:not(:disabled){background:var(--brand-hover)}.cta--blue{background:#fff;color:var(--text-primary);border:1.5px solid var(--border)}.cta--blue:hover:not(:disabled){background:var(--bg-muted)}.login{height:100%;min-height:100vh;display:flex;align-items:stretch;background:var(--bg-app)}.login__pane{flex:1;display:flex;align-items:center;justify-content:center;padding:48px}.login__card{width:360px;max-width:100%;display:flex;flex-direction:column}.login__brand{display:flex;align-items:center;gap:10px;margin-bottom:36px}.login__brand-logo{width:38px;height:38px;border-radius:10px;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:20px}.login__brand-name{font-size:20px;font-weight:700;letter-spacing:-.3px}.login__title{margin:0 0 6px;font-size:28px;font-weight:700;letter-spacing:-.5px;color:var(--text-primary)}.login__sub{margin:0 0 24px;color:var(--text-muted);font-size:15px}.login__field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px;font-size:13px;font-weight:600;color:#3a3f4a}.login__field input{height:46px;padding:0 14px;border:1.5px solid var(--border);border-radius:10px;font-size:15px;color:var(--text-primary);background:var(--bg-app)}.login__field input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.login__field input[aria-invalid=true]{border-color:var(--error)}.login__field input[aria-invalid=true]:focus{box-shadow:0 0 0 3px #d23f3f2e}.login__field-error{font-weight:500;font-size:12px;color:var(--error)}.login__error{color:#fff;background:var(--error);padding:9px 12px;border-radius:8px;font-size:13px;margin-bottom:12px}.login__submit{margin-top:4px;height:48px;font-size:16px}.login__toggle{margin-top:18px;border:none;background:none;color:var(--brand);font-size:14px;font-weight:600;cursor:pointer;padding:4px}.login__toggle:hover{text-decoration:underline}.login__hero{flex:1.1;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;padding:48px;background:linear-gradient(150deg,var(--brand),#f59a4b)}.login__hero-blob{position:absolute;border-radius:50%;background:#ffffff1f}.login__hero-blob--1{width:420px;height:420px;top:-120px;right:-100px}.login__hero-blob--2{width:300px;height:300px;bottom:-90px;left:-60px;background:#ffffff1a}.login__hero-copy{position:relative;color:#fff;max-width:380px}.login__hero-title{font-size:34px;font-weight:700;line-height:1.25;letter-spacing:-.5px;margin-bottom:14px}.login__hero-text{font-size:16px;line-height:1.6;opacity:.92}@media (max-width: 860px){.login__hero{display:none}}@media (max-width: 480px){.login__pane{padding:32px 16px}}.grid-container{position:relative;height:100%;display:flex;flex-direction:column;background:var(--bg-grid)}.grid-scroll{position:relative;flex:1;overflow:auto}.grid-scroll:focus-visible{outline:none;box-shadow:inset 0 0 0 3px var(--cta-orange)}.grid-inner{position:relative}.grid-header{position:sticky;top:0;z-index:5;height:var(--header-height);background:var(--bg-surface);color:var(--text-primary);display:flex}.grid-header__corner,.grid-header__cell{position:absolute;top:0;height:var(--header-height);display:flex;align-items:center;padding:0 12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.grid-header__cell{flex-direction:column;align-items:flex-start;justify-content:center;gap:1px;border:none;border-right:1px solid var(--border-grid);border-bottom:1px solid var(--border-strong);background:var(--bg-surface);color:var(--text-primary);font:inherit;font-weight:600;cursor:pointer;text-align:left}.grid-header__cell:hover{background:var(--bg-muted)}.grid-header__cell[draggable=true]{cursor:grab}.grid-header__cell--over{box-shadow:inset 3px 0 0 var(--cta-orange)}.grid-header__label{overflow:hidden;text-overflow:ellipsis;max-width:100%}.grid-header__editor{font-size:11px;font-weight:600;color:var(--text-faint);text-transform:uppercase;letter-spacing:.03em}.grid-header__category{font-size:10px;font-weight:700;color:var(--brand);background:var(--brand-soft);padding:0 5px;border-radius:8px;margin-top:1px;max-width:100%;overflow:hidden;text-overflow:ellipsis}.grid-header__date{font-size:10px;font-weight:600;color:var(--text-faint);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.grid-header__max{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:600;color:var(--text-faint);margin-top:2px}.grid-header__max-badge{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:4px;background:var(--brand-soft);color:var(--brand);font-size:9px;font-weight:700}.grid-header__corner{position:sticky;left:0;flex:none;z-index:7;background:#f1f2f4;border-bottom:1px solid var(--border-strong);border-right:1px solid var(--border-strong);box-shadow:6px 0 8px -6px #0000001f;color:var(--text-faint)}.grid-header__corner--code{box-shadow:none;font-weight:600;display:flex;align-items:center;padding:0 12px}.grid-header__code-resize{position:absolute;top:0;right:0;width:7px;height:100%;cursor:col-resize;touch-action:none;z-index:8}.grid-header__code-resize:hover{background:var(--cta-blue);opacity:.5}.grid-rowcode{position:sticky;left:0;height:100%;display:flex;align-items:center;padding:0 12px;font-size:12px;color:var(--text-muted);background:var(--bg-app);border-bottom:1px solid var(--border-grid);border-right:1px solid var(--border-strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums;z-index:3}.grid-row:nth-child(2n) .grid-rowcode{background:var(--bg-cell-alt)}.grid-rowlabel{position:sticky;left:0;height:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 12px;font-weight:600;color:var(--text-primary);background:var(--bg-app);border-bottom:1px solid var(--border-grid);border-right:1px solid var(--border-strong);box-shadow:6px 0 8px -6px #00000014;z-index:3}.grid-rowlabel__handle{flex-shrink:0;font-size:14px;color:var(--text-muted);cursor:grab;opacity:0;transition:opacity .1s;-webkit-user-select:none;user-select:none;padding:0 2px}.grid-rowlabel:hover .grid-rowlabel__handle{opacity:1}.grid-rowlabel--over{box-shadow:inset 0 3px 0 var(--cta-orange)}.grid-rowlabel__avatar{flex:none;width:26px;height:26px;border-radius:50%;color:#fff;font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none}.grid-rowlabel__name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 640px){.grid-rowlabel__avatar{display:none}.grid-rowlabel,.grid-rowcode{padding:0 8px}}.grid-row{display:flex}.grid-rowcode,.grid-rowlabel,.grid-summary__code,.grid-summary__label{flex:none}.grid-summary{position:sticky;bottom:0;z-index:4;display:flex;height:var(--row-height);background:var(--dark);color:#fff}.grid-summary__cell{position:absolute;top:0;height:var(--row-height);display:flex;align-items:center}.grid-summary__code{position:sticky;left:0;height:var(--row-height);z-index:5;background:var(--dark)}.grid-summary__label{position:sticky;left:0;height:var(--row-height);display:flex;align-items:center;padding:0 12px;font-size:12px;font-weight:600;z-index:5;background:var(--dark);box-shadow:6px 0 8px -6px #0003}.grid-summary__cell{justify-content:center;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;border-left:1px solid rgba(255,255,255,.08)}.grid-rowlabel__grade{flex-shrink:0;font-size:13px;font-weight:700;color:var(--cta-text);background:var(--cta-blue);padding:2px 8px;border-radius:10px}.grid-row:nth-child(2n) .grid-rowlabel{background:var(--bg-cell-alt)}.grid-cell{position:relative;height:100%;display:flex;align-items:center;padding:0 10px;color:var(--text-primary);background:var(--bg-app);border-right:1px solid var(--border-grid);border-bottom:1px solid var(--border-grid);cursor:cell;outline:none}.grid-row:nth-child(2n) .grid-cell{background:var(--bg-cell-alt)}.grid-cell--active{box-shadow:inset 0 0 0 2px var(--cta-blue)}.grid-cell--drop-target{position:relative;z-index:2;box-shadow:inset 0 0 0 2px var(--cta-orange);background:#fff4ec!important}.grid-cell--focused{position:relative;z-index:2;box-shadow:inset 0 0 0 1px #fff,inset 0 0 0 3px var(--cta-orange);background:#fff7ed}.grid-cell--selected{background:#eff6ff;box-shadow:inset 0 0 0 1px #bfdbfe}.grid-cell--missing{background:#fef2f2}.grid-cell:focus-visible{position:relative;z-index:2;box-shadow:inset 0 0 0 1px #fff,inset 0 0 0 3px var(--cta-orange)}.grid-cell__value{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.grid-cell__flag{font-size:11px;font-weight:700;color:var(--warn);margin-left:4px}.grid-cell__icon{font-size:12px;margin-left:2px;flex-shrink:0}.grid-cell__ann-triangle{position:absolute;top:0;right:0;width:0;height:0;border-style:solid;border-width:0 8px 8px 0;border-color:transparent #374151 transparent transparent;cursor:pointer;z-index:1}.grid-cell__ann-triangle--files{border-width:0 12px 12px 0;border-color:transparent var(--cta-orange) transparent transparent}.grid-cell__ann-popover{position:absolute;top:100%;right:0;z-index:100;background:var(--bg-app);border:1.5px solid #d1d5db;border-radius:6px;box-shadow:0 6px 20px #00000024;padding:10px 12px 8px;min-width:180px;max-width:260px}.grid-cell__ann-popover-content{font-size:13px;color:var(--text-primary);margin-bottom:6px}.grid-cell__ann-popover-content p{margin:0 0 4px}.grid-cell__ann-popover-files{font-size:12px;color:var(--text-muted)}.grid-cell__ann-popover-edit{font-size:12px;border:none;background:transparent;color:var(--cta-blue);cursor:pointer;padding:0;font-weight:600}.grid-cell__action-btn{position:absolute;top:2px;right:2px;width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:11px;border:none;border-radius:3px;background:transparent;color:var(--text-muted);cursor:pointer;opacity:0;padding:0;line-height:1;transition:opacity .1s}.grid-cell:hover .grid-cell__action-btn,.grid-cell--focused .grid-cell__action-btn{opacity:1}.grid-cell__action-btn:hover{background:#00000014;color:var(--text-primary)}.grid-cell__action-btn--has-annotation{opacity:.6;font-size:10px}.grid-header__cell--calculated{background:#4338ca!important;color:#e0e7ff;cursor:pointer}.grid-header__cell--calculated:hover{background:#3730a3!important}.grid-header__calc-icon{font-size:10px;margin-left:4px;flex-shrink:0;opacity:.9}.grid-cell--calculated{cursor:default!important;font-weight:600}.grid-cell--calculated .grid-cell__action-btn{display:none!important}.grid-cell--calc-above{background:#dcfce7!important;color:#15803d!important}.grid-cell--calc-above:hover{background:#bbf7d0!important}.grid-cell--calc-warning{background:#fee2e2!important;color:#b91c1c!important}.grid-cell--calc-warning:hover{background:#fecaca!important}.grid-cell--calc-normal{background:#f0f9ff!important;color:#0369a1!important}.grid-cell--calc-normal:hover{background:#e0f2fe!important}.grid-header__cell--locked{background:#64748b!important;color:#f1f5f9;cursor:not-allowed!important}.grid-header__cell--locked:hover{background:#475569!important}.grid-header__lock-icon{font-size:11px;margin-left:4px;flex-shrink:0;opacity:.9}.grid-cell--locked{cursor:not-allowed!important;background:#f1f5f9!important;color:#94a3b8}.grid-cell--locked:hover{background:#e2e8f0!important}.grid-cell--locked .grid-cell__action-btn{display:none!important}.grid-row:nth-child(2n) .grid-cell--locked{background:#e9eef5!important}.grid-toolbar-row{display:flex;align-items:center;gap:8px;padding:4px 10px;background:var(--bg-app);border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin}.grid-toolbar-row .grid-tools-btn{flex:none;white-space:nowrap}.grid-tools-btn{padding:5px 12px;border:1px solid #d1d5db;border-radius:5px;background:var(--bg-app);color:var(--text-primary);font-size:13px;font-weight:600;cursor:pointer}.grid-tools-btn:hover{background:var(--bg-cell-alt)}.grid-empty,.grid-banner{padding:16px;color:var(--text-muted)}.grid-banner--error{color:var(--cta-text);background:var(--error)}.grid-header__cell--selectable{cursor:pointer;-webkit-user-select:none;user-select:none}.grid-header__cell--selected{background:#eef2ff!important;border-bottom:2px solid #4338ca}.grid-header__checkbox{display:inline-block;width:14px;height:14px;border:2px solid #9ca3af;border-radius:3px;margin-right:5px;vertical-align:middle;flex-shrink:0;background:#fff;position:relative}.grid-header__checkbox--checked{background:#4338ca;border-color:#4338ca}.grid-header__checkbox--checked:after{content:"✓";position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:9px;color:#fff;font-weight:700}.grid-tools-label{font-size:.8rem;color:#6b7280;padding:0 6px;align-self:center}.grid-tools-btn--primary{background:#4338ca;color:#fff;border-color:#4338ca}.grid-tools-btn--primary:hover:not(:disabled){background:#3730a3}.grid-tools-btn--primary:disabled{opacity:.5;cursor:not-allowed}.cell-editor{z-index:1000;background:var(--bg-app);border:2px solid var(--cta-blue);border-radius:4px;box-shadow:0 4px 16px #0000002e;display:flex;align-items:center;padding:2px}.cell-editor__input{border:none;outline:none;font-size:15px;color:var(--text-primary);padding:6px 8px;width:100%;background:transparent}.cell-editor__rubric,.cell-editor__bool{display:flex;gap:4px;padding:4px}.rubric-pip,.bool-btn{border:1px solid var(--text-muted);background:var(--bg-app);color:var(--text-primary);min-width:30px;height:30px;border-radius:4px;font-weight:700;cursor:pointer}.rubric-pip--on,.bool-btn--on{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.cell-editor--keypad{display:block;padding:8px}.keypad{outline:none;width:200px}.keypad__display{font-size:22px;font-weight:700;text-align:right;padding:6px 10px;margin-bottom:8px;background:var(--bg-cell-alt);border-radius:4px;color:var(--text-primary);min-height:22px}.keypad__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.keypad__key{font-size:18px;font-weight:700;padding:12px 0;border:1px solid var(--text-muted);border-radius:6px;background:var(--bg-app);color:var(--text-primary);cursor:pointer}.keypad__key:hover{background:var(--bg-cell-alt)}.keypad__actions{display:flex;gap:6px;margin-top:8px}.keypad__btn{flex:1;font-size:13px;font-weight:700;padding:8px 0;border:1px solid var(--text-muted);border-radius:6px;background:var(--bg-app);color:var(--text-primary);cursor:pointer}.keypad__btn--primary{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.annotation-panel{z-index:1100;background:var(--bg-app);border:1.5px solid #d1d5db;border-radius:8px;box-shadow:0 8px 24px #00000024;padding:12px;width:260px;display:flex;flex-direction:column;gap:8px}.annotation-panel__header{font-weight:700;font-size:13px;color:var(--text-primary);margin-bottom:2px}.annotation-panel__section-label{font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.annotation-panel__note{width:100%;border:1px solid #d1d5db;border-radius:4px;font-size:13px;padding:6px 8px;resize:vertical;font-family:inherit;color:var(--text-primary);background:var(--bg-app);box-sizing:border-box}.annotation-panel__note:focus{outline:none;border-color:var(--cta-blue)}.annotation-panel__icons{display:flex;flex-wrap:wrap;gap:4px}.annotation-panel__icon-btn{font-size:18px;width:32px;height:32px;border:1.5px solid transparent;border-radius:6px;background:var(--bg-cell-alt);cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.6;transition:opacity .1s,border-color .1s}.annotation-panel__icon-btn:hover{opacity:1}.annotation-panel__icon-btn--on{opacity:1;border-color:var(--cta-blue);background:#eff6ff}.annotation-panel__colors{display:flex;gap:5px;flex-wrap:wrap}.annotation-panel__color-btn{width:24px;height:24px;border-radius:50%;cursor:pointer;padding:0;transition:transform .1s,box-shadow .1s}.annotation-panel__color-btn--on{transform:scale(1.2);box-shadow:0 0 0 2px var(--cta-blue)}.annotation-panel__actions{display:flex;gap:6px;margin-top:4px;justify-content:flex-end}.annotation-panel__btn{font-size:13px;font-weight:600;padding:6px 14px;border:1px solid #d1d5db;border-radius:5px;background:var(--bg-app);color:var(--text-primary);cursor:pointer}.annotation-panel__btn--primary{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.annotation-panel__attach{display:block;width:100%;margin-top:8px;padding:7px 10px;font-size:13px;font-weight:600;text-align:left;border:1px dashed var(--cta-blue);border-radius:5px;background:#eff6ff;color:var(--cta-blue);cursor:pointer}.annotation-panel__attach:hover{background:#dbeafe}.cell-editor--rubric{display:block;padding:0;max-width:min(640px,calc(100vw - 16px));max-height:calc(100vh - 16px);overflow:auto}.rubric-grid{display:flex;flex-direction:column}.rubric-grid__table{border-collapse:collapse;font-size:13px;color:var(--text-primary)}.rubric-grid__level,.rubric-grid__corner{background:var(--bg-cell-alt);font-weight:700;padding:6px 8px;border:1px solid #e5e7eb;text-align:center;position:sticky;top:0}.rubric-grid__criterion{text-align:left;font-weight:700;padding:6px 8px;border:1px solid #e5e7eb;background:var(--bg-cell-alt);white-space:nowrap;position:sticky;left:0}.rubric-grid__cell{border:1px solid #e5e7eb;padding:0}.rubric-grid__pick{display:flex;flex-direction:column;align-items:center;gap:2px;width:100%;min-width:64px;min-height:40px;padding:6px 8px;border:2px solid transparent;background:var(--bg-app);color:var(--text-primary);cursor:pointer}.rubric-grid__pick:hover{background:var(--bg-cell-alt)}.rubric-grid__pick--on{border-color:var(--cta-blue);box-shadow:inset 0 0 0 2px var(--cta-blue);font-weight:700}.rubric-grid__points{font-weight:700}.rubric-grid__text{font-size:11px;color:var(--text-muted);text-align:center}.rubric-grid__footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;border-top:1px solid #e5e7eb;background:var(--bg-app);position:sticky;bottom:0}.rubric-grid__total{font-size:14px}.rubric-grid__max{color:var(--text-muted)}.rubric-grid__actions{display:flex;gap:8px}.rubric-grid__btn{border:1px solid var(--text-muted);background:var(--bg-app);color:var(--text-primary);padding:6px 14px;border-radius:4px;font-weight:700;cursor:pointer}.rubric-grid__btn--primary{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.gb-view{display:flex;flex-direction:column;height:100%}.gb-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;padding:12px 18px;background:var(--bg-app);border-bottom:1px solid var(--border)}.gb-brand{display:flex;align-items:center;gap:9px;flex:none;margin-right:6px}.gb-brand__logo{width:30px;height:30px;border-radius:8px;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px}.gb-brand__name{font-size:16px;font-weight:700;letter-spacing:-.3px;color:var(--text-primary)}.gb-brand--link{cursor:pointer;border-radius:8px;padding:2px 4px;margin-left:-4px}.gb-brand--link:hover{background:var(--bg-muted)}.gb-brand__sep{width:1px;height:24px;background:var(--border);flex:none}.gb-title{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-width:0}.gb-title h1{margin:0;font-size:20px;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gb-meta{font-size:13px;color:var(--text-muted)}.gb-breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:8px;min-width:0}.gb-crumb{font-size:14px;line-height:1.2;color:var(--text-muted)}.gb-crumb--link{border:none;background:none;padding:2px 4px;margin:0 -2px;border-radius:6px;cursor:pointer;font:inherit;color:var(--text-muted)}.gb-crumb--link:hover{background:var(--bg-muted);color:var(--text-primary)}.gb-crumb__sep{color:var(--border);font-size:15px}.gb-crumb--current{margin:0;font-size:18px;font-weight:700;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:40vw}.gb-crumb__count{font-size:13px;color:var(--text-muted);white-space:nowrap}.gb-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px}@media (max-width: 640px){.gb-toolbar{padding:8px 12px;gap:6px 10px}.gb-brand__name,.gb-brand__sep{display:none}.gb-nav-tab{padding:5px 10px;font-size:.78rem}.gb-title h1{font-size:15px}.gb-meta{display:none}.gb-actions{width:100%;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin;padding-bottom:2px}.gb-actions>*{flex:none}.gb-user{margin-left:auto}.gb-user__name{display:none}}.gb-grid{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.gb-boot{padding:32px;font-size:16px;color:var(--text-primary)}.gb-boot--error{color:var(--error)}.gb-boot__hint{margin-top:8px;font-size:13px;color:var(--text-muted)}.gb-empty{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--text-primary)}.gb-empty h2{margin:0}.gb-empty p{margin:0 0 8px;color:var(--text-muted)}.gb-user{display:flex;align-items:center;gap:10px;margin-left:8px;padding-left:14px;border-left:1px solid var(--border)}.gb-user__name{font-size:13px;font-weight:600;color:var(--text-primary)}.gb-user__name--link{border:none;background:none;cursor:pointer;padding:4px 6px;border-radius:6px;font-family:inherit}.gb-user__name--link:hover{background:var(--bg-muted)}.gb-link{border:none;background:none;color:var(--cta-blue);font-size:13px;font-weight:600;cursor:pointer;padding:4px}.gb-link:hover{text-decoration:underline}.gb-nav-tab{padding:6px 13px;border:1px solid transparent;border-radius:8px;background:var(--bg-muted);font-size:.85rem;cursor:pointer;color:var(--text-muted);font-weight:600}.gb-nav-tab--active{background:var(--brand);border-color:var(--brand);color:#fff;cursor:default}.gb-nav-tab--inactive:hover{background:#e9ebef;color:var(--text-primary)}.calc{position:fixed;z-index:1500;width:248px;background:var(--bg-app);border:1px solid var(--border-strong);border-radius:12px;box-shadow:0 16px 48px #00000047;-webkit-user-select:none;user-select:none;overflow:hidden}.calc__header{display:flex;align-items:center;justify-content:space-between;padding:8px 10px 8px 14px;background:var(--dark);color:#fff;cursor:grab;touch-action:none}.calc__header:active{cursor:grabbing}.calc__title{font-size:13px;font-weight:600}.calc__close{border:none;background:none;color:#fffc;font-size:14px;cursor:pointer;padding:2px 6px;border-radius:6px}.calc__close:hover{background:#ffffff26;color:#fff}.calc:focus{outline:2px solid var(--cta-blue);outline-offset:-1px}.calc__display{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin:12px;padding:10px 14px;background:var(--bg-muted);border:1px dashed var(--border-strong);border-radius:8px;cursor:grab}.calc__display:active{cursor:grabbing}.calc__display-value{font-size:26px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.calc__display-grip{color:var(--text-muted);font-size:15px;flex:none}.calc__display-mem{flex:none;margin-right:auto;align-self:flex-start;font-size:11px;font-weight:700;color:var(--brand);background:#eef2ff;border-radius:4px;padding:1px 5px}.calc__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:0 12px 12px}.calc__key{height:44px;border:1px solid var(--border);border-radius:8px;background:var(--bg-app);color:var(--text-primary);font-size:16px;font-weight:600;cursor:pointer}.calc__key:hover{background:var(--bg-muted)}.calc__key:active{transform:translateY(1px)}.calc__key--fn{background:var(--bg-muted);color:var(--text-muted);font-size:14px}.calc__key--mem{background:var(--bg-muted);color:var(--brand);font-size:12px;font-weight:700}.calc__key--op{background:#eef2ff;color:var(--brand)}.calc__key--wide{grid-column:span 2}.calc__key--eq{background:var(--cta-orange);border-color:var(--cta-orange);color:#fff}.calc__key--eq:hover{filter:brightness(.96);background:var(--cta-orange)}.rp{position:fixed;z-index:1500;width:320px;max-height:78vh;display:flex;flex-direction:column;background:var(--bg-app);border:1px solid var(--border-strong);border-radius:12px;box-shadow:0 16px 48px #00000047;-webkit-user-select:none;user-select:none;overflow:hidden}.rp__header{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;background:var(--dark);cursor:grab;touch-action:none}.rp__header:active{cursor:grabbing}.rp__tabs{display:flex;gap:4px}.rp__tab{border:none;background:#ffffff1f;color:#ffffffbf;font-size:13px;font-weight:700;padding:5px 12px;border-radius:7px;cursor:pointer}.rp__tab--on{background:#fff;color:var(--dark)}.rp__close{border:none;background:none;color:#fffc;font-size:14px;cursor:pointer;padding:2px 6px;border-radius:6px}.rp__close:hover{background:#ffffff26;color:#fff}.rp__body{padding:14px;overflow-y:auto}.rp__empty{padding:28px 16px;text-align:center;color:var(--text-muted);font-size:14px}.rp__stage{min-height:78px;display:flex;align-items:center;justify-content:center;text-align:center;padding:10px;margin-bottom:12px;border:2px dashed var(--border-strong);border-radius:10px;background:var(--bg-grid);font-size:24px;font-weight:800;color:var(--text-primary);line-height:1.2}.rp__stage--spin{color:var(--text-muted);border-style:solid}.rp__stage--winner{border-color:var(--cta-orange);background:#fff7ed;color:var(--cta-orange);font-size:28px;animation:rp-pop .3s ease}@keyframes rp-pop{0%{transform:scale(.9)}60%{transform:scale(1.06)}to{transform:scale(1)}}.rp__go{width:100%;height:48px;border:none;border-radius:10px;background:var(--cta-blue);color:#fff;font-size:17px;font-weight:800;cursor:pointer}.rp__go:hover{background:var(--cta-blue-hover)}.rp__go:disabled{opacity:.55;cursor:default}.rp__go--sm{height:40px;width:auto;padding:0 16px;font-size:14px;flex:none}.rp__option{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13px;color:var(--text-primary);cursor:pointer}.rp__status{margin-top:8px;font-size:13px;font-weight:600;color:var(--text-muted);display:flex;align-items:center;gap:8px;flex-wrap:wrap}.rp__reset{border:1px solid var(--border-strong);background:var(--bg-app);color:var(--cta-blue);font-size:12px;font-weight:700;padding:3px 10px;border-radius:6px;cursor:pointer}.rp__controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.rp__seg{display:flex;border:1px solid var(--border-strong);border-radius:8px;overflow:hidden}.rp__segbtn{border:none;background:var(--bg-app);color:var(--text-muted);font-size:13px;font-weight:700;padding:8px 12px;cursor:pointer}.rp__segbtn--on{background:var(--cta-blue);color:#fff}.rp__num{width:64px;height:40px;border:1px solid var(--border-strong);border-radius:8px;text-align:center;font-size:16px;font-weight:700;color:var(--text-primary);background:var(--bg-app)}.rp__groups{margin-top:14px;display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.rp__group{border:1px solid var(--border-strong);border-radius:9px;overflow:hidden;background:var(--bg-grid)}.rp__group-head{padding:6px 10px;background:var(--cta-blue);color:#fff;font-size:12px;font-weight:800}.rp__group-list{margin:0;padding:8px 10px 8px 24px;font-size:13px;color:var(--text-primary)}.rp__group-list li{margin:2px 0}.rcm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1200}.rcm{background:var(--bg-app);color:var(--text-primary);border-radius:10px;box-shadow:0 16px 48px #0000004d;width:min(880px,calc(100vw - 32px));height:min(90vh,900px);display:flex;flex-direction:column;overflow:hidden}.rcm__head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #e5e7eb}.rcm__head h2{margin:0;font-size:18px}.rcm__x{border:none;background:none;font-size:18px;cursor:pointer;color:var(--text-muted)}.rcm__bar{display:flex;align-items:center;gap:12px;padding:10px 18px;border-bottom:1px solid #e5e7eb;flex-wrap:wrap}.rcm__label{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:var(--text-muted)}.rcm__select{border:1px solid #d1d5db;border-radius:5px;padding:6px 10px;font-size:13px;font-family:inherit;background:var(--bg-app);color:var(--text-primary)}.rcm__hint{font-size:13px;color:var(--text-muted)}.rcm__btn{padding:8px 16px;border:1px solid #d1d5db;border-radius:5px;background:var(--bg-app);color:var(--text-primary);font-size:13px;font-weight:700;cursor:pointer}.rcm__btn:disabled{opacity:.4;cursor:not-allowed}.rcm__btn--primary{background:var(--cta-orange);border-color:var(--cta-orange);color:#fff}.rcm__preview{flex:1;border:none;width:100%;background:#e5e7eb}.stm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1200}.stm{background:var(--bg-app);color:var(--text-primary);border-radius:10px;box-shadow:0 16px 48px #0000004d;width:min(820px,calc(100vw - 32px));max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.stm__head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #e5e7eb}.stm__head h2{margin:0;font-size:18px}.stm__x{border:none;background:none;font-size:18px;cursor:pointer;color:var(--text-muted)}.stm__body{padding:18px;overflow-y:auto}.stm__tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}.stm__tile{border:1px solid #e5e7eb;border-radius:10px;padding:14px;text-align:center;background:var(--bg-grid)}.stm__tile-val{font-size:26px;font-weight:800;color:var(--cta-blue)}.stm__tile-lbl{font-size:13px;color:var(--text-muted);margin-top:2px}.stm__section{margin-bottom:22px}.stm__h3{font-size:15px;font-weight:700;margin:0 0 10px;color:var(--text-primary)}.stm__empty{color:var(--text-muted);font-size:14px}.stm-chart{width:100%;max-width:560px;height:auto}.stm-chart__lbl{font-size:14px;font-weight:700;fill:var(--text-primary)}.stm-chart__val{font-size:13px;font-weight:700;fill:var(--text-muted)}.stm-chart__cap{font-size:12px;fill:var(--text-muted)}.stm__tablewrap{overflow-x:auto}.stm__table{border-collapse:collapse;width:100%;font-size:14px}.stm__table th,.stm__table td{border:1px solid #e5e7eb;padding:6px 8px;text-align:center}.stm__table th{background:var(--bg-cell-alt);color:var(--text-muted);font-weight:700;white-space:nowrap}.stm__table td.n,.stm__table th.n{text-align:left}.stm__table td.bar,.stm__table th.bar{min-width:130px}.stm__minibar{position:relative;height:18px;background:var(--bg-cell-alt);border-radius:4px;overflow:hidden}.stm__minibar-fill{position:absolute;inset:0 auto 0 0;background:var(--cta-blue)}.stm__minibar-num{position:relative;font-size:11px;font-weight:700;color:var(--text-primary);line-height:18px}@media (max-width: 640px){.stm__tiles{grid-template-columns:repeat(2,1fr)}}.bkm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1200}.bkm{background:var(--bg-app);color:var(--text-primary);border-radius:10px;box-shadow:0 16px 48px #0000004d;width:min(560px,calc(100vw - 32px));max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.bkm__head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #e5e7eb}.bkm__head h2{margin:0;font-size:18px}.bkm__x{border:none;background:none;font-size:18px;cursor:pointer;color:var(--text-muted)}.bkm__body{padding:18px;overflow-y:auto}.bkm__section{margin-bottom:20px}.bkm__section:last-child{margin-bottom:0}.bkm__h3{font-size:15px;font-weight:700;margin:0 0 6px}.bkm__hint{font-size:13px;color:var(--text-muted);margin:0 0 10px}.bkm__note{font-size:13px;color:var(--text-primary);background:var(--bg-cell-alt);border-radius:8px;padding:10px 12px;margin-bottom:12px}.bkm__note--ok{background:#dcfce7;color:#166534}.bkm__link{border:none;background:none;color:var(--cta-blue);font-weight:700;cursor:pointer;padding:0 4px;font-size:inherit}.bkm__row{display:flex;gap:10px;flex-wrap:wrap}.bkm__btn{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border:1px solid #d1d5db;border-radius:6px;background:var(--bg-app);color:var(--text-primary);font-size:13px;font-weight:700;cursor:pointer}.bkm__btn:disabled{opacity:.5;cursor:not-allowed}.bkm__btn--primary{background:var(--cta-blue);border-color:var(--cta-blue);color:#fff}.bkm__btn--sm{padding:5px 12px;font-size:12px}.bkm__files{margin-top:12px;display:flex;flex-direction:column;gap:6px}.bkm__file{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid #e5e7eb;border-radius:6px;background:var(--bg-grid)}.bkm__file-name{font-size:13px;font-weight:600;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bkm__file-date{font-size:12px;color:var(--text-muted)}.rb-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1100}.rb{background:var(--bg-app);color:var(--text-primary);border-radius:8px;box-shadow:0 12px 40px #0000004d;width:min(760px,calc(100vw - 32px));max-height:calc(100vh - 32px);display:flex;flex-direction:column}.rb__head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #e5e7eb}.rb__head h2{margin:0;font-size:18px}.rb__x{border:none;background:none;font-size:18px;cursor:pointer;color:var(--text-muted)}.rb__row{display:flex;gap:14px;padding:14px 18px;flex-wrap:wrap}.rb__row label{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:700;color:var(--text-muted)}.rb__row input,.rb__row select{font-size:14px;padding:6px 8px;border:1px solid var(--text-muted);border-radius:4px;background:var(--bg-app);color:var(--text-primary)}.rb__row label:first-child{flex:1}.rb__row label:first-child input{width:100%}.rb__gridwrap{overflow:auto;padding:0 18px}.rb__grid{border-collapse:collapse;width:100%}.rb__grid th,.rb__grid td{border:1px solid #e5e7eb;padding:6px;text-align:center}.rb__corner{background:var(--bg-cell-alt);font-size:12px;color:var(--text-muted);white-space:nowrap}.rb__level{background:var(--bg-cell-alt)}.rb__label{width:90px;font-weight:700;text-align:center;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--text-primary)}.rb__label:focus{border-color:var(--cta-blue);outline:none}.rb__points{width:64px;margin-top:4px;text-align:center;border:1px solid var(--text-muted);border-radius:3px}.rb__criterion input{width:130px;font-weight:700;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--text-primary)}.rb__criterion input:focus{border-color:var(--cta-blue);outline:none}.rb__cell{color:var(--text-muted);min-width:64px}.rb__wcol{background:var(--bg-cell-alt);font-size:12px;color:var(--text-muted);white-space:nowrap}.rb__wcell{background:var(--bg-grid)}.rb__weight{width:54px;text-align:center;border:1px solid var(--text-muted);border-radius:3px;background:var(--bg-app);color:var(--text-primary)}.rb__foot{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-top:1px solid #e5e7eb;margin-top:14px}.rb__max{font-weight:700}.rb__actions{display:flex;gap:10px}.rb__btn{border:1px solid var(--text-muted);background:var(--bg-app);color:var(--text-primary);padding:8px 16px;border-radius:4px;font-weight:700;cursor:pointer}.cem-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:2000}.cem{background:var(--bg-app);color:var(--text-primary);width:440px;max-width:92vw;max-height:88vh;overflow:auto;border-radius:8px;box-shadow:0 10px 40px #0000004d}.cem__head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb}.cem__head h2{margin:0;font-size:17px}.cem__x{border:none;background:none;font-size:18px;cursor:pointer;color:var(--text-muted)}.cem__section{padding:16px 20px;border-bottom:1px solid #f1f1f1}.cem__section h3{margin:0 0 10px;font-size:13px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}.cem__hint{margin:0 0 10px;font-size:13px;color:var(--text-muted)}.cem__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.cem__choice{width:100%;text-align:left;padding:9px 12px;border:1px solid #e5e7eb;border-radius:6px;background:var(--bg-app);color:var(--text-primary);cursor:pointer;font-size:14px}.cem__choice:hover:not(:disabled){background:var(--bg-cell-alt)}.cem__choice--on{border-color:var(--cta-blue);box-shadow:inset 0 0 0 1px var(--cta-blue)}.cem__choice span{color:var(--text-muted);font-size:12px;text-transform:uppercase}.cem__form{display:flex;flex-direction:column;gap:10px}.cem__form label{display:flex;flex-direction:column;gap:4px;font-size:13px;font-weight:600;color:var(--text-muted)}.cem__form input,.cem__form select{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:var(--text-primary);background:var(--bg-app)}.cem__row{display:flex;gap:12px}.cem__row label{flex:1}.cem__rename{display:flex;gap:8px}.cem__row+label,.cem__section>label{display:flex;flex-direction:column;gap:4px;margin:10px 0;font-size:13px;font-weight:600;color:var(--text-muted)}.cem__section>label input{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:var(--text-primary);background:var(--bg-app)}.cem__rename input{flex:1;padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:var(--text-primary);background:var(--bg-app)}.cem__calc-info{background:#eef2ff;border-left:3px solid #4338ca}.cem__calc-info h3{margin:0 0 4px;font-size:13px;color:#3730a3}.cem__lock{background:#f8fafc}.cem__lock h3{margin:0 0 4px;font-size:13px}.cem__danger{border-bottom:none}.cem__delete{width:100%;padding:9px 12px;border:1px solid var(--error);border-radius:6px;background:var(--bg-app);color:var(--error);font-size:14px;font-weight:600;cursor:pointer}.cem__delete:hover:not(:disabled){background:var(--error);color:var(--cta-text)}.cem__delete:disabled{opacity:.45;cursor:not-allowed;border-color:#d1d5db;color:#9ca3af}.cem__delete:disabled{opacity:.5;cursor:not-allowed}.ann-modal__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:3000;display:flex;align-items:center;justify-content:center}.ann-modal{background:var(--bg-app);border-radius:10px;box-shadow:0 20px 60px #00000040;width:520px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);display:flex;flex-direction:column;overflow:hidden}.ann-modal__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #e5e7eb}.ann-modal__title{font-weight:700;font-size:15px;color:var(--text-primary)}.ann-modal__close{border:none;background:transparent;font-size:16px;color:var(--text-muted);cursor:pointer;padding:4px 6px;border-radius:4px}.ann-modal__close:hover{background:var(--bg-cell-alt)}.ann-modal__toolbar{padding:6px 20px;background:var(--bg-cell-alt);border-bottom:1px solid #e5e7eb}.ann-modal__toolbar-hint{font-size:11px;color:var(--text-muted);font-family:monospace}.ann-modal__textarea{width:100%;box-sizing:border-box;border:none;outline:none;padding:14px 20px;font-size:14px;font-family:inherit;color:var(--text-primary);background:var(--bg-app);resize:vertical;min-height:120px}.ann-modal__dropzone{margin:0 20px;border:2px dashed #d1d5db;border-radius:6px;padding:16px;text-align:center;font-size:13px;color:var(--text-muted);cursor:pointer;transition:border-color .15s,background .15s}.ann-modal__dropzone:hover,.ann-modal__dropzone--over{border-color:var(--cta-blue);background:#eff6ff;color:var(--cta-blue)}.ann-modal__resources{list-style:none;margin:8px 20px 0;padding:0;display:flex;flex-direction:column;gap:4px}.ann-modal__resource{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--bg-cell-alt);border-radius:5px}.ann-modal__resource-type{font-size:15px;line-height:1;flex-shrink:0}.ann-modal__resource-thumb{width:40px;height:40px;object-fit:cover;border-radius:4px;flex-shrink:0;display:block;border:1px solid #d1d5db}.ann-modal__resource-name{flex:1;font-size:13px;color:var(--text-primary);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ann-modal__resource-name:hover{text-decoration:underline}.ann-modal__resource-del{border:none;background:transparent;color:var(--text-muted);cursor:pointer;font-size:12px;padding:2px 4px;border-radius:3px;flex-shrink:0}.ann-modal__resource-del:hover{background:#fee2e2;color:#dc2626}.ann-modal__error{margin:8px 20px 0;font-size:13px;color:#dc2626;background:#fee2e2;padding:8px 12px;border-radius:5px}.ann-modal__footer{display:flex;align-items:center;gap:8px;padding:14px 20px;border-top:1px solid #e5e7eb;margin-top:12px}.ann-modal__btn{padding:8px 18px;border:1px solid #d1d5db;border-radius:6px;background:var(--bg-app);color:var(--text-primary);font-weight:600;font-size:14px;cursor:pointer}.ann-modal__btn--primary{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.ann-modal__btn--primary:disabled{opacity:.6;cursor:not-allowed}.ann-modal__btn--danger{background:#fff;color:#dc2626;border-color:#fca5a5}.ann-modal__btn--danger:hover{background:#fee2e2}.bem-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1000}.bem-modal{background:#fff;border-radius:10px;box-shadow:0 20px 60px #0003;width:480px;max-width:96vw;display:flex;flex-direction:column;gap:16px;padding:22px}.bem-header{display:flex;justify-content:space-between;align-items:flex-start}.bem-title{font-size:1rem;font-weight:700;color:#111827;margin:0}.bem-skipped{font-size:.75rem;color:#f59e0b;margin:4px 0 0}.bem-close{background:none;border:none;cursor:pointer;color:#6b7280;font-size:1rem;padding:2px 6px;border-radius:4px}.bem-close:hover{background:#f3f4f6}.bem-cols-preview{display:flex;flex-wrap:wrap;gap:6px;max-height:72px;overflow-y:auto;padding:2px 0}.bem-col-chip{background:#eef2ff;color:#4338ca;border-radius:4px;padding:2px 8px;font-size:.75rem;font-weight:600}.bem-field{display:flex;flex-direction:column;gap:6px}.bem-label{font-size:.8rem;font-weight:600;color:#374151}.bem-select{border:1px solid #d1d5db;border-radius:6px;padding:8px 10px;font-size:.85rem;color:#111827}.bem-select:focus{outline:2px solid #6366f1;border-color:transparent}.bem-hint{font-size:.75rem;color:#9ca3af;margin:0}.bem-notice{background:#f0f9ff;border:1px solid #bae6fd;border-radius:8px;padding:10px 14px;font-size:.8rem;color:#0369a1;display:flex;gap:8px;align-items:flex-start}.bem-notice-icon{flex-shrink:0}.bem-footer{display:flex;justify-content:flex-end;gap:8px}.bem-btn-secondary{background:none;border:1px solid #d1d5db;border-radius:6px;padding:7px 18px;font-size:.85rem;cursor:pointer;color:#374151}.bem-btn-secondary:hover{background:#f3f4f6}.bem-btn-primary{background:#4338ca;color:#fff;border:none;border-radius:6px;padding:7px 20px;font-size:.85rem;font-weight:700;cursor:pointer}.bem-btn-primary:hover:not(:disabled){background:#3730a3}.bem-btn-primary:disabled{opacity:.5;cursor:not-allowed}.ccm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:3000;display:flex;align-items:center;justify-content:center}.ccm{background:var(--bg-app);border-radius:10px;box-shadow:0 20px 60px #00000040;width:540px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);display:flex;flex-direction:column;overflow:hidden}.ccm__head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 14px;border-bottom:1px solid #e5e7eb}.ccm__head h2{font-size:15px;font-weight:700;color:var(--text-primary);margin:0}.ccm__x{border:none;background:transparent;font-size:16px;color:var(--text-muted);cursor:pointer;padding:4px 6px;border-radius:4px}.ccm__x:hover{background:var(--bg-cell-alt)}.ccm__body{flex:1;overflow-y:auto;padding:18px 20px;display:flex;flex-direction:column;gap:14px}.ccm__typetabs{display:flex;gap:6px;padding:4px;background:var(--bg-cell-alt);border-radius:8px}.ccm__typetab{flex:1;border:none;background:transparent;color:var(--text-muted);font-size:13px;font-weight:700;padding:8px 6px;border-radius:6px;cursor:pointer}.ccm__typetab--on{background:var(--cta-blue);color:#fff}.ccm__checklist{display:flex;flex-direction:column;gap:4px;max-height:180px;overflow-y:auto}.ccm__check{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text-primary);cursor:pointer}.ccm__check input{flex-shrink:0;cursor:pointer}.ccm__label{display:flex;flex-direction:column;gap:5px;font-size:13px;font-weight:600;color:var(--text-primary)}.ccm__hint{font-weight:400;color:var(--text-muted);font-size:12px}.ccm__input,.ccm__select{border:1px solid #d1d5db;border-radius:6px;padding:8px 10px;font-size:13px;font-family:inherit;background:var(--bg-app);color:var(--text-primary);outline:none}.ccm__input:focus,.ccm__select:focus{border-color:var(--cta-blue);box-shadow:0 0 0 2px #dbeafe}.ccm__fieldset{border:1px solid #e5e7eb;border-radius:6px;padding:10px 14px;display:flex;flex-direction:column;gap:8px}.ccm__legend{font-size:12px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;padding:0 4px}.ccm__radio{display:flex;align-items:flex-start;gap:8px;font-size:13px;color:var(--text-primary);cursor:pointer}.ccm__radio input{margin-top:2px;flex-shrink:0;cursor:pointer}.ccm__preview{display:flex;align-items:center;gap:10px;background:var(--bg-cell-alt);border-radius:6px;padding:10px 14px}.ccm__preview-label{font-size:11px;font-weight:700;text-transform:uppercase;color:var(--text-muted);flex-shrink:0}.ccm__preview code{font-family:monospace;font-size:13px;color:var(--cta-blue)}.ccm__tiers{display:flex;flex-direction:column;gap:4px}.ccm__tier{font-size:12px;font-weight:600;padding:5px 10px;border-radius:5px}.ccm__tier--above{background:#dcfce7;color:#166534}.ccm__tier--normal{background:#f1f5f9;color:#475569}.ccm__tier--warning{background:#fee2e2;color:#991b1b}.ccm__error{font-size:13px;color:#dc2626;background:#fee2e2;padding:8px 12px;border-radius:5px}.ccm__footer{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid #e5e7eb}.ccm__btn{padding:8px 18px;border:1px solid #d1d5db;border-radius:6px;background:var(--bg-app);color:var(--text-primary);font-weight:600;font-size:14px;cursor:pointer}.ccm__btn--primary{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.ccm__btn--primary:disabled{opacity:.5;cursor:not-allowed}.export-hub-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1000}.export-hub-modal{background:#fff;border-radius:10px;box-shadow:0 20px 60px #00000040;width:680px;max-width:96vw;max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.export-hub-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb}.export-hub-title{font-size:1rem;font-weight:700;color:#111827}.export-hub-close{background:none;border:none;cursor:pointer;color:#6b7280;font-size:1rem;padding:2px 6px;border-radius:4px}.export-hub-close:hover{background:#f3f4f6}.export-hub-body{display:flex;flex:1;overflow:hidden}.export-hub-sidebar{width:130px;flex-shrink:0;border-right:1px solid #e5e7eb;padding:12px 8px;display:flex;flex-direction:column;gap:4px}.export-hub-tab{display:flex;align-items:center;gap:8px;padding:9px 10px;border:none;background:none;border-radius:6px;cursor:pointer;font-size:.82rem;color:#374151;text-align:left;width:100%}.export-hub-tab:hover{background:#f3f4f6}.export-hub-tab--active{background:#eef2ff;color:#4338ca;font-weight:600}.export-hub-tab-icon{font-size:1rem}.export-hub-content{flex:1;padding:20px;overflow-y:auto;display:flex;flex-direction:column;gap:16px}.export-hub-section-title{font-size:.9rem;font-weight:700;color:#111827;margin:0}.export-hub-toggles{display:flex;flex-direction:column;gap:10px}.export-hub-toggle{display:flex;align-items:center;gap:10px;font-size:.85rem;color:#374151;cursor:pointer}.export-hub-toggle input[type=checkbox]{width:15px;height:15px;accent-color:#4338ca;cursor:pointer}.export-hub-icons-section{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.export-hub-icons-summary{padding:10px 14px;cursor:pointer;font-size:.85rem;font-weight:600;color:#374151;background:#f9fafb;-webkit-user-select:none;user-select:none}.export-hub-icons-summary:hover{background:#f3f4f6}.export-hub-icons-body{padding:12px 14px;display:flex;flex-direction:column;gap:10px}.export-hub-icons-hint{font-size:.78rem;color:#6b7280;margin:0}.export-hub-icons-list{display:flex;flex-direction:column;gap:6px}.export-hub-icon-row{display:flex;align-items:center;gap:8px;font-size:.85rem}.export-hub-icon-name{font-size:1.1rem;min-width:30px}.export-hub-icon-arrow{color:#9ca3af}.export-hub-icon-label{flex:1;color:#374151}.export-hub-icon-delete{background:none;border:none;color:#ef4444;cursor:pointer;font-size:.75rem;padding:2px 5px;border-radius:4px}.export-hub-icon-delete:hover{background:#fee2e2}.export-hub-icon-add{display:flex;gap:8px;align-items:center}.export-hub-icon-input{border:1px solid #d1d5db;border-radius:6px;padding:6px 10px;font-size:.82rem;color:#111827;flex:1;min-width:0}.export-hub-icon-input:first-child{flex:0 0 80px}.export-hub-icon-input:focus{outline:2px solid #6366f1;outline-offset:-1px;border-color:transparent}.export-hub-icon-add-btn{background:#4338ca;color:#fff;border:none;border-radius:6px;padding:6px 14px;font-size:.82rem;font-weight:600;cursor:pointer;white-space:nowrap}.export-hub-icon-add-btn:hover{background:#3730a3}.export-hub-job{padding:10px 14px;border-radius:8px;font-size:.83rem}.export-hub-job--pending,.export-hub-job--processing{background:#fef9c3;color:#854d0e}.export-hub-job--completed{background:#dcfce7;color:#15803d}.export-hub-job--failed{background:#fee2e2;color:#b91c1c}.export-hub-job a{color:inherit;font-weight:700}.export-hub-error{padding:10px 14px;background:#fee2e2;border-radius:8px;font-size:.83rem;color:#b91c1c}.export-hub-footer{display:flex;justify-content:flex-end;gap:10px;padding:14px 20px;border-top:1px solid #e5e7eb}.export-hub-btn-secondary{background:none;border:1px solid #d1d5db;border-radius:6px;padding:7px 18px;font-size:.85rem;cursor:pointer;color:#374151}.export-hub-btn-secondary:hover{background:#f3f4f6}.export-hub-btn-primary{background:#4338ca;color:#fff;border:none;border-radius:6px;padding:7px 20px;font-size:.85rem;font-weight:600;cursor:pointer}.export-hub-btn-primary:hover:not(:disabled){background:#3730a3}.export-hub-btn-primary:disabled{opacity:.5;cursor:not-allowed}.settings-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1000}.settings-panel{background:#fff;border-radius:12px;box-shadow:0 24px 64px #0003;width:520px;max-width:96vw;max-height:80vh;display:flex;flex-direction:column;overflow:hidden}.settings-header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px 22px 16px;border-bottom:1px solid #e5e7eb;flex-shrink:0}.settings-title{font-size:1.1rem;font-weight:700;color:#111827;margin:0}.settings-sub{font-size:.8rem;color:#6b7280;margin:4px 0 0}.settings-close{background:none;border:none;cursor:pointer;color:#6b7280;font-size:1rem;padding:2px 6px;border-radius:4px}.settings-close:hover{background:#f3f4f6}.settings-list{flex:1;overflow-y:auto;padding:8px 0}.settings-item{display:flex;justify-content:space-between;align-items:center;padding:14px 22px;transition:background .1s}.settings-item:hover{background:#f9fafb}.settings-item--disabled{opacity:.5}.settings-item-left{display:flex;align-items:center;gap:12px}.settings-item-icon{font-size:1.3rem;width:28px;text-align:center}.settings-item-name{font-size:.9rem;font-weight:600;color:#111827}.settings-item-desc{font-size:.75rem;color:#6b7280;margin-top:2px}.settings-toggle{position:relative;width:40px;height:22px;border-radius:11px;border:none;background:#d1d5db;cursor:pointer;transition:background .2s;flex-shrink:0}.settings-toggle--on{background:#4338ca}.settings-toggle-thumb{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .2s;box-shadow:0 1px 3px #0003}.settings-toggle--on .settings-toggle-thumb{transform:translate(18px)}.settings-footer{padding:16px 22px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end;flex-shrink:0}.settings-btn-primary{background:#4338ca;color:#fff;border:none;border-radius:6px;padding:8px 24px;font-size:.9rem;font-weight:700;cursor:pointer}.settings-btn-primary:hover{background:#3730a3}.bulk-modal__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:2000;display:flex;align-items:center;justify-content:center}.bulk-modal{background:var(--bg-app);border-radius:10px;box-shadow:0 16px 48px #00000038;width:420px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);display:flex;flex-direction:column;overflow:hidden}.bulk-modal__header{display:flex;align-items:center;justify-content:space-between;padding:16px 18px 12px;border-bottom:1px solid #e5e7eb}.bulk-modal__title{font-weight:700;font-size:16px;color:var(--text-primary)}.bulk-modal__close{border:none;background:transparent;font-size:16px;color:var(--text-muted);cursor:pointer;padding:4px 6px;border-radius:4px}.bulk-modal__close:hover{background:var(--bg-cell-alt);color:var(--text-primary)}.bulk-modal__modes{display:flex;gap:4px;padding:10px 18px 0}.bulk-modal__mode-btn{padding:6px 14px;border-radius:20px;border:1.5px solid #d1d5db;background:var(--bg-app);color:var(--text-muted);font-weight:600;font-size:13px;cursor:pointer;transition:all .1s}.bulk-modal__mode-btn--active{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.bulk-modal__toolbar{display:flex;align-items:center;gap:8px;padding:10px 18px;border-bottom:1px solid #e5e7eb}.bulk-modal__tool-btn{padding:5px 12px;border:1px solid #d1d5db;border-radius:5px;background:var(--bg-app);color:var(--text-primary);font-size:13px;font-weight:600;cursor:pointer}.bulk-modal__tool-btn:hover{background:var(--bg-cell-alt)}.bulk-modal__hint{margin-left:auto;font-size:12px;color:var(--text-muted)}.bulk-modal__list{flex:1;overflow-y:auto;padding:8px 12px;display:flex;flex-direction:column;gap:4px}.bulk-modal__item{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg-app);border:1.5px solid #e5e7eb;border-radius:6px;transition:box-shadow .1s,border-color .1s}.bulk-modal__item--over{border-color:var(--cta-orange);box-shadow:0 -3px 0 var(--cta-orange)}.bulk-modal__handle{font-size:16px;color:var(--text-muted);cursor:grab;-webkit-user-select:none;user-select:none;flex-shrink:0}.bulk-modal__handle:active{cursor:grabbing}.bulk-modal__item-label{font-size:14px;color:var(--text-primary);font-weight:500;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bulk-modal__footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px;border-top:1px solid #e5e7eb}.bulk-modal__btn{padding:8px 18px;border:1px solid #d1d5db;border-radius:6px;background:var(--bg-app);color:var(--text-primary);font-weight:600;font-size:14px;cursor:pointer}.bulk-modal__btn--primary{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.bulk-modal__btn--primary:hover{background:var(--cta-blue-hover)}.dash{flex:1;overflow-y:auto;background:var(--bg-page);padding:32px 40px}.dash__inner{max-width:1180px;margin:0 auto}.dash__head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:24px;gap:16px;flex-wrap:wrap}.dash__title{font-size:26px;font-weight:700;letter-spacing:-.4px;color:var(--text-primary)}.dash__sub{font-size:14px;color:var(--text-muted);margin-top:4px}.dash__create{height:42px;border:none;border-radius:10px;background:var(--brand);color:#fff;font-size:14px;font-weight:600;padding:0 16px;cursor:pointer;display:flex;align-items:center;gap:7px;box-shadow:0 2px 8px #f2651347}.dash__create:hover:not(:disabled){background:var(--brand-hover)}.dash__create:disabled{opacity:.6;cursor:not-allowed}.dash__create-plus{font-size:18px;line-height:1}.dash__loading,.dash__empty{color:var(--text-muted);padding:40px 0;text-align:center}.dash__empty{display:flex;flex-direction:column;align-items:center;gap:14px}.dash__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px}.dash-card{text-align:left;padding:0;background:var(--bg-app);border:1px solid var(--border);border-radius:14px;overflow:hidden;cursor:pointer;transition:box-shadow .15s,transform .15s}.dash-card:hover{box-shadow:0 8px 24px #14171c1a;transform:translateY(-2px)}.dash-card__bar{display:block;height:8px}.dash-card__body{display:block;padding:18px}.dash-card__name{display:block;font-size:18px;font-weight:700;letter-spacing:-.3px;color:var(--text-primary)}.dash-card__foot{display:flex;align-items:center;justify-content:space-between;margin-top:18px;padding-top:14px;border-top:1px solid var(--border-grid)}.dash-card__count{font-size:13px;color:var(--text-muted)}.dash-card__open{font-size:13px;font-weight:600}.dash__create-form{display:flex;align-items:center;gap:8px}.dash__create-input{height:42px;min-width:240px;border:1px solid var(--border-strong);border-radius:10px;padding:0 12px;font-size:14px;color:var(--text-primary)}.dash__cancel{height:42px;border:1px solid var(--border-strong);border-radius:10px;background:var(--bg-app);color:var(--text-muted);font-size:14px;font-weight:600;padding:0 14px;cursor:pointer}.dash__cancel:hover:not(:disabled){background:var(--bg-muted)}.dash-card__name-row{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.dash-card__edit{flex-shrink:0;border:none;background:transparent;color:var(--text-faint);font-size:15px;line-height:1;padding:2px 4px;border-radius:6px;cursor:pointer;opacity:.5;transition:opacity .12s,background .12s,color .12s}.dash-card:hover .dash-card__edit{opacity:1}.dash-card__edit:hover{background:var(--bg-muted);color:var(--text-primary)}.dash-card__rename-input{width:100%;font-size:18px;font-weight:700;color:var(--text-primary);border:1px solid var(--brand);border-radius:8px;padding:4px 8px}.dash-card__tools{display:flex;gap:2px;flex-shrink:0}.dash-card__delete:hover{background:#fdecea;color:var(--error)}.dash-card__year{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:13px;color:var(--text-muted);cursor:default}.dash-card__year input{width:76px;padding:3px 8px;border:1px solid var(--border);border-radius:6px;font-size:13px;color:var(--text-primary)}.dash-card__year input:focus{border-color:var(--brand);outline:none}.empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:32px 20px;color:var(--text-muted)}.empty-state__icon{font-size:32px;line-height:1;margin-bottom:4px;opacity:.8}.empty-state__title{margin:0;font-size:15px;font-weight:600;color:var(--text-primary)}.empty-state__desc{margin:0;font-size:13px;max-width:320px}.empty-state__action{margin-top:10px}.rp-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:2000}.rp{background:var(--bg-app);color:var(--text-primary);width:400px;max-width:92vw;max-height:80vh;display:flex;flex-direction:column;border-radius:8px;box-shadow:0 10px 40px #0000004d}.rp__head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e5e7eb}.rp__head h2{margin:0;font-size:17px}.rp__x{border:none;background:none;font-size:18px;cursor:pointer;color:var(--text-muted)}.rp__add{display:flex;gap:8px;padding:16px 20px;border-bottom:1px solid #f1f1f1}.rp__add input{flex:1;padding:9px 11px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:var(--text-primary)}.rp__empty{padding:24px 20px;color:var(--text-muted);text-align:center}.rp__list{list-style:none;margin:0;padding:8px 12px;overflow:auto}.rp__item{display:flex;align-items:center;gap:8px;padding:9px 8px;border-bottom:1px solid #f3f4f6;font-size:14px}.rp__name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rp__code-input{flex:none!important;width:84px;padding:7px 9px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;font-variant-numeric:tabular-nums;color:var(--text-primary)}.rp__code-input:disabled{opacity:.5}.rp__code-input[aria-invalid=true]{border-color:var(--error, #d23f3f)}.rp__field-error{margin:0;padding:0 20px 10px;font-size:12px;color:var(--error, #d23f3f)}.rp__del{border:none;background:none;color:var(--text-muted);font-size:13px;cursor:pointer;padding:2px 8px}.rp__del:hover:not(:disabled){color:var(--error)}.rp__del:disabled{opacity:.4;cursor:not-allowed}.tabbar{display:flex;align-items:stretch;gap:2px;padding:0 16px;background:var(--bg-app);border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:thin}.tabbar__item{display:flex;align-items:center;flex-shrink:0;border-bottom:3px solid transparent;margin-bottom:-2px}.tabbar__add{flex-shrink:0}.tabbar__addwrap{position:relative;flex-shrink:0}.tabbar__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40}.tabbar__menu{position:fixed;z-index:50;background:var(--bg-app);border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 20px #00000026;min-width:140px;padding:4px;display:flex;flex-direction:column}.tabbar__menu button{border:none;background:none;text-align:left;padding:8px 10px;font-size:14px;color:var(--text-primary);cursor:pointer;border-radius:4px}.tabbar__menu button:hover{background:var(--bg-cell-alt)}.tabbar__item--active{border-bottom-color:var(--brand)}.tabbar__item[draggable=true]{cursor:grab}.tabbar__item--over{background:var(--bg-cell-alt);box-shadow:inset 2px 0 0 var(--cta-orange)}.tabbar__tab{border:none;background:none;padding:10px 6px 10px 16px;font-size:14px;font-weight:600;color:var(--text-muted);cursor:pointer}.tabbar__item--active .tabbar__tab{color:var(--brand)}.tabbar__tab:hover{color:var(--text-primary)}.tabbar__edit{margin:6px 4px;padding:4px 8px;font-size:14px;font-weight:600;border:1px solid var(--cta-blue);border-radius:4px;color:var(--text-primary);width:120px}.tabbar__del{border:none;background:none;color:var(--text-muted);font-size:12px;cursor:pointer;padding:2px 10px 2px 2px;opacity:.5}.tabbar__del:hover:not(:disabled){color:var(--error);opacity:1}.tabbar__del:disabled{opacity:.2;cursor:not-allowed}.tabbar__add{border:none;background:none;padding:10px 12px;font-size:13px;font-weight:700;color:var(--brand);cursor:pointer}.tabbar__add:disabled{opacity:.5;cursor:not-allowed}.planner-root{display:flex;flex-direction:column;height:100%;background:#f8fafc;position:relative}.planner-toolbar{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:#fff;border-bottom:1px solid #e5e7eb;flex-shrink:0;gap:8px;flex-wrap:wrap}.planner-toolbar__left,.planner-toolbar__right{display:flex;align-items:center;gap:6px}.planner-btn{padding:5px 12px;border:1px solid #d1d5db;border-radius:6px;background:#fff;color:#374151;font-size:.82rem;cursor:pointer;white-space:nowrap;line-height:1.4}.planner-btn:hover{background:#f3f4f6}.planner-btn--active{background:#4338ca;border-color:#4338ca;color:#fff}.planner-btn--active:hover{background:#3730a3}.planner-btn--primary{background:#4338ca;border-color:#4338ca;color:#fff;font-weight:600}.planner-btn--primary:hover:not(:disabled){background:#3730a3}.planner-btn--primary:disabled{opacity:.5;cursor:not-allowed}.planner-btn--ghost{background:none;border-style:dashed;color:#6b7280}.planner-btn--ghost:hover{background:#f3f4f6}.planner-btn--icon{padding:5px 8px}.planner-view-toggle{display:flex;border:1px solid #d1d5db;border-radius:6px;overflow:hidden}.planner-view-toggle .planner-btn{border:none;border-radius:0;margin:0}.planner-view-toggle .planner-btn+.planner-btn{border-left:1px solid #d1d5db}.planner-week-label{font-size:.85rem;color:#374151;font-weight:600;padding:0 6px}.planner-zoom-label{font-size:.78rem;color:#6b7280;min-width:38px;text-align:center}.planner-toggle-label{display:flex;align-items:center;gap:5px;font-size:.8rem;color:#374151;cursor:pointer}.planner-toggle-label input{cursor:pointer}.planner-loading{padding:8px 16px;font-size:.8rem;color:#6b7280}.planner-grid-wrapper{flex:1;overflow:auto}.planner-grid{border-collapse:collapse;width:100%;table-layout:fixed}.planner-th{background:#f1f5f9;border:1px solid #e2e8f0;padding:6px 10px;text-align:center;font-size:.75em;font-weight:700;color:#475569;position:sticky;top:0;z-index:2}.planner-th--period{width:90px;min-width:80px;background:#f8fafc;position:sticky;left:0;z-index:3}.planner-th--today{background:#eef2ff;color:#4338ca}.planner-th-day{font-size:.85em}.planner-th-date{font-size:1em;font-weight:700}.planner-period-label{background:#f8fafc;border:1px solid #e2e8f0;padding:6px 10px;text-align:right;white-space:nowrap;position:sticky;left:0;z-index:1}.planner-period-name{font-size:.78em;font-weight:700;color:#475569}.planner-period-time{font-size:.68em;color:#94a3b8;margin-top:2px}.planner-row:hover .planner-period-label{background:#f1f5f9}.planner-cell{border:1px solid #e2e8f0;vertical-align:top;padding:4px;min-height:80px;cursor:default;position:relative}.planner-cell--empty{cursor:pointer;background:#fff}.planner-cell--empty:hover{background:#f8fafc}.planner-cell--empty:hover .planner-cell__add-hint{opacity:1}.planner-cell__add-hint{opacity:0;transition:opacity .15s;color:#cbd5e1;font-size:1.2em;display:flex;align-items:center;justify-content:center;height:100%;min-height:60px}.planner-block{border-radius:6px;padding:6px 8px;cursor:pointer;min-height:60px;display:flex;flex-direction:column;gap:4px;transition:filter .1s;color:#fff}.planner-block:hover{filter:brightness(.92)}.planner-block--holiday{color:#6b7280;border:1px dashed #9ca3af}.planner-block__title{font-size:.78em;font-weight:700;line-height:1.2}.planner-block__note{font-size:.7em;opacity:.9;white-space:pre-wrap;word-break:break-word;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.planner-block__empty-note{font-size:.68em;opacity:.6;font-style:italic}.planner-block__editor{display:flex;flex-direction:column;gap:4px}.planner-note-textarea{width:100%;border:none;border-radius:4px;padding:4px 6px;font-size:.75em;resize:vertical;background:#fff3;color:inherit;font-family:inherit}.planner-note-textarea:focus{outline:2px solid rgba(255,255,255,.6)}.planner-note-textarea::placeholder{color:#ffffff80}.planner-note-actions{display:flex;gap:4px}.planner-note-save,.planner-note-cancel{border:none;border-radius:4px;padding:3px 8px;font-size:.7em;cursor:pointer;font-weight:600}.planner-note-save{background:#ffffff4d;color:inherit}.planner-note-save:hover{background:#ffffff73}.planner-note-cancel{background:#00000026;color:inherit}.planner-context-menu{position:fixed;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 8px 24px #00000026;z-index:1000;min-width:170px;overflow:hidden}.planner-ctx-item{display:block;width:100%;padding:9px 14px;background:none;border:none;text-align:left;font-size:.83rem;color:#374151;cursor:pointer}.planner-ctx-item:hover{background:#f3f4f6}.planner-ctx-item--danger{color:#dc2626}.planner-ctx-item--danger:hover{background:#fee2e2}.planner-ctx-divider{height:1px;background:#f3f4f6;margin:4px 0}.planner-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:900}.planner-modal{background:#fff;border-radius:10px;box-shadow:0 20px 60px #0003;padding:24px;width:360px;max-width:96vw;display:flex;flex-direction:column;gap:12px}.planner-modal--wide{width:560px}.planner-modal__title{font-size:1rem;font-weight:700;color:#111827;margin:0}.planner-modal__sub{font-size:.8rem;color:#6b7280;margin:-8px 0 0}.planner-modal__footer{display:flex;justify-content:flex-end;gap:8px;padding-top:4px}.planner-form-label{font-size:.8rem;font-weight:600;color:#374151}.planner-select{width:100%;border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:.85rem;color:#111827}.planner-input{border:1px solid #d1d5db;border-radius:6px;padding:6px 8px;font-size:.82rem;color:#111827;width:100%}.planner-input--time{width:90px}.planner-input:focus{outline:2px solid #6366f1;border-color:transparent}.planner-color-row{display:flex;gap:8px;flex-wrap:wrap}.planner-color-dot{width:24px;height:24px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0}.planner-color-dot--active{border-color:#111827}.planner-settings-grid{display:flex;flex-direction:column;gap:6px}.planner-settings-header{display:grid;grid-template-columns:30px 1fr 90px 90px 28px;gap:6px;font-size:.75rem;font-weight:700;color:#6b7280;text-transform:uppercase;padding:0 2px}.planner-settings-row{display:grid;grid-template-columns:30px 1fr 90px 90px 28px;gap:6px;align-items:center}.planner-settings-num{text-align:center;font-size:.8rem;font-weight:700;color:#6b7280}.planner-settings-del{background:none;border:none;color:#ef4444;cursor:pointer;font-size:.8rem;padding:2px;border-radius:4px}.planner-settings-del:hover{background:#fee2e2}.tl-panel{background:#fff;border-radius:10px;box-shadow:0 20px 60px #0003;width:540px;max-width:96vw;max-height:85vh;display:flex;flex-direction:column;overflow:hidden}.tl-header{display:flex;justify-content:space-between;align-items:flex-start;padding:16px 20px;border-bottom:1px solid #e5e7eb;background:#f9fafb}.tl-title{font-size:1rem;font-weight:700;color:#111827;margin:0}.tl-sub{font-size:.78rem;color:#6b7280;display:block;margin-top:2px}.tl-loading{padding:20px;color:#9ca3af;font-size:.85rem}.tl-body{flex:1;overflow-y:auto;padding:16px 20px;display:flex;flex-direction:column;gap:20px}.tl-empty{color:#9ca3af;font-style:italic;font-size:.85rem}.tl-section-title{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#9ca3af;margin:0 0 8px}.tl-feed{display:flex;flex-direction:column;gap:0;border-left:2px solid #e5e7eb;padding-left:16px;position:relative}.tl-entry{position:relative;padding-bottom:12px}.tl-entry-dot{position:absolute;left:-21px;top:6px;width:8px;height:8px;border-radius:50%;background:#d1d5db;border:2px solid #fff}.tl-entry--past .tl-entry-dot{background:#4338ca}.tl-entry--upcoming .tl-entry-dot{background:#059669}.tl-entry--holiday .tl-entry-dot{background:#9ca3af}.tl-entry-content{margin-left:4px}.tl-entry-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:6px 10px;border-radius:6px;background:#f9fafb;border:1px solid #e5e7eb}.tl-entry-header:hover{background:#f3f4f6}.tl-entry-meta{display:flex;align-items:center;gap:8px}.tl-entry-date{font-size:.82rem;font-weight:700;color:#374151}.tl-entry-period{font-size:.75rem;color:#6b7280}.tl-entry-chevron{font-size:.65rem;color:#9ca3af}.tl-entry-badge{font-size:.68rem;padding:1px 6px;border-radius:4px;font-weight:600}.tl-entry-badge--holiday{background:#f3f4f6;color:#6b7280}.tl-entry-body{margin-top:6px;padding:0 6px}.tl-note{cursor:pointer}.tl-note-text{font-size:.83rem;color:#374151;white-space:pre-wrap;margin:0;padding:8px;border-radius:6px;border:1px dashed #e5e7eb}.tl-note-text:hover{border-color:#a5b4fc}.tl-note-empty{font-size:.78rem;color:#9ca3af;font-style:italic;margin:0;padding:8px;border:1px dashed #e5e7eb;border-radius:6px}.tl-note-empty:hover{border-color:#a5b4fc}.tl-edit{display:flex;flex-direction:column;gap:4px}.tl-edit .planner-note-textarea{background:#f8fafc;color:#111827;border:1px solid #d1d5db;border-radius:6px}.tl-edit .planner-note-textarea:focus{outline:2px solid #6366f1;border-color:transparent}.tl-edit .planner-note-textarea::placeholder{color:#9ca3af}.tl-edit .planner-note-save{background:#4338ca;color:#fff}.tl-edit .planner-note-save:hover{background:#3730a3}.tl-edit .planner-note-cancel{background:#f3f4f6;color:#374151}.sched-view{display:flex;flex-direction:column;height:100%;overflow:hidden;background:#f9fafb;font-family:inherit}.sched-toolbar{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:#fff;border-bottom:1px solid #e5e7eb;flex-shrink:0;gap:12px;flex-wrap:wrap}.sched-nav{display:flex;align-items:center;gap:6px}.sched-nav-btn{background:none;border:1px solid #d1d5db;border-radius:6px;padding:4px 10px;font-size:.82rem;cursor:pointer;color:#374151}.sched-nav-btn:hover{background:#f3f4f6}.sched-nav-label{font-size:.9rem;font-weight:600;color:#111827;min-width:180px;text-align:center}.sched-toolbar-right{display:flex;align-items:center;gap:12px}.sched-toggle-label{display:flex;align-items:center;gap:6px;font-size:.82rem;color:#374151;cursor:pointer}.sched-btn{background:none;border:1px solid #d1d5db;border-radius:6px;padding:6px 14px;font-size:.82rem;cursor:pointer;color:#374151}.sched-btn:hover{background:#f3f4f6}.sched-btn--primary{background:#4338ca;color:#fff;border-color:#4338ca}.sched-btn--primary:hover:not(:disabled){background:#3730a3}.sched-btn--primary:disabled{opacity:.5;cursor:not-allowed}.sched-btn--danger{background:none;border-color:#fca5a5;color:#dc2626}.sched-btn--danger:hover{background:#fef2f2}.sched-btn--copy{background:#f0fdf4;border-color:#86efac;color:#16a34a}.sched-btn--copy:hover{background:#dcfce7}.sched-header-row{display:flex;background:#fff;border-bottom:1px solid #e5e7eb;flex-shrink:0}.sched-day-header{flex:1;text-align:center;padding:6px 4px;font-size:.78rem}.sched-day-header--today .sched-day-name,.sched-day-header--today .sched-day-date{color:#4338ca;font-weight:700}.sched-day-name{display:block;font-weight:600;color:#374151}.sched-day-date{display:block;color:#9ca3af;font-size:.72rem;margin-top:1px}.sched-grid-scroll{flex:1;overflow-y:auto;overflow-x:hidden}.sched-grid{position:relative;width:100%;cursor:crosshair;-webkit-user-select:none;user-select:none}.sched-timegutter{position:absolute;left:0;top:0;bottom:0;width:52px;pointer-events:none;z-index:1}.sched-timelabel{position:absolute;right:6px;transform:translateY(-50%);font-size:.68rem;color:#9ca3af;white-space:nowrap;line-height:1}.sched-hline{position:absolute;right:0;height:1px;background:#e5e7eb;pointer-events:none}.sched-hline--minor{background:#f3f4f6}.sched-daycol{position:absolute;top:0;border-left:1px solid #e5e7eb;pointer-events:none}.sched-daycol--today{background:#6366f10a}.sched-block{position:absolute;border-radius:6px;border-left:3px solid rgba(0,0,0,.15);padding:3px 5px;box-sizing:border-box;cursor:pointer;overflow:hidden;color:#fff;font-size:.72rem;box-shadow:0 1px 3px #00000026;transition:opacity .1s}.sched-block:hover{filter:brightness(1.08)}.sched-block--ghost{opacity:.55;pointer-events:none;border:2px dashed rgba(255,255,255,.6);background:#6366f1!important;z-index:10}.sched-block__times{font-weight:700;font-size:.68rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sched-block__note{margin-top:2px;font-size:.65rem;opacity:.85;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.sched-block__resize{position:absolute;bottom:0;left:0;right:0;height:8px;cursor:ns-resize;opacity:0;background:#ffffff4d;border-radius:0 0 6px 6px;transition:opacity .15s}.sched-block:hover .sched-block__resize{opacity:1}.sched-ctx{position:fixed;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 8px 24px #00000026;min-width:160px;padding:4px;z-index:9999}.sched-ctx__info{padding:6px 10px 4px;font-size:.72rem;color:#9ca3af;border-bottom:1px solid #f3f4f6;margin-bottom:4px}.sched-ctx__item{display:block;width:100%;text-align:left;background:none;border:none;padding:7px 12px;font-size:.83rem;cursor:pointer;border-radius:5px;color:#111827}.sched-ctx__item:hover{background:#f3f4f6}.sched-ctx__item--danger{color:#dc2626}.sched-ctx__item--danger:hover{background:#fef2f2}.sched-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:1000}.sched-dialog{background:#fff;border-radius:12px;box-shadow:0 24px 64px #0003;width:420px;max-width:96vw;display:flex;flex-direction:column;gap:14px;padding:22px}.sched-dialog__header{display:flex;justify-content:space-between;align-items:center}.sched-dialog__title{font-size:1rem;font-weight:700;color:#111827;margin:0}.sched-dialog__close{background:none;border:none;cursor:pointer;color:#6b7280;font-size:1rem;padding:2px 6px;border-radius:4px}.sched-dialog__close:hover{background:#f3f4f6}.sched-dialog__date{font-size:.8rem;color:#6b7280;background:#f9fafb;padding:6px 10px;border-radius:6px}.sched-dialog__sub{font-size:.85rem;color:#374151;margin:0}.sched-dialog__row{display:flex;align-items:center;gap:10px}.sched-dialog__input{width:80px;border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:.9rem}.sched-dialog__hint{font-size:.75rem;color:#6b7280;margin:0;padding:8px 10px;background:#fffbeb;border:1px solid #fde68a;border-radius:6px}.sched-dialog__footer{display:flex;justify-content:flex-end;gap:8px}.sched-dialog__footer--between{justify-content:space-between}.sched-field{display:flex;flex-direction:column;gap:4px}.sched-field--row{flex-direction:row;gap:12px}.sched-field--row .sched-field{flex:1}.sched-field__label{font-size:.78rem;font-weight:600;color:#374151}.sched-field__select,.sched-field__input{border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:.85rem;color:#111827}.sched-field__select:focus,.sched-field__input:focus{outline:2px solid #6366f1;border-color:transparent}.sched-field__textarea{border:1px solid #d1d5db;border-radius:6px;padding:7px 10px;font-size:.85rem;color:#111827;resize:vertical;font-family:inherit}.sched-field__textarea:focus{outline:2px solid #6366f1;border-color:transparent}.sched-colors{display:flex;gap:6px;flex-wrap:wrap}.sched-color-swatch{width:26px;height:26px;border-radius:50%;border:3px solid transparent;cursor:pointer;transition:border-color .15s}.sched-color-swatch--active{border-color:#111827}.seating{display:flex;flex-direction:column;height:100%;background:var(--bg-app)}.seating__toolbar{display:flex;align-items:center;gap:10px;padding:12px 20px;background:var(--bg-app);border-bottom:1px solid #e5e7eb;flex-wrap:wrap;flex-shrink:0}.seating__title{font-size:18px;font-weight:700;color:var(--text-primary);margin:0;flex-shrink:0}.seating__spacer{flex:1}.seating__plans{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.seating__plan{padding:6px 12px;border:1px solid #d1d5db;border-radius:999px;background:var(--bg-app);color:var(--text-primary);font-size:13px;font-weight:600;cursor:pointer}.seating__plan--on{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.seating__plan--add{font-size:16px;line-height:1;padding:5px 11px}.seating__label{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--text-muted)}.seating__select{border:1px solid #d1d5db;border-radius:5px;padding:5px 10px;font-size:13px;font-family:inherit;background:var(--bg-app);color:var(--text-primary)}.seating__btn{padding:7px 14px;border:1px solid #d1d5db;border-radius:5px;background:var(--bg-app);color:var(--text-primary);font-size:13px;font-weight:600;cursor:pointer}.seating__btn:disabled{opacity:.4;cursor:not-allowed}.seating__btn--primary{background:var(--cta-blue);color:var(--cta-text);border-color:var(--cta-blue)}.seating__btn--primary:disabled{opacity:.4}.seating__selbar{display:flex;align-items:center;gap:10px;padding:8px 20px;background:#eff6ff;border-bottom:1px solid #bfdbfe;flex-wrap:wrap;flex-shrink:0}.seating__hint{font-size:12px;color:var(--warn);font-weight:600}.seating__canvaswrap{flex:1;overflow:auto;padding:20px;background:linear-gradient(var(--bg-cell-alt) 1px,transparent 1px) 0 0 / 20px 20px,linear-gradient(90deg,var(--bg-cell-alt) 1px,transparent 1px) 0 0 / 20px 20px,var(--bg-grid)}.seating__empty{color:var(--text-muted);font-size:14px}.seating__canvas{position:relative;min-width:100%}.seating__board{position:absolute;top:-6px;left:16px;right:16px;height:26px;display:flex;align-items:center;justify-content:center;background:#111827;color:#fff;font-size:12px;font-weight:700;border-radius:5px;opacity:.85}.seat-card{position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:8px 6px;border:2px solid #d1d5db;border-radius:10px;background:var(--bg-app);box-shadow:0 1px 3px #0000001f;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.seat-card:hover{border-color:var(--cta-blue)}.seat-card--drag{cursor:grabbing;border-color:var(--cta-blue);box-shadow:0 8px 20px #1e3a8a47;z-index:10}.seat-card--selectable{cursor:pointer}.seat-card--selected{border-color:var(--cta-blue);background:#eff6ff;box-shadow:0 0 0 2px #bfdbfe}.seat-card__avatar{width:34px;height:34px;border-radius:50%;background:var(--cta-blue);color:var(--cta-text);font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.seat-card__name{font-size:11px;font-weight:600;color:var(--text-primary);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;line-height:1.1}.seat-card__code{font-size:10px;color:var(--text-muted)}.seat-card__check{position:absolute;top:4px;right:4px;width:16px;height:16px;background:var(--cta-blue);color:#fff;font-size:10px;font-weight:700;border-radius:50%;display:flex;align-items:center;justify-content:center}.tdp{position:relative;display:inline-block}.tdp__button{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg-app);color:var(--text-primary);font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap}.tdp__button:hover{background:var(--bg-muted)}.tdp__icon{font-size:13px}.tdp__pop{position:absolute;top:calc(100% + 6px);left:0;z-index:100;width:294px;padding:12px;background:var(--bg-app);border:1px solid var(--border-strong);border-radius:12px;box-shadow:0 10px 30px #0000002e}.tdp__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.tdp__title{font-size:15px;font-weight:700;color:var(--text-primary)}.tdp__nav{width:28px;height:28px;border:1px solid var(--border-strong);border-radius:8px;background:var(--bg-app);color:var(--text-muted);font-size:11px;cursor:pointer}.tdp__nav:hover{background:var(--bg-muted)}.tdp__dow,.tdp__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.tdp__dow{margin-bottom:4px}.tdp__dow-cell{height:24px;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:var(--text-muted)}.tdp__cell{height:34px;display:flex;align-items:center;justify-content:center;border:none;border-radius:8px;background:transparent;color:var(--text-primary);font-size:14px;cursor:pointer}.tdp__cell:hover:not(:disabled):not(.tdp__cell--empty){background:var(--bg-muted)}.tdp__cell--empty{cursor:default}.tdp__cell:disabled{color:var(--text-faint);opacity:.4;cursor:not-allowed}.tdp__wknd{color:var(--error)}.tdp__cell--today{box-shadow:inset 0 0 0 1px var(--cta-blue)}.tdp__cell--selected,.tdp__cell--selected.tdp__wknd{background:var(--cta-blue);color:#fff;font-weight:700}.tdp__today{width:100%;margin-top:8px;padding:6px;border:1px solid var(--border-strong);border-radius:8px;background:var(--bg-app);color:var(--cta-blue);font-size:13px;font-weight:600;cursor:pointer}.tdp__today:hover{background:var(--bg-muted)}.daily{display:flex;flex-direction:column;height:100%;overflow:hidden;background:var(--bg-page)}.daily__toolbar{display:flex;align-items:center;gap:16px;padding:12px 16px;background:var(--bg-app);border-bottom:1px solid var(--border);flex-wrap:wrap}.daily__date{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--text-muted)}.daily__date input{padding:6px 10px;border:1px solid var(--border-strong);border-radius:var(--radius);font-size:14px;color:var(--text-primary)}.daily__nav{width:30px;height:32px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg-app);color:var(--text-muted);font-size:12px;cursor:pointer}.daily__nav:hover{background:var(--bg-muted)}.daily__today{padding:6px 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg-app);color:var(--text-muted);font-size:14px;font-weight:600;cursor:pointer}.daily__today:hover:not(:disabled){background:var(--bg-muted)}.daily__today:disabled{opacity:.4;cursor:default}.daily__dow{font-size:14px;font-weight:600;color:var(--text-muted)}.daily__dow--weekend{color:var(--error)}.daily__clear{padding:6px 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg-app);color:var(--error);font-size:14px;font-weight:600;cursor:pointer}.daily__clear:hover:not(:disabled){background:#fdecea}.daily__clear:disabled{opacity:.5;cursor:default}.daily__warn{padding:8px 16px;background:#fff7e6;border-bottom:1px solid #f0d9a8;color:#a15c00;font-size:13px}.daily__summary{display:flex;gap:8px;flex-wrap:wrap}.daily__chip{padding:3px 10px;border-radius:999px;font-size:13px;font-weight:600;color:#fff}.daily__chip--present{background:#1f9d55}.daily__chip--absent{background:var(--error)}.daily__chip--leave{background:var(--cta-orange)}.daily__chip--sick{background:#7c3aed}.daily__chip--unset{background:var(--text-faint)}.daily__actions{display:flex;gap:8px;margin-left:auto}.daily__loading{padding:40px;text-align:center;color:var(--text-muted)}.daily__grid{flex:1;overflow:auto}.daily__head,.daily__row{display:grid;grid-template-columns:90px minmax(160px,1fr) 320px 90px 90px 100px;align-items:center;gap:8px;padding:0 16px}.daily__head{position:sticky;top:0;z-index:1;height:40px;background:var(--bg-surface);border-bottom:1px solid var(--border-strong);font-size:13px;font-weight:700;color:var(--text-muted)}.daily__row{min-height:46px;border-bottom:1px solid var(--border-grid);background:var(--bg-app)}.daily__row:nth-child(2n){background:var(--bg-cell-alt)}.daily__col-code{color:var(--text-muted);font-variant-numeric:tabular-nums}.daily__col-name{color:var(--text-primary);font-weight:500}.daily__col-check{text-align:center}.daily__status{display:flex;gap:6px}.daily__status-btn{flex:1;padding:6px 4px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg-app);color:var(--text-muted);font-size:13px;font-weight:600;cursor:pointer;transition:background .1s,color .1s,border-color .1s}.daily__status-btn:hover{background:var(--bg-muted)}.daily__status-btn--present.is-active{background:#1f9d55;border-color:#1f9d55;color:#fff}.daily__status-btn--absent.is-active{background:var(--error);border-color:var(--error);color:#fff}.daily__status-btn--leave.is-active{background:var(--cta-orange);border-color:var(--cta-orange);color:#fff}.daily__status-btn--sick.is-active{background:#7c3aed;border-color:#7c3aed;color:#fff}.daily__checkbox{width:20px;height:20px;cursor:pointer;accent-color:var(--cta-blue)}.daily__checkbox:disabled{cursor:not-allowed;opacity:.35}@media (max-width: 640px){.daily__toolbar{gap:10px;padding:10px 12px}.daily__actions{margin-left:0;width:100%}.daily__actions .cta{flex:1}.daily__head,.daily__row{grid-template-columns:64px minmax(120px,1.4fr) 260px 56px 56px 60px;min-width:616px;padding:0 10px}.daily__col-code{position:sticky;left:0;background:inherit}.daily__col-name{position:sticky;left:64px;background:inherit;box-shadow:1px 0 0 var(--border-grid)}.daily__row{background:var(--bg-app)}.daily__row:nth-child(2n){background:var(--bg-cell-alt)}.daily__head{background:var(--bg-surface)}}.holi__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:1000}.holi{width:420px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);display:flex;flex-direction:column;background:var(--bg-app);border-radius:var(--radius);box-shadow:0 12px 40px #00000040;overflow:visible}.holi__head{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.holi__head{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--border)}.holi__head h3{margin:0;font-size:16px;color:var(--text-primary)}.holi__x{border:0;background:none;font-size:16px;color:var(--text-muted);cursor:pointer}.holi__modes{display:flex;gap:6px;padding:12px 16px 0}.holi__mode{padding:5px 12px;border:1px solid var(--border-strong);border-radius:999px;background:var(--bg-app);color:var(--text-muted);font-size:13px;font-weight:600;cursor:pointer}.holi__mode.is-active{background:var(--cta-blue);border-color:var(--cta-blue);color:#fff}.holi__add{display:flex;gap:8px;padding:12px 16px;border-bottom:1px solid var(--border);flex-wrap:wrap}.holi__dates{display:flex;align-items:center;gap:6px}.holi__to{font-size:13px;color:var(--text-muted)}.holi__add input{padding:6px 10px;border:1px solid var(--border-strong);border-radius:var(--radius);font-size:14px;color:var(--text-primary)}.holi__add input[type=text]{flex:1}.holi__list{overflow-y:auto;padding:8px 0}.holi__empty{padding:24px;text-align:center;color:var(--text-muted)}.holi__row{display:flex;align-items:center;gap:12px;padding:8px 16px}.holi__row:hover{background:var(--bg-muted)}.holi__date{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#fde9c8;color:#a15c00;font-weight:700;font-size:13px;flex-shrink:0}.holi__name{flex:1;color:var(--text-primary)}.holi__del{border:0;background:none;color:var(--text-muted);font-size:14px;cursor:pointer}.holi__del:hover{color:var(--error)}.report{display:flex;flex-direction:column;height:100%;overflow:hidden;background:var(--bg-page)}.report__toolbar{display:flex;align-items:center;gap:16px;padding:12px 16px;background:var(--bg-app);border-bottom:1px solid var(--border);flex-wrap:wrap}.report__school{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--text-muted)}.report__school input{padding:6px 10px;border:1px solid var(--border-strong);border-radius:var(--radius);font-size:14px;color:var(--text-primary);min-width:200px}.report__tabs{display:flex;gap:4px}.report__tab{padding:6px 14px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg-app);color:var(--text-muted);font-size:14px;font-weight:600;cursor:pointer}.report__tab:hover{background:var(--bg-muted)}.report__tab.is-active{background:var(--cta-blue);border-color:var(--cta-blue);color:#fff}.report__period{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--text-muted)}.report__period select,.report__year{padding:6px 8px;border:1px solid var(--border-strong);border-radius:var(--radius);font-size:14px;color:var(--text-primary)}.report__year{width:84px}.report__actions{display:flex;gap:8px;margin-left:auto}.report__loading{padding:40px;text-align:center;color:var(--text-muted)}.report__scroll{flex:1;overflow:auto}.report__grid{border-collapse:separate;border-spacing:0;font-size:13px;white-space:nowrap}.report__grid th,.report__grid td{border-right:1px solid var(--border-grid);border-bottom:1px solid var(--border-grid);padding:4px 6px;text-align:center;background:var(--bg-app)}.report__grid thead th{position:sticky;top:0;z-index:2;background:var(--bg-surface);color:var(--text-muted);font-weight:700;border-bottom:1px solid var(--border-strong)}.report__day{min-width:26px;color:var(--text-faint)}.report__grid thead th.report__day--wknd{background:#f3d9d6;color:var(--error)}.report__grid td.report__cell--wknd{background:#faeeed}.report__grid thead th.report__day--holiday{background:#fde9c8;color:#a15c00}.report__grid td.report__cell--holiday{background:#fdf3e2}.report__holiday-dot{display:block;line-height:4px;color:#e08a00}.report__dow{display:block;font-size:10px;font-weight:400;color:var(--text-faint);line-height:1.1}.report__legend{display:flex;align-items:center;gap:6px;padding:8px 16px 0;font-size:13px;color:var(--text-muted);flex-wrap:wrap}.report__legend-swatch{width:14px;height:14px;border-radius:4px;border:1px solid var(--border-strong);display:inline-block}.report__schooldays{font-weight:700;color:var(--text-primary);margin-right:6px}.report__legend-swatch--wknd{background:#faeeed}.report__legend-swatch--holiday{background:#fdf3e2;margin-left:12px}.report__sticky{position:sticky;left:0;z-index:1}.report__idx{left:0;min-width:34px;color:var(--text-faint)}.report__name{left:34px;z-index:3;text-align:left;min-width:170px;color:var(--text-primary);font-weight:500;box-shadow:1px 0 0 var(--border-strong)}.report__grid thead .report__name,.report__grid thead .report__idx{z-index:4}.report__code{display:inline-block;margin-right:6px;color:var(--text-faint);font-variant-numeric:tabular-nums}.report__tot{background:var(--bg-muted);font-weight:600;min-width:36px;color:var(--text-primary)}.att-ม{color:#1f9d55;font-weight:700}.att-ข{color:var(--error);font-weight:700}.att-ล{color:var(--cta-orange);font-weight:700}.att-ป{color:#7c3aed;font-weight:700}.ts{display:flex;flex-direction:column;height:100%;overflow:hidden;background:var(--bg-page)}.ts__toolbar{display:flex;align-items:center;gap:16px;padding:12px 16px;background:var(--bg-app);border-bottom:1px solid var(--border);flex-wrap:wrap}.ts__year{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--text-muted)}.ts__year input{width:90px;padding:6px 8px;border:1px solid var(--border-strong);border-radius:var(--radius);font-size:14px;color:var(--text-primary)}.ts__actions{display:flex;gap:8px;margin-left:auto}.ts__loading{padding:40px;text-align:center;color:var(--text-muted)}.ts__body{flex:1;overflow:auto;padding:16px}.ts__block{margin-bottom:24px}.ts__block-title{font-size:16px;font-weight:700;color:var(--text-primary);margin-bottom:8px}.ts__block-sub{font-size:13px;font-weight:400;color:var(--text-muted);margin-left:8px}.ts__scroll{overflow-x:auto;border:1px solid var(--border);border-radius:8px}.ts__grid{border-collapse:separate;border-spacing:0;font-size:13px;white-space:nowrap}.ts__grid th,.ts__grid td{border-right:1px solid var(--border-grid);border-bottom:1px solid var(--border-grid);padding:4px 6px;text-align:center;background:var(--bg-app)}.ts__grid thead th{position:sticky;top:0;z-index:2;background:var(--bg-surface);color:var(--text-muted);font-weight:700}.ts__month{border-bottom:1px solid var(--border-strong)}.ts__sub{min-width:24px;color:var(--text-faint)}.ts__sticky{position:sticky;z-index:1}.ts__idx{left:0;min-width:34px;color:var(--text-faint)}.ts__name{left:34px;z-index:3;text-align:left;min-width:160px;color:var(--text-primary);font-weight:500;box-shadow:1px 0 0 var(--border-strong)}.ts__grid thead .ts__name,.ts__grid thead .ts__idx{z-index:4}.ts__code{display:inline-block;margin-right:6px;color:var(--text-faint);font-variant-numeric:tabular-nums}.ts__sum{background:var(--bg-muted);font-weight:600;min-width:44px;color:var(--text-primary)}.ts__grid--summary td,.ts__grid--summary th{min-width:90px}.account{max-width:560px;margin:0 auto;padding:28px 20px 60px;width:100%}.account--wide{max-width:820px}.account__title{margin:0 0 20px;font-size:22px;color:var(--text-primary)}.account__card{background:var(--bg-app);border:1px solid var(--border);border-radius:12px;padding:18px 20px;margin-bottom:18px}.account__card h2{margin:0 0 14px;font-size:15px;color:var(--text-primary)}.account__facts{margin:0;display:grid;gap:12px}.account__facts div{display:flex;justify-content:space-between;gap:16px}.account__facts dt{color:var(--text-muted);font-size:14px}.account__facts dd{margin:0;color:var(--text-primary);font-weight:500}.account__row{display:flex;gap:10px}.account__row input{flex:1}.account__form{display:grid;gap:14px}.account__field{display:grid;gap:6px;font-size:13px;color:var(--text-muted)}.account input{padding:9px 11px;border:1px solid #d1d5db;border-radius:7px;font-size:14px;color:var(--text-primary);background:var(--bg-app)}.account input[aria-invalid=true]{border-color:var(--error, #d23f3f)}.account__field-error{font-size:12px;font-weight:500;color:var(--error, #d23f3f)}.account__msg{margin:12px 0 0;font-size:13px;color:var(--text-muted)}.account__sticky{position:sticky;bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px;padding:12px 16px;background:var(--bg-app);border:1px solid var(--border-strong, #c7ccd1);border-radius:12px;box-shadow:0 8px 24px #00000029}.account__sticky-hint{font-size:13px;color:var(--text-primary)}.account__msg--ok{color:var(--cta-blue)}.account__msg--err{color:var(--error, #d23f3f)}.admin-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.admin-toolbar h2{margin:0}.admin-toolbar__filters{display:flex;align-items:center;gap:8px}.admin-role-filter{width:130px}.admin-search{width:200px;padding:7px 11px;border:1px solid #d1d5db;border-radius:7px;font-size:13px}.admin-table__empty{text-align:center;color:var(--text-muted);padding:18px}.admin-table__btn--danger{margin-left:6px;color:var(--error, #d23f3f);border-color:#e6c3c3}.admin-table__btn--danger:hover:not(:disabled){background:#fdeaea}.admin-pager{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:14px}.admin-pager__info{font-size:13px;color:var(--text-muted)}.admin-table{width:100%;border-collapse:collapse;font-size:14px}.admin-table th{text-align:left;padding:8px 10px;color:var(--text-muted);font-weight:600;font-size:12px;border-bottom:1px solid var(--border)}.admin-table td{padding:10px;border-bottom:1px solid var(--border-grid, #eef0f2);color:var(--text-primary)}.admin-table__you{color:var(--text-muted);font-size:12px}.admin-table__action{text-align:right}.admin-table__btn{border:1px solid var(--border-strong, #c7ccd1);background:var(--bg-app);border-radius:6px;padding:5px 10px;font-size:13px;cursor:pointer;color:var(--text-primary)}.admin-table__btn:hover:not(:disabled){background:var(--bg-muted)}.admin-table__btn:disabled{opacity:.45;cursor:not-allowed}.admin-badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;font-weight:600;background:var(--bg-muted);color:var(--text-muted)}.admin-badge--admin{background:#eef2ff;color:var(--brand)}.combobox{position:relative;display:inline-block}.combobox__input{width:100%;padding:7px 28px 7px 11px;border:1px solid #d1d5db;border-radius:7px;font-size:13px;color:var(--text-primary);background:var(--bg-app)}.combobox__input:focus{outline:2px solid var(--cta-blue);outline-offset:-1px}.combobox__chevron{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--text-muted);font-size:11px;pointer-events:none}.combobox__list{position:absolute;z-index:30;top:calc(100% + 4px);left:0;right:0;margin:0;padding:4px;list-style:none;background:var(--bg-app);border:1px solid var(--border-strong, #c7ccd1);border-radius:8px;box-shadow:0 8px 24px #00000024;max-height:220px;overflow:auto}.combobox__option{padding:7px 10px;border-radius:6px;font-size:13px;color:var(--text-primary);cursor:pointer}.combobox__option--active{background:var(--bg-muted)}.combobox__option[aria-selected=true]{font-weight:600;color:var(--brand)}.combobox__empty{padding:8px 10px;font-size:13px;color:var(--text-muted)}:root{--bg-app: #ffffff;--bg-page: #eef0f3;--bg-grid: #eef0f3;--bg-surface: #f8f9fa;--bg-cell-alt: #fafbfc;--bg-muted: #f4f5f7;--text-primary: #15171c;--text-muted: #5b6270;--text-faint: #8a909c;--border: #e6e8ec;--border-grid: #eff0f2;--border-strong: #dadde2;--brand: #f26513;--brand-hover: #da590f;--brand-soft: #fef1e9;--accent-blue: #1f6feb;--dark: #2b2f38;--cta-blue: #1f6feb;--cta-blue-hover: #1858c4;--cta-orange: #f26513;--cta-orange-hover: #da590f;--cta-text: #ffffff;--ok: #166534;--warn: #b45309;--error: #d9362b;--row-height: 40px;--header-height: 44px;--rowlabel-width: 200px;--radius: 9px}*{box-sizing:border-box}button,input,textarea,select{font-family:inherit}html,body,#root{margin:0;height:100%}body{background:var(--bg-page);color:var(--text-primary);font-family:IBM Plex Sans Thai,IBM Plex Sans,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:15px;-webkit-font-smoothing:antialiased}::-webkit-scrollbar{height:12px;width:12px}::-webkit-scrollbar-thumb{background:#c9ccd3;border-radius:99px;border:3px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:#aeb2bb}::-webkit-scrollbar-track{background:transparent}
