:root{--bg: #f9fafb;--panel: #ffffff;--panel-soft: #f9fafb;--border: #eaecf0;--border-strong: #d0d5dd;--text: #101828;--text-2: #475467;--muted: #667085;--accent: #7f56d9;--accent-hover: #6941c6;--accent-soft: #f4ebff;--accent-ring: rgba(127, 86, 217, .24);--danger: #d92d20;--danger-soft: #fef3f2;--ok: #12b76a;--ok-strong: #027a48;--ok-soft: #e9f7ee;--ok-border: #b6e2c7;--warn: #b54708;--radius-sm: 8px;--radius: 10px;--radius-lg: 12px;--shadow-xs: 0 1px 2px rgba(16, 24, 40, .05);--shadow-sm: 0 1px 3px rgba(16, 24, 40, .1), 0 1px 2px rgba(16, 24, 40, .06);--shadow: 0 4px 8px -2px rgba(16, 24, 40, .1), 0 2px 4px -2px rgba(16, 24, 40, .06);--shadow-lg: 0 20px 24px -4px rgba(16, 24, 40, .08), 0 8px 8px -4px rgba(16, 24, 40, .03);--sidebar-w: 264px;--sidebar-w-collapsed: 76px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:Inter,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1.4;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1{font-size:22px;margin:0 0 6px;letter-spacing:-.01em}h2{font-size:17px;margin:0 0 8px}h3{font-size:15px;margin:0}code,kbd{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;background:#0f172a0f;border-radius:4px;padding:1px 4px}.muted{color:var(--muted)}.small{font-size:12px}.spacer{flex:1 1 auto}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.centered{display:flex;align-items:center;justify-content:center;gap:10px;min-height:60vh;color:var(--muted)}.spinner{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:34px;border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:8px;padding:0 12px;font-size:13px;font-weight:500;font-family:inherit;white-space:nowrap;cursor:pointer;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}.btn:hover{background:var(--panel-soft);border-color:var(--border-strong);text-decoration:none}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn.ghost{background:transparent}.btn.ghost:hover{background:#0f172a0a}.btn.danger{color:var(--danger)}.btn.danger:hover{background:var(--danger-soft);border-color:#f5c2b7}.btn.danger.solid:not(:disabled){background:var(--danger);border-color:var(--danger);color:#fff}.btn.small{height:30px;padding:0 10px;font-size:12px}.btn:disabled{opacity:.5;cursor:not-allowed}.link{border:0;background:none;color:var(--accent);cursor:pointer;padding:0 4px;font-size:13px;font-family:inherit}.link:hover{text-decoration:underline}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:0;border-radius:6px;background:none;color:var(--muted);cursor:pointer;padding:0;font-size:13px;line-height:1;font-family:inherit;transition:background .15s,color .15s,opacity .15s}.icon-btn:hover:not(:disabled){color:var(--accent);background:var(--accent-soft)}.icon-btn.danger:hover:not(:disabled){color:var(--danger);background:var(--danger-soft)}.icon-btn:disabled{opacity:.25;cursor:default}input,select{font-family:inherit;font-size:13px;color:var(--text);background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 8px;outline:none;transition:border-color .15s,box-shadow .15s}input:hover:not(:disabled),select:hover:not(:disabled){border-color:var(--border-strong)}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}input:disabled,select:disabled{background:var(--panel-soft);color:var(--muted)}input::placeholder{color:#a6adb9;opacity:1}.error{background:#fff1ee;border:1px solid #ffd6cb;color:#a83a12;border-radius:8px;padding:8px 12px;margin:8px 0}.notice{background:#fff9e8;border:1px solid #ffe6a3;color:#7a5c09;border-radius:8px;padding:10px 12px;font-size:13px;margin-bottom:12px}.hint{color:var(--muted);font-size:12px;margin:8px 0 0}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:2px 9px;font-size:11px;font-weight:500;background:var(--accent-soft);color:var(--accent);white-space:nowrap}.badge.soft{background:#0f172a0f;color:var(--muted)}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(circle at 20% 15%,#e6ecff,var(--bg) 55%)}.login-card{width:min(420px,100%);background:var(--panel);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow);padding:28px}.login-card h1{font-size:26px;letter-spacing:-.02em}.login-form{display:flex;flex-direction:column;gap:12px;margin-top:8px}.login-form label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}.login-form input{height:38px}.login-form .btn.primary{height:40px}.btn.google{width:100%;height:40px;font-size:14px;border-color:#dadce0;margin-top:8px}.g-icon{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:#4285f4;color:#fff;font-weight:700;font-size:12px}.divider{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:12px;margin:6px 0}.divider:before,.divider:after{content:"";flex:1;height:1px;background:var(--border)}.app{display:flex;align-items:stretch;min-height:100vh}.topbar{display:flex;flex-direction:column;gap:20px;flex:0 0 auto;width:var(--sidebar-w);height:100vh;padding:16px 12px;background:#fff;border-right:1px solid var(--border);position:sticky;top:0;z-index:40;transition:width .18s ease,transform .18s ease}.sidebar-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 4px}.brand{display:inline-flex;align-items:center;gap:10px;min-width:0;font-weight:700;font-size:17px;color:var(--text);letter-spacing:-.02em}.brand:hover{text-decoration:none}.brand-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.sidebar-toggle{flex:0 0 auto;width:32px;height:32px;border:1px solid var(--border);background:var(--panel)}.sidebar-close{display:none;flex:0 0 auto;width:32px;height:32px;border:1px solid var(--border);background:var(--panel)}.topnav{display:flex;flex-direction:column;gap:2px;min-height:0;overflow-y:auto}.topnav a{display:flex;align-items:center;gap:10px;height:40px;padding:0 10px;border-radius:8px;color:var(--text-2);font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden}.topnav a svg{flex:0 0 auto}.topnav a:hover{background:#f9fafb;color:var(--text);text-decoration:none}.topnav a.active{background:var(--accent-soft);color:var(--accent-hover)}.nav-label{overflow:hidden;text-overflow:ellipsis}.sidebar-foot{margin-top:auto;padding-top:12px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:10px}.userbox{display:flex;align-items:center;gap:10px;min-width:0}.avatar{width:32px;height:32px;border-radius:50%;flex:0 0 auto}.avatar-fallback{display:inline-flex;align-items:center;justify-content:center;background:var(--accent-soft);color:var(--accent-hover);font-size:13px;font-weight:700}.user-meta{display:flex;flex-direction:column;min-width:0;flex:1 1 auto}.username{font-size:13px;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-email{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.logout-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:100%;height:32px;padding:0 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text-2);font:inherit;font-size:13px;font-weight:500;cursor:pointer}.logout-btn:hover{background:var(--panel-soft);color:var(--text)}@media (min-width: 901px){.sidebar-collapsed .topbar{width:var(--sidebar-w-collapsed);padding-left:10px;padding-right:10px}.sidebar-collapsed .sidebar-head{flex-direction:column;gap:12px;padding:0}.sidebar-collapsed .brand-text,.sidebar-collapsed .nav-label,.sidebar-collapsed .user-meta{display:none}.sidebar-collapsed .topnav a{justify-content:center;padding:0}.sidebar-collapsed .userbox{justify-content:center}.sidebar-collapsed .logout-btn{padding:0}}.shell{display:flex;flex-direction:column;flex:1 1 auto;min-width:0}.content{flex:1}.mobile-bar,.sidebar-backdrop{display:none}.app-footer{display:flex;flex-wrap:wrap;gap:6px 16px;justify-content:center;padding:8px 20px 28px;font-size:12px}.app-footer a{color:var(--muted)}.app-footer a:hover{color:var(--accent);text-decoration:none}.legal-links{display:flex;flex-wrap:wrap;gap:6px 14px;justify-content:center;margin:18px 0 0;font-size:12px}.legal-links a{color:var(--muted)}.legal-links a:hover{color:var(--accent)}.page{max-width:1100px;margin:0 auto;padding:24px 20px 48px}.page.wide{max-width:1680px}.page-head{display:flex;align-items:flex-start;gap:16px;justify-content:space-between}.section-title{margin:28px 0 12px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.program-list{display:flex;flex-direction:column;gap:10px}.program-row{display:flex;align-items:center;gap:20px;padding:14px 16px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);transition:box-shadow .15s,border-color .15s}.program-row:hover{box-shadow:var(--shadow);border-color:var(--border-strong)}.program-row.template{border-left:3px solid var(--accent)}.program-row{cursor:pointer}.program-row:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.program-row.is-busy{opacity:.6;cursor:progress}.row-title .title-btn{font:inherit;color:inherit;background:none;border:0;padding:0;text-align:left;cursor:text;border-bottom:1px dashed transparent}.row-title .title-btn:hover{border-bottom-color:var(--border-strong)}.row-title .title-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}input.title-edit{width:min(420px,62vw);min-width:180px;padding:2px 6px;font:inherit;border:1px solid var(--accent);border-radius:6px;box-shadow:0 0 0 3px var(--accent-ring)}.row-main{flex:1 1 260px;min-width:0}.row-title{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.row-title h3{margin:0;font-size:15px;line-height:1.3}.row-main .small{margin:4px 0 0}.row-stats{display:flex;gap:18px;align-items:baseline;flex-wrap:wrap}.row-stat{display:flex;flex-direction:column;gap:2px;white-space:nowrap}.row-stat i{font-style:normal;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}.row-stat b{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}.row-stat.complete b{color:var(--ok-strong)}.program-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;margin-left:auto;align-items:center}.program-actions .icon-btn{width:30px;height:30px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--muted)}.program-actions .icon-btn:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.program-actions .icon-btn.danger:hover:not(:disabled){background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}.program-actions .icon-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.program-actions .icon-btn.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover);color:#fff}.empty-state{padding:28px 24px;display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;background:var(--panel);border:1px dashed var(--border-strong);border-radius:var(--radius-lg)}.empty-state p{margin:0}.help-section{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-lg);padding:18px;margin-top:14px}.help-section h2{margin-bottom:10px}.help-list div{margin-bottom:8px}.help-list dt{font-weight:600}.help-list dd{margin:2px 0 0;color:var(--text-2)}.formula-box{margin-top:12px;padding:12px 14px;background:var(--panel-soft);border-radius:var(--radius);font-size:13px}.formula-box p{margin:6px 0}.plain{list-style:none;padding-left:0}.page.editor{padding-top:14px}.editor-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}.back{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;border:1px solid var(--border);background:var(--panel);color:var(--text-2);font-size:16px}.back:hover{background:var(--panel-soft);color:var(--text);text-decoration:none}.title-input{flex:0 1 560px;min-width:200px;font-size:19px;font-weight:650;letter-spacing:-.01em;border:1px solid transparent;background:transparent;padding:3px 8px;border-radius:8px;text-overflow:ellipsis}.title-input:hover:not(:disabled){border-color:var(--border);background:var(--panel)}.title-input:focus{background:var(--panel)}.title-input:disabled{background:transparent;color:var(--text)}.status{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:500;color:var(--muted);background:#0f172a0d;white-space:nowrap}.status-dot{width:7px;height:7px;border-radius:50%;background:currentColor}.status.saved{color:var(--ok);background:var(--ok-soft)}.status.dirty{color:var(--warn);background:#fff6e6}.status.saving{color:var(--accent);background:var(--accent-soft)}.status.saving .status-dot{animation:pulse 1s ease-in-out infinite}.status.error{color:var(--danger);background:var(--danger-soft)}@keyframes pulse{50%{opacity:.3}}.field-inline{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);white-space:nowrap}.field-inline input[type=date]{height:34px;padding:0 8px}.save-error{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:space-between;margin:0 0 12px}.save-error-actions{display:inline-flex;align-items:center;gap:10px}.week-strip{position:sticky;top:12px;z-index:20;display:flex;align-items:center;gap:6px;padding:6px;background:#fffffff0;-webkit-backdrop-filter:saturate(1.4) blur(8px);backdrop-filter:saturate(1.4) blur(8px);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.week-chips{flex:1 1 auto;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(64px,1fr);gap:4px;overflow-x:auto;scrollbar-width:thin;padding:1px}.week-chip{display:flex;flex-direction:column;align-items:stretch;gap:3px;min-width:0;padding:6px 8px 7px;border:1px solid transparent;border-radius:10px;background:transparent;color:var(--text-2);font:inherit;text-align:left;cursor:pointer;transition:background .15s,border-color .15s,color .15s}.week-chip:hover{background:var(--panel-soft);border-color:var(--border)}.chip-top{display:flex;align-items:center;justify-content:space-between;gap:4px}.chip-num{font-size:15px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}.chip-check{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:var(--ok);color:#fff;font-size:10px;font-weight:700}.chip-pct{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.chip-bar{display:block;height:3px;border-radius:3px;background:#e8ebf0;overflow:hidden}.chip-bar i{display:block;height:100%;background:var(--ok);border-radius:3px;transition:width .2s}.week-chip.is-done{background:var(--ok-soft)}.week-chip.is-done:hover{border-color:var(--ok-border)}.week-chip.active{background:var(--accent);border-color:var(--accent);box-shadow:0 2px 8px #2f5bea4d}.week-chip.active .chip-num{color:#fff}.week-chip.active .chip-pct{color:#ffffffd9}.week-chip.active .chip-bar{background:#ffffff4d}.week-chip.active .chip-bar i{background:#fff}.week-chip.active .chip-check{background:#fff;color:var(--accent)}.strip-arrow{flex:0 0 auto;width:30px;height:46px;border:0;border-radius:8px;background:transparent;color:var(--text-2);font-size:20px;line-height:1;cursor:pointer}.strip-arrow:hover:not(:disabled){background:var(--panel-soft);color:var(--accent)}.strip-arrow:disabled{opacity:.25;cursor:default}.cycle-progress{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:64px;padding:0 10px;border-left:1px solid var(--border);font-variant-numeric:tabular-nums;line-height:1.15}.cycle-progress-label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.cycle-progress b{font-size:15px}.cycle-progress .muted{font-size:11px}.week-card{margin-top:16px}.week-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:0 4px 10px}.week-title{font-size:18px;font-weight:700;letter-spacing:-.01em}.week-range{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}.week-progress{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:500;color:var(--text-2);background:#0f172a0d}.week-progress.complete{color:var(--ok-strong);background:var(--ok-soft);font-weight:600}.pct-field{display:inline-flex;align-items:center;height:34px;border:1px solid var(--border);border-radius:8px;background:var(--panel);overflow:hidden;transition:border-color .15s,box-shadow .15s}.pct-field:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}.pct-field input{width:58px;height:100%;border:0;border-radius:0;box-shadow:none!important;text-align:right;font-weight:600;font-variant-numeric:tabular-nums;background:transparent}.pct-field span{padding:0 9px 0 3px;color:var(--muted);font-size:12px}.progression-readonly{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 12px;border-radius:999px;background:#0f172a0d;color:var(--muted);font-size:12px;cursor:help}.progression-readonly b{color:var(--text);font-variant-numeric:tabular-nums}.week-note{margin:0 4px 12px;padding:8px 12px;border-radius:var(--radius);background:var(--accent-soft);color:#33447a;font-size:12px}.days{display:flex;flex-direction:column;gap:14px}.day-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);overflow:hidden}.day-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px 10px 16px;border-bottom:1px solid var(--border)}.day-name{font-size:15px;font-weight:700}.day-date{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}.day-total-time,.day-coef{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 9px;border-radius:999px;font-size:12px;white-space:nowrap;cursor:help;font-variant-numeric:tabular-nums}.day-total-time{color:#1e3a8a;background:var(--accent-soft);font-weight:600}.day-coef{color:var(--muted);background:#0f172a0d}.done-btn{gap:8px}.done-box{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:1.5px solid var(--border-strong);border-radius:4px;font-size:11px;font-weight:700;line-height:1}.done-btn.is-done{background:var(--ok);border-color:var(--ok);color:#fff}.done-btn.is-done:hover{background:var(--ok-strong);border-color:var(--ok-strong)}.done-btn.is-done .done-box{border-color:#fff;background:#fff;color:var(--ok)}.day-card.is-done{background:var(--ok-soft);border-color:var(--ok-border)}.day-card.is-done .day-head{border-bottom-color:var(--ok-border)}.day-card.is-done .table-scroll{background:var(--ok-soft)}.day-card.is-done table.grid thead th{background:#d9f0e2}.day-card.is-done table.grid th.group{background:#cde9d8}.day-card.is-done .day-grid td.stick{background:var(--ok-soft)}.day-card.is-done table.grid tbody tr:hover td{background:#dcf1e4}.day-card.is-done table.grid th,.day-card.is-done table.grid td{border-color:#cfe9d9}.empty-day{margin:0;padding:14px 16px;color:var(--muted);font-size:13px}.table-scroll{overflow:auto;background:var(--panel)}table.grid{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}table.grid th,table.grid td{padding:6px 8px;border-bottom:1px solid #eef0f4;text-align:center;vertical-align:middle;white-space:nowrap}table.grid tbody tr:last-child td{border-bottom:0}table.grid thead th{position:sticky;top:0;z-index:2;background:var(--panel-soft);color:var(--muted);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}table.grid th.group{color:var(--text-2);background:#eff2f7;border-bottom:1px solid var(--border)}table.grid th.sub{text-transform:none;letter-spacing:0;font-size:11px}table.grid.compact th,table.grid.compact td{padding:4px 8px}table.grid td.num{font-variant-numeric:tabular-nums}table.grid tbody tr:hover td{background:#f7f9fc}table.grid th.col-start,table.grid td.col-start{border-left:1px solid var(--border)}table.grid th.group.col-start{border-left-color:var(--border-strong)}table.grid td.weight{font-weight:650;color:#1e3a8a}.day-grid td.time-cell{color:var(--text-2)}.day-grid td .muted{color:#b8bec9}.day-grid th.stick,.day-grid td.stick{position:sticky;left:0;text-align:left;min-width:220px;max-width:320px;border-right:1px solid var(--border)}.day-grid th.stick{z-index:3;background:var(--panel-soft)}.day-grid td.stick{z-index:1;background:var(--panel);font-weight:500}.day-grid tbody tr:hover td.stick{background:#f7f9fc}.load-tag{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:500;background:#eef1f5;color:#475467}.load-tag.light{background:#e6f5ec;color:#1f7a3d}.load-tag.medium{background:#fff1db;color:#a35200}.load-tag.heavy{background:#fde7e5;color:#b42318}.load-tag.none{background:transparent;color:#b8bec9}.cell-view{display:inline-flex;align-items:center;gap:4px;max-width:100%}.cell-view.center{justify-content:center}.cell-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-btn{width:22px;height:22px;opacity:.3;font-size:12px}tr:hover .edit-btn,.edit-btn:focus-visible{opacity:1}@media (hover: none){.edit-btn{opacity:.6}}input.cell-input{width:100%;min-width:44px;height:26px;padding:2px 6px;font-size:13px}input.cell-input.tiny{width:64px;min-width:0;text-align:center}input.cell-input.name-input{min-width:200px;text-align:left}td.actions{width:1%;padding:2px 6px}.row-actions{display:inline-flex;gap:2px;opacity:.35;transition:opacity .15s}tr:hover .row-actions,.row-actions:focus-within{opacity:1}@media (hover: none){.row-actions{opacity:1}}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:16px;background:#0f172a66;animation:fade-in .15s ease-out}.modal{width:min(420px,100%);background:var(--panel);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:22px;animation:pop-in .18s ease-out}.modal h3{margin:0 0 8px;font-size:17px}.modal-text{margin:0 0 18px;font-size:13px;color:var(--text-2);line-height:1.55}.modal-actions{display:flex;justify-content:flex-end;gap:8px}.modal-actions .btn.danger{min-width:120px;font-variant-numeric:tabular-nums}.modal-actions .btn.danger:not(:disabled){background:var(--danger);border-color:var(--danger);color:#fff}@keyframes fade-in{0%{opacity:0}}@keyframes pop-in{0%{opacity:0;transform:translateY(6px) scale(.98)}}.tooltip-trigger{border-bottom:1px dashed transparent;cursor:help}.tooltip-trigger.has-hint{border-bottom-color:currentColor}.tooltip-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.tooltip{position:fixed;z-index:120;max-width:min(320px,calc(100vw - 16px));width:max-content;padding:8px 12px;border-radius:8px;background:#101828;color:#fff;font-family:inherit;font-size:12px;font-weight:500;line-height:1.45;letter-spacing:0;text-align:left;text-transform:none;white-space:normal;box-shadow:var(--shadow-lg);pointer-events:none;transform:translate(-50%,-100%);animation:tooltip-in .12s ease-out}.tooltip.tip-bottom{transform:translate(-50%)}@keyframes tooltip-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion: reduce){.tooltip{animation:none}}@media (max-width: 900px){.page{padding:16px 12px 40px}.title-input{flex-basis:100%;order:3;font-size:17px}.week-chips{grid-auto-columns:58px}.cycle-progress{display:none}.day-grid th.stick,.day-grid td.stick{min-width:160px;max-width:200px}.program-row{flex-wrap:wrap}.row-stats{gap:14px 18px}.program-actions{margin-left:0;flex-basis:100%;justify-content:flex-start}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation:none!important;transition:none!important}}body{font-size:14px;line-height:1.5}h1{font-size:24px;font-weight:700;letter-spacing:-.02em}h2{font-size:18px;font-weight:600;letter-spacing:-.01em}h3{font-size:16px;font-weight:600}code,kbd{background:#f2f4f7;color:#344054;border:1px solid var(--border)}.btn{height:40px;padding:0 14px;border-radius:8px;border-color:var(--border-strong);font-size:14px;font-weight:600;box-shadow:var(--shadow-xs)}.btn:hover{background:#f9fafb;border-color:var(--border-strong)}.btn.small{height:36px;padding:0 12px;font-size:13px}.btn:disabled{opacity:.45}input,select{border-color:var(--border-strong);border-radius:8px;box-shadow:var(--shadow-xs)}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-ring)}input::placeholder{color:#667085}.topbar{background:#fff}.brand{font-size:18px}.brand:before{content:"";flex:0 0 auto;width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,#9e77ed,#7f56d9 55%,#6941c6);box-shadow:var(--shadow-xs)}.sidebar-toggle{border-color:var(--border-strong);border-radius:8px;box-shadow:var(--shadow-xs)}.topnav a{font-weight:600}.topnav a.active{box-shadow:inset 0 0 0 1px #7f56d924}.logout-btn{border-color:var(--border-strong);border-radius:8px;font-weight:600;box-shadow:var(--shadow-xs)}.avatar{border:2px solid #ffffff;box-shadow:0 0 0 1px var(--border)}.avatar-fallback{border:1px solid #e9d7fe;box-shadow:none}.program-row{padding:16px 18px;border-radius:var(--radius-lg)}.program-row:hover{border-color:var(--border-strong);box-shadow:var(--shadow)}.row-title h3{font-size:16px;font-weight:600}.row-title .title-btn:hover{color:var(--accent-hover);border-bottom-color:#d6bbfb}.row-stat i{font-size:11px;letter-spacing:.06em}.row-stat b{font-size:15px;font-weight:600}.error{background:#fef3f2;border-color:#fecdca;color:#b42318}.notice{background:#fffaeb;border-color:#fedf89;color:#b54708}.badge{font-weight:600}.badge.soft{background:#f2f4f7;color:#344054}.status{background:#f2f4f7;font-weight:600}.status.dirty{background:#fffaeb}.week-progress{background:#f2f4f7;font-weight:600}.progression-readonly,.day-coef{background:#f2f4f7}.week-note{color:#42307d}.week-strip{background:#fff;-webkit-backdrop-filter:none;backdrop-filter:none}.week-chip{border-radius:8px}.chip-bar{background:#eaecf0}.week-chip.active{box-shadow:0 2px 8px #7f56d947}.week-chip.active .chip-check{color:var(--accent-hover)}.strip-arrow{border-radius:8px}.day-head{padding:12px 14px 12px 18px}.day-name{font-size:16px;font-weight:600}.day-total-time{color:#42307d;background:var(--accent-soft)}.day-total-time,.day-coef{height:26px;font-weight:600}table.grid th,table.grid td{border-bottom-color:var(--border);padding:7px 8px}table.grid thead th{background:#f9fafb;color:var(--muted);letter-spacing:.05em}table.grid th.group{background:#f2f4f7;color:var(--text-2)}table.grid tbody tr:hover td,.day-grid tbody tr:hover td.stick,.day-grid thead th,.day-grid th.stick{background:#f9fafb}.day-grid td .muted{color:#98a2b3}table.grid td.weight{color:#53389e}.load-tag{background:#f2f4f7;color:#344054;font-weight:600}.load-tag.light{background:#ecfdf3;color:#027a48}.load-tag.medium{background:#fffaeb;color:#b54708}.load-tag.heavy{background:#fef3f2;color:#b42318}.load-tag.none{background:transparent;color:#98a2b3}.login-wrap{background:radial-gradient(circle at 18% 12%,#f4ebff 0%,var(--bg) 58%)}.login-card{border-radius:16px;padding:32px;box-shadow:var(--shadow-lg)}.login-card h1{font-size:28px}.login-form label{color:var(--text-2);font-weight:500}.login-form input,.login-form .btn.primary{height:42px}.btn.google{height:42px;border-color:var(--border-strong)}.help-section{padding:20px}.formula-box{background:#f9fafb;border:1px solid var(--border)}.modal{border-radius:16px;padding:24px}.modal-backdrop{background:#10182880;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}@media (max-width: 900px){.topbar{position:fixed;top:0;left:0;bottom:0;width:min(300px,86vw);height:100vh;padding:16px 12px;box-shadow:var(--shadow-lg);transform:translate(-100%);z-index:60}.sidebar-open .topbar{transform:translate(0)}.sidebar-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#10182873;z-index:55;animation:fade-in .15s ease}.mobile-bar{display:flex;align-items:center;gap:10px;height:56px;padding:0 12px;background:#fff;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:30}.mobile-bar .brand{font-size:16px}.mobile-bar .avatar{width:28px;height:28px}.mobile-menu{width:32px;height:32px;border:1px solid var(--border-strong);background:var(--panel)}.sidebar-toggle{display:none}.sidebar-close{display:inline-flex}.week-strip{top:64px}.title-input{order:1;flex:1 1 220px;font-size:17px}.back{order:0}.status{order:2}.field-inline.start-date{order:3}.editor-head .spacer{display:none}}
