.shell{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-width);flex:0 0 var(--sidebar-width);background:var(--color-surface);border-right:1px solid var(--color-border);padding:24px 16px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh}.sidebar__logo{font-size:var(--font-h2-size);font-weight:var(--font-h2-weight);padding:0 12px 24px}.sidebar__nav{display:flex;flex-direction:column;gap:4px}.sidebar__foot{margin-top:auto;display:flex;flex-direction:column;gap:4px;border-top:1px solid var(--color-border);padding-top:12px}.navitem{display:block;padding:10px 12px;border-radius:var(--radius-md);color:var(--color-secondary);font:inherit;text-align:left;background:none;border:none;cursor:pointer;text-decoration:none}.navitem:hover{background:var(--color-hover);text-decoration:none}.navitem--on{background:var(--color-info-bg);color:var(--color-accent);font-weight:500}.navitem--small{font-size:.82rem;padding:8px 12px}.content{flex:1 1 auto;min-width:0;padding:var(--space-lg);max-width:1440px}.topbar,.tabbar{display:none}.page{display:flex;flex-direction:column;gap:var(--space-lg)}.page__head{display:flex;align-items:center;gap:var(--space-md);flex-wrap:wrap}.page__head-spacer{flex:1 1 auto}.page__title{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-width:0}.page__title h1{overflow-wrap:anywhere}.page__toolbar{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;margin-left:auto}.page__control{width:240px;max-width:100%}.cluster{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;min-width:0}.boot{display:grid;place-items:center;height:100vh;color:var(--color-secondary)}.login{display:grid;place-items:center;min-height:100vh;padding:var(--space-lg)}.login__card{width:min(400px,100%);display:flex;flex-direction:column;gap:var(--space-md);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:32px}.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-md)}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-lg);align-items:start}.grid-auto{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--space-md)}@media (max-width: 1100px){.grid-2{grid-template-columns:minmax(0,1fr)}.grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 840px){.shell{flex-direction:column;min-height:100dvh}.sidebar{display:none}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;position:sticky;top:0;z-index:30;min-height:calc(var(--topbar-height) + var(--safe-top));padding:var(--safe-top) 16px 0;background:var(--color-surface);border-bottom:1px solid var(--color-border)}.topbar__logo{font-size:1.05rem;font-weight:650;letter-spacing:-.02em;padding:14px 0}.topbar__logout{font:inherit;font-size:.85rem;font-weight:500;color:var(--color-accent);background:none;border:none;padding:10px 4px;min-height:44px;cursor:pointer}.tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:30;background:var(--color-surface);border-top:1px solid var(--color-border);padding:4px 2px calc(4px + var(--safe-bottom));justify-content:space-around}.tabbar__item{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:6px 2px;min-height:var(--tabbar-height);color:var(--color-secondary);text-decoration:none;font-size:.62rem;font-weight:500;line-height:1.15;-webkit-tap-highlight-color:transparent}.tabbar__item:hover{text-decoration:none}.tabbar__item--on{color:var(--color-accent)}.tabbar__label{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.content{padding:16px 16px calc(var(--tabbar-height) + var(--safe-bottom) + 16px);max-width:none}.page{gap:20px}.page__head{align-items:stretch;gap:12px}.page__head h1,.page__title h1{font-size:1.4rem}.page__head-spacer{display:none}.page__toolbar{margin-left:0;width:100%}.page__toolbar>.btn,.page__control,.page__head>.btn{flex:1 1 100%;width:100%}.grid-3,.grid-auto{grid-template-columns:minmax(0,1fr)}.login{padding:24px 16px;align-items:flex-start;padding-top:max(48px,12vh)}.login__card{padding:24px 20px;border-radius:18px}.field-row{flex-direction:column}.inline-actions{width:100%}.inline-actions>.btn{flex:1 1 auto}.page>.inline-actions{flex-direction:column-reverse}.page>.inline-actions>.btn{width:100%}.kv{flex-direction:column;gap:2px}}.inline-actions{display:flex;gap:var(--space-sm);flex-wrap:wrap}.field-row{display:flex;gap:var(--space-sm);align-items:stretch}.field-row .input{flex:1;min-width:0}.hint{font-size:.82rem;color:var(--color-secondary);line-height:1.5}.chart{width:100%;height:220px}.kv{display:flex;gap:var(--space-sm);font-size:.85rem}.kv__key{color:var(--color-secondary)}.pre{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;background:var(--color-neutral);border-radius:var(--radius-md);padding:12px;overflow:auto;max-height:260px;white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.btn{font:inherit;font-weight:500;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:filter .12s ease,background .12s ease}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:not(:disabled):hover{filter:brightness(.97)}.btn--full{width:100%}.btn--primary{background:var(--color-accent);color:var(--color-on-accent)}.btn--secondary{background:var(--color-surface);color:var(--color-primary);border-color:var(--color-border-strong)}.btn--ghost{background:transparent;color:var(--color-secondary)}.btn--ghost:not(:disabled):hover{background:var(--color-hover)}.btn--danger{background:var(--color-danger);color:var(--color-on-accent)}.btn--icon{padding:10px;display:inline-flex;align-items:center;justify-content:center;line-height:0;flex:0 0 auto}.btn--icon svg{width:18px;height:18px;display:block}.btn--spin svg{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field__hint,.field__error{font-size:.78rem;line-height:1.4}.field__hint{color:var(--color-secondary)}.field__error{color:var(--color-danger)}.input{font:inherit;width:100%;padding:10px 12px;border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-primary)}.input:focus{outline:none;border-color:var(--color-accent)}.input:disabled{background:var(--color-neutral);color:var(--color-secondary)}.input--invalid{border-color:var(--color-danger)}.input--area{resize:vertical;font-family:var(--font-family);line-height:1.5}.chips{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.chip{font:inherit;font-size:.85rem;padding:6px 12px;border-radius:999px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-secondary);cursor:pointer}.chip--on{background:var(--color-info-bg);border-color:var(--color-accent);color:var(--color-accent)}.chip--off{opacity:.45;cursor:not-allowed}.toggle{display:inline-flex;align-items:center;gap:10px;background:none;border:none;padding:0;cursor:pointer;font:inherit}.toggle__track{width:44px;height:24px;border-radius:12px;background:var(--color-hover);border:1px solid var(--color-border-strong);position:relative;transition:background .15s ease;flex:0 0 auto}.toggle__knob{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--color-surface);box-shadow:0 1px 2px #12141833;transition:transform .15s ease}.toggle--on .toggle__track{background:var(--color-accent);border-color:var(--color-accent)}.toggle--on.toggle--danger .toggle__track{background:var(--color-danger);border-color:var(--color-danger)}.toggle--on .toggle__knob{transform:translate(20px)}.toggle__label{color:var(--color-secondary);font-size:.85rem}.radio-group{display:flex;flex-direction:column;gap:var(--space-sm)}.radio{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-primary);font:inherit;text-align:left;cursor:pointer}.radio--on{border-color:var(--color-accent);background:var(--color-info-bg)}.radio__dot{width:16px;height:16px;margin-top:2px;border-radius:50%;border:1px solid var(--color-border-strong);background:var(--color-surface);flex:0 0 auto}.radio--on .radio__dot{border-color:var(--color-accent);box-shadow:inset 0 0 0 4px var(--color-accent)}.radio__text{display:flex;flex-direction:column;gap:2px}.radio__hint{font-size:.78rem;color:var(--color-secondary)}.badge{display:inline-block;font-size:var(--font-label-size);font-weight:var(--font-label-weight);letter-spacing:var(--font-label-spacing);text-transform:uppercase;padding:4px 10px;border-radius:var(--radius-sm);white-space:nowrap}.badge--neutral{background:var(--color-hover);color:var(--color-secondary)}.badge--success{background:var(--color-success-bg);color:var(--color-success)}.badge--warning{background:var(--color-warning-bg);color:var(--color-warning)}.badge--danger{background:var(--color-danger-bg);color:var(--color-danger)}.badge--info{background:var(--color-info-bg);color:var(--color-accent)}.kind-row{display:inline-flex;align-items:baseline;gap:6px}.kind-cost{font-size:.78rem;color:var(--color-text);font-variant-numeric:tabular-nums;white-space:nowrap}.status{display:inline-flex;flex-direction:column;align-items:flex-start;gap:3px;max-width:220px}.status__note{color:var(--color-secondary);font-size:11px;font-weight:400;letter-spacing:0;line-height:1.3;text-transform:none}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:20px;display:flex;flex-direction:column;gap:12px;min-width:0}.card--danger{border-color:var(--color-danger)}.card__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}.stat{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:20px;display:flex;flex-direction:column;gap:6px;flex:1 1 0;min-width:0}.stat--danger{border-color:var(--color-danger)}.stat--warning{border-color:var(--color-warning)}.stat__value{font-size:var(--font-h1-size);font-weight:var(--font-h1-weight)}.stat--danger .stat__value{color:var(--color-danger)}.stat--warning .stat__value{color:var(--color-warning)}.stat__sub{font-size:.78rem;color:var(--color-secondary)}.metric{display:flex;flex-direction:column;gap:2px}.metric__value{font-size:var(--font-h2-size);font-weight:var(--font-h2-weight)}.metric__value--success{color:var(--color-success)}.metric__value--warning{color:var(--color-warning)}.metric__value--danger{color:var(--color-danger)}.progress{display:flex;flex-direction:column;gap:6px;min-width:0}.progress__track{height:10px;border-radius:5px;background:var(--color-hover);overflow:hidden}.progress__value{height:100%;border-radius:5px;background:var(--color-accent);transition:width .3s ease}.progress__value--behind{background:var(--color-warning)}.progress__value--plan{background:var(--color-secondary)}.progress-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start;min-width:0}.progress__caption{font-size:.78rem;color:var(--color-secondary)}.limit{position:relative;display:flex;flex-direction:column;gap:2px}.limit__raw{font-size:.75rem;color:var(--color-tertiary, var(--color-secondary))}.limit__tip{position:fixed;z-index:40;width:280px;padding:10px 12px;border-radius:10px;background:var(--color-surface);border:1px solid var(--color-border);box-shadow:0 8px 24px #1012161f;font-size:12px;line-height:1.45;color:var(--color-primary);pointer-events:none}.forecast{grid-column:1 / -1;font-size:.78rem;font-weight:600}.forecast--ahead,.forecast--ok{color:var(--color-success)}.forecast--tight{color:var(--color-warning)}.forecast--short,.forecast--stalled{color:var(--color-danger)}.plan .forecast{margin-bottom:8px}.table{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);container-type:inline-size;overflow-x:auto;overflow-y:hidden}.table__head{display:flex;gap:var(--space-md);padding:14px 20px;background:var(--color-neutral)}.table__row{display:flex;gap:var(--space-md);align-items:center;padding:14px 20px;border-top:1px solid var(--color-border)}.table__row--clickable{cursor:pointer}.table__row--clickable:hover{background:var(--color-neutral)}.table__cell{min-width:0;overflow-wrap:anywhere}.table__cell[data-label]:before{display:none;content:attr(data-label);font-size:var(--font-label-size);font-weight:var(--font-label-weight);letter-spacing:var(--font-label-spacing);text-transform:uppercase;color:var(--color-secondary)}.table__empty{background:var(--color-surface);border:1px dashed var(--color-border-strong);border-radius:var(--radius-lg);padding:32px;text-align:center;color:var(--color-secondary)}.skeleton{display:flex;flex-direction:column;gap:10px}.skeleton__row{height:44px;border-radius:var(--radius-md);background:linear-gradient(90deg,var(--color-hover) 25%,var(--color-neutral) 50%,var(--color-hover) 75%);background-size:200% 100%;animation:skeleton 1.2s linear infinite}@keyframes skeleton{0%{background-position:200% 0}to{background-position:-200% 0}}.errorbox{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);padding:16px 20px;border-radius:var(--radius-lg);background:var(--color-danger-bg);border:1px solid var(--color-danger)}.errorbox__text{color:var(--color-danger)}.syncbox{display:flex;flex-direction:column;gap:6px;padding:14px 20px;border-radius:var(--radius-lg);background:var(--color-success-bg);border:1px solid var(--color-success)}.syncbox--warning{background:var(--color-warning-bg);border-color:var(--color-warning)}.syncbox__title{font-weight:600}.syncbox--warning .syncbox__title{color:var(--color-warning)}.syncbox__step{font-size:13px;color:var(--color-secondary)}.syncbox__step--failed{color:var(--color-danger)}.modal__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#12141866;display:grid;place-items:center;z-index:100;padding:var(--space-lg)}.modal{background:var(--color-surface);border-radius:var(--radius-lg);width:min(560px,100%);max-height:90vh;display:flex;flex-direction:column}.modal__head{display:flex;align-items:center;justify-content:space-between;padding:20px;border-bottom:1px solid var(--color-border)}.modal__close{background:none;border:none;font-size:1.6rem;line-height:1;cursor:pointer;color:var(--color-secondary)}.modal__body{padding:20px;overflow:auto}.modal__foot{display:flex;justify-content:flex-end;gap:var(--space-sm);padding:20px;border-top:1px solid var(--color-border)}@media (max-width: 840px){.btn{min-height:44px;padding:12px 16px}.btn--icon{min-width:44px;min-height:44px}.input{min-height:44px;padding:12px;font-size:16px}.chip{min-height:40px;padding:8px 14px}.card,.stat{padding:16px;border-radius:16px}.card__head{align-items:flex-start;flex-wrap:wrap}.card__head>.btn{width:100%}.stat__value{font-size:1.55rem}.tabs{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{flex:1 0 auto;min-height:40px;padding:10px 14px}.errorbox,.syncbox{flex-wrap:wrap;padding:14px 16px}.table{border:none;background:transparent;overflow:visible}.table__head{display:none}.table__row{display:grid;grid-template-columns:1fr 1fr;align-items:start;gap:10px 12px;min-width:0!important;width:100%;margin-bottom:12px;padding:14px 16px;border:1px solid var(--color-border);border-top:1px solid var(--color-border);border-radius:16px;background:var(--color-surface)}.table__row:last-child{margin-bottom:0}.table__cell{flex:none!important;width:auto!important;display:flex;flex-direction:column;gap:4px}.table__cell[data-label]:before{display:block}.table__cell--title{grid-column:1 / -1;font-weight:600;font-size:1.02rem}.table__cell--title[data-label]:before{display:none}.table__cell:has(.btn),.table__cell:has(.inline-actions),.table__cell:has(.progress-pair){grid-column:1 / -1}.table__empty{padding:24px 16px}.modal__backdrop{place-items:end center;padding:0;align-items:end}.modal{width:100%;max-height:min(92dvh,100%);border-radius:18px 18px 0 0;padding-bottom:var(--safe-bottom)}.modal__foot{flex-direction:column-reverse;align-items:stretch}.modal__foot .btn{width:100%}}.tabs{display:flex;gap:4px;background:var(--color-hover);padding:4px;border-radius:var(--radius-md);width:fit-content}.tab{font:inherit;font-size:.88rem;padding:7px 14px;border:none;background:none;border-radius:var(--radius-sm);cursor:pointer;color:var(--color-secondary)}.tab--on{background:var(--color-surface);color:var(--color-primary);font-weight:500}.row{display:flex;align-items:flex-start;min-width:0}.row>*{min-width:0}.stack{display:flex;flex-direction:column;min-width:0}.days-toggle{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:8px;background:none;color:var(--color-secondary);cursor:pointer}.days-toggle:hover{background:var(--color-hover)}.table__expanded{position:sticky;left:0;width:100cqi;box-sizing:border-box;padding:16px 20px 20px;background:var(--color-neutral);border-top:1px dashed var(--color-border)}.plan__stats{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.plan__stat{background:var(--color-surface);border-radius:10px;padding:8px 10px;min-width:92px}.plan__stat b{display:block;font-size:16px;font-weight:650}.plan__stat span,.plan__note{font-size:.78rem;color:var(--color-secondary);line-height:1.4}.plan__note{margin:8px 0 0}.plan__legend{display:flex;flex-wrap:wrap;gap:14px;font-size:.78rem;margin-bottom:8px}.plan__sw{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px}.plan__sw--plan{background:#5a4fe0}.plan__sw--limit{background:#1f8a4c}.plan__scroll{overflow-x:auto}.plan__chart{height:280px}.plan__chart--hours{height:180px}.plan__nums{display:flex;gap:8px;margin-top:8px}.plan__num{flex:1;text-align:left;border:none;background:none;border-radius:8px;padding:6px 8px;cursor:pointer;font:inherit;color:var(--color-secondary)}.plan__num b{display:block;color:var(--color-primary);font-weight:600}.plan__num span{font-size:.75rem}.plan__num--on{background:var(--color-info-bg)}.plan__hours{margin-top:16px}.plan__hours-title{display:flex;align-items:center;gap:8px;font-size:.85rem;font-weight:650;margin-bottom:8px}.plan__badge{font-size:.7rem;font-weight:600;color:var(--color-warning);background:var(--color-warning-bg);border-radius:999px;padding:2px 6px}.plan__verdict{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-bottom:12px;padding:10px 12px;background:var(--color-surface);border-radius:10px;font-size:.85rem}.plan__verdict .plan__note{margin:0}.plan__delta{margin-left:6px;padding:1px 6px;border-radius:999px;font-size:.72rem;font-weight:650}.plan__delta--on_plan{color:var(--color-success);background:var(--color-success-bg)}.plan__delta--behind{color:var(--color-warning);background:var(--color-warning-bg)}.plan__delta--ahead{color:var(--color-info);background:var(--color-info-bg)}@media (max-width: 840px){.table__row--open{margin-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.table__expanded{margin-bottom:12px;border:1px solid var(--color-border);border-top:none;border-radius:0 0 16px 16px;padding:12px 16px}.plan__nums{flex-direction:column}.days-toggle{width:44px;height:44px}}:root{--color-primary: #121418;--color-secondary: #6a6f77;--color-accent: #5a4fe0;--color-neutral: #f7f8fa;--color-surface: #ffffff;--color-on-accent: #ffffff;--color-border: #e6e8ec;--color-border-strong: #d0d4da;--color-hover: #f0f1f4;--color-success: #1f8a4c;--color-success-bg: #e8f5ed;--color-warning: #9a6700;--color-warning-bg: #fdf5e2;--color-danger: #c22e2e;--color-danger-bg: #fbeaea;--color-info: var(--color-accent);--color-info-bg: #eeecfc;--font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-display-size: 3.5rem;--font-display-weight: 700;--font-display-spacing: -.03em;--font-h1-size: 1.9rem;--font-h1-weight: 700;--font-h2-size: 1.25rem;--font-h2-weight: 600;--font-body-size: .92rem;--font-body-line: 1.55;--font-label-size: .7rem;--font-label-weight: 600;--font-label-spacing: .04em;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 14px;--space-sm: 8px;--space-md: 16px;--space-lg: 32px;--shadow-card: 0 1px 2px rgba(18, 20, 24, .04), 0 1px 8px rgba(18, 20, 24, .04);--sidebar-width: 232px;--topbar-height: 52px;--tabbar-height: 56px;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}html{-webkit-text-size-adjust:100%}body{background:var(--color-neutral);color:var(--color-primary);font-family:var(--font-family);font-size:var(--font-body-size);line-height:var(--font-body-line);-webkit-font-smoothing:antialiased}h1,h2,h3{margin:0}h1{font-size:var(--font-h1-size);font-weight:var(--font-h1-weight);letter-spacing:-.01em}h2{font-size:var(--font-h2-size);font-weight:var(--font-h2-weight)}a{color:var(--color-accent);text-decoration:none}a:hover{text-decoration:underline}.tabular{font-variant-numeric:tabular-nums}.label{font-size:var(--font-label-size);font-weight:var(--font-label-weight);letter-spacing:var(--font-label-spacing);text-transform:uppercase;color:var(--color-secondary)}.muted{color:var(--color-secondary)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82rem}
