:root{--brand-50: #f0f5f8;--brand-100: #dde8ee;--brand-200: #bcd0dc;--brand-300: #8fb0c3;--brand-400: #5c88a3;--brand-500: #2e5266;--brand-600: #274655;--brand-700: #1f3846;--brand-800: #182b36;--brand-900: #101d25;--brand: var(--brand-500);--brand-hover: var(--brand-600);--brand-ink: var(--brand-700);--brand-soft: var(--brand-50);--brand-soft-2: var(--brand-100);--brand-line: var(--brand-200);--accent-50: #fffbeb;--accent-100: #fef3c7;--accent-200: #fde68a;--accent-300: #fcd34d;--accent-400: #fbbf24;--accent-500: #f59e0b;--accent-600: #d97706;--accent-700: #b45309;--accent-800: #92400e;--accent: var(--accent-600);--accent-hover: var(--accent-700);--accent-soft: var(--accent-50);--n-0: #ffffff;--n-50: #f8fafc;--n-100: #f1f5f9;--n-200: #e6ebf1;--n-300: #cfd8e3;--n-400: #94a3b8;--n-500: #64748b;--n-600: #475569;--n-700: #334155;--n-800: #1e293b;--n-900: #0f172a;--bg: #eef2f7;--bg-tint-1: rgba(46, 82, 102, .07);--bg-tint-2: rgba(217, 119, 6, .05);--surface: var(--n-0);--surface-2: var(--n-50);--surface-3: var(--n-100);--surface-inset: #f7f9fc;--border: var(--n-200);--border-strong: var(--n-300);--border-hair: rgba(15, 23, 42, .06);--text: var(--n-900);--text-2: var(--n-600);--text-3: #8592a3;--text-on-brand: #ffffff;--text-on-brand-2: rgba(255, 255, 255, .72);--ok: #059669;--ok-bg: #dcfce7;--ok-text: #065f46;--ok-line: #a7f3d0;--warn: #d97706;--warn-bg: #fef3c7;--warn-text: #92400e;--warn-line: #fcd34d;--danger: #dc2626;--danger-bg: #fee2e2;--danger-text: #b91c1c;--danger-line: #fecaca;--info: #2563eb;--info-bg: #dbeafe;--info-text: #1e40af;--info-line: #bfdbfe;--muted-bg: var(--n-100);--muted-text: var(--n-600);--violet-bg: #ede9fe;--violet-text: #5b21b6;--skip-bg: #e9edf2;--help-ink: #422006;--table-head: #eef2f7;--grid-head: #e7edf3;--grid-month: #dae2ea;--current-head-bg: #fde68a;--current-col-bg: rgba(253, 230, 138, .5);--toast-bg: #1e293b;--toast-bg-2: #16212f;--scrollbar: #bcc7d6;--scrollbar-hover: #9dabbd;--stage-a: #7c3aed;--stage-b: #059669;--stage-c: #ca8a04;--stage-d: #ea580c;--stage-e: #2563eb;--stage-f: #dc2626;--stage-g: #475569;--stage-a-soft: #f5f0ff;--stage-b-soft: #ecfdf5;--stage-c-soft: #fefce8;--stage-d-soft: #fff7ed;--stage-e-soft: #eff6ff;--stage-f-soft: #fef2f2;--stage-g-soft: #f4f7fa;--font: "Inter", "Segoe UI", system-ui, -apple-system, Roboto, Arial, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Consolas, monospace;--fs-2xs: 10.5px;--fs-xs: 11.5px;--fs-sm: 12.5px;--fs-base: 14px;--fs-md: 15px;--fs-lg: 17px;--fs-xl: 20px;--fs-2xl: 25px;--fs-3xl: 32px;--lh-tight: 1.2;--lh: 1.5;--tracking-caps: .06em;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-7: 32px;--sp-8: 40px;--r-xs: 6px;--r-sm: 9px;--r: 14px;--r-lg: 18px;--r-xl: 24px;--pill: 999px;--shadow-xs: 0 1px 2px rgba(16, 29, 37, .05);--shadow-sm: 0 1px 2px rgba(16, 29, 37, .05), 0 2px 6px rgba(16, 29, 37, .05);--shadow: 0 2px 4px rgba(16, 29, 37, .05), 0 8px 20px rgba(16, 29, 37, .08);--shadow-md: 0 4px 8px rgba(16, 29, 37, .06), 0 14px 32px rgba(16, 29, 37, .1);--shadow-lg: 0 12px 24px rgba(16, 29, 37, .12), 0 32px 64px rgba(16, 29, 37, .18);--shadow-brand: 0 6px 18px rgba(46, 82, 102, .28);--shadow-accent: 0 4px 14px rgba(217, 119, 6, .3);--ring: 0 0 0 3px rgba(46, 82, 102, .2);--ring-accent: 0 0 0 3px rgba(217, 119, 6, .28);--ring-danger: 0 0 0 3px rgba(220, 38, 38, .22);--ease: cubic-bezier(.2, .8, .3, 1);--t-fast: .12s var(--ease);--t: .18s var(--ease);--t-slow: .32s var(--ease);--page-max: 1500px;--page-pad: var(--sp-5);--appbar-h: 62px;--control-h: 36px;--control-h-sm: 30px;color-scheme:light}:root[data-theme=dark]{color-scheme:dark;--n-0: #0f1a24;--n-50: #14202b;--n-100: #1a2733;--n-200: #243343;--n-300: #33475b;--n-400: #6f8296;--n-500: #94a6b8;--n-600: #b3c2d0;--n-700: #d4dde6;--n-800: #e7eef4;--n-900: #f3f8fc;--bg: #0b141d;--bg-tint-1: rgba(93, 141, 168, .14);--bg-tint-2: rgba(217, 119, 6, .1);--surface: #131f2a;--surface-2: #17242f;--surface-3: #1d2b38;--surface-inset: #101b24;--border: #243544;--border-strong: #33495c;--border-hair: rgba(255, 255, 255, .07);--text: #eaf1f7;--text-2: #a9bacb;--text-3: #7f92a5;--brand-ink: #9cc0d6;--brand-soft: #172a35;--brand-soft-2: #1e3441;--brand-line: #2d4859;--ok: #34d399;--ok-bg: #10291f;--ok-text: #6ee7b7;--ok-line: #1e5340;--warn: #fbbf24;--warn-bg: #2d2211;--warn-text: #fcd34d;--warn-line: #55401a;--danger: #f87171;--danger-bg: #2f1719;--danger-text: #fca5a5;--danger-line: #582427;--info: #60a5fa;--info-bg: #152640;--info-text: #93c5fd;--info-line: #23436e;--muted-bg: #1d2b38;--muted-text: #a9bacb;--violet-bg: #241d3f;--violet-text: #c4b5fd;--skip-bg: #1e2a35;--help-ink: #fde68a;--table-head: #18242f;--grid-head: #1a2833;--grid-month: #21313f;--current-head-bg: #3c3016;--current-col-bg: rgba(251, 191, 36, .12);--toast-bg: #223042;--toast-bg-2: #16212f;--scrollbar: #33495c;--scrollbar-hover: #46617a;--stage-a-soft: #221a38;--stage-b-soft: #0e2a22;--stage-c-soft: #2a2410;--stage-d-soft: #2d1d10;--stage-e-soft: #131f38;--stage-f-soft: #2d1618;--stage-g-soft: #1b2836;--shadow-xs: 0 1px 2px rgba(0, 0, 0, .4);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .3);--shadow: 0 2px 6px rgba(0, 0, 0, .45), 0 10px 24px rgba(0, 0, 0, .4);--shadow-md: 0 6px 14px rgba(0, 0, 0, .5), 0 18px 40px rgba(0, 0, 0, .45);--shadow-lg: 0 16px 32px rgba(0, 0, 0, .55), 0 40px 80px rgba(0, 0, 0, .6);--ring: 0 0 0 3px rgba(140, 190, 216, .28)}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{margin:0;min-height:100vh;background-color:var(--bg);background-image:radial-gradient(920px 420px at 8% -8%,var(--bg-tint-1),transparent 70%),radial-gradient(760px 380px at 96% -12%,var(--bg-tint-2),transparent 72%);background-attachment:fixed;color:var(--text);font-family:var(--font);font-size:var(--fs-base);line-height:var(--lh);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"cv02","cv03","cv04","ss01"}#root{min-height:100vh}main{max-width:var(--page-max);margin:0 auto;padding:var(--sp-6) var(--page-pad) var(--sp-8)}h1,h2,h3,h4{line-height:var(--lh-tight);letter-spacing:-.015em;color:var(--text);font-weight:700}a{color:var(--brand);text-decoration-color:color-mix(in srgb,var(--brand) 35%,transparent);text-underline-offset:2px}.progress-label,.stat-card .value,.node-table td,.report-table td,.mstone-table{font-variant-numeric:tabular-nums}:focus-visible{outline:none;box-shadow:var(--ring);border-radius:var(--r-xs)}::selection{background:#d9770638}::placeholder{color:var(--text-3)}*{scrollbar-width:thin;scrollbar-color:var(--scrollbar) transparent}*::-webkit-scrollbar{width:11px;height:11px}*::-webkit-scrollbar-thumb{background:var(--scrollbar);border-radius:var(--pill);border:3px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-hover);background-clip:content-box;border:3px solid transparent}*::-webkit-scrollbar-track{background:transparent}.empty-state{text-align:center;color:var(--text-2);padding:var(--sp-8) var(--sp-5);font-size:var(--fs-base)}.hint{font-weight:400;font-style:normal;color:var(--text-3);margin-left:var(--sp-2);font-size:var(--fs-sm)}.help-text{background:linear-gradient(180deg,var(--warn-bg),var(--surface));border:1px solid var(--warn-line);border-left:3px solid var(--accent-400);padding:var(--sp-3) var(--sp-4);font-size:var(--fs-sm);border-radius:var(--r-sm);margin-bottom:var(--sp-4);color:var(--warn-text);box-shadow:var(--shadow-xs)}.help-text strong{color:var(--help-ink)}.computed-note{margin-top:var(--sp-3);font-size:var(--fs-sm);color:var(--text-2);background:var(--surface-inset);padding:var(--sp-3) var(--sp-3);border-radius:var(--r-sm);border-left:3px solid var(--border-strong)}.back-link{display:inline-flex;align-items:center;gap:var(--sp-1);color:var(--text-2);margin-bottom:var(--sp-3);text-decoration:none;font-size:var(--fs-sm);font-weight:600;padding:5px 10px 5px 8px;border-radius:var(--pill);background:color-mix(in srgb,var(--surface) 70%,transparent);border:1px solid var(--border);transition:color var(--t),border-color var(--t),background var(--t),transform var(--t)}.back-link:hover{color:var(--brand);border-color:var(--brand-line);background:var(--surface);transform:translate(-2px)}.late-inline,.late-text,.due-today{color:var(--danger-text);font-weight:700}.late-text,.due-today{text-align:center}.due-upcoming{color:var(--brand);font-weight:600}@keyframes fade-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes pop-in{0%{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:var(--control-h);padding:0 var(--sp-4);border:1px solid var(--border-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--n-700);font-family:inherit;font-size:var(--fs-sm);font-weight:600;line-height:1;letter-spacing:.01em;text-decoration:none;white-space:nowrap;cursor:pointer;box-shadow:var(--shadow-xs);transition:background var(--t),color var(--t),border-color var(--t),box-shadow var(--t),transform var(--t-fast)}.btn:hover{background:var(--surface-2);border-color:var(--brand-300);color:var(--brand-ink)}.btn:active{transform:translateY(1px);box-shadow:none}.btn:focus-visible{outline:none;box-shadow:var(--ring)}.btn:disabled,.btn[aria-disabled=true]{opacity:.55;cursor:not-allowed;transform:none;box-shadow:none}.btn.primary{background:linear-gradient(180deg,var(--accent-500),var(--accent-600));border-color:transparent;color:#fff;box-shadow:var(--shadow-accent)}.btn.primary:hover{background:linear-gradient(180deg,var(--accent-600),var(--accent-700));border-color:transparent;color:#fff;box-shadow:0 6px 18px #d9770661}.btn.action-btn{background:var(--surface);border-color:var(--border-strong);color:var(--n-700)}.btn.action-btn:hover{border-color:var(--brand-300);color:var(--brand-ink);background:var(--brand-soft)}.btn.ghost{background:transparent;border-color:transparent;color:var(--n-600);box-shadow:none}.btn.ghost:hover{background:var(--n-100);border-color:transparent;color:var(--n-800)}.btn.danger,.btn.danger-btn{color:var(--danger-text);border-color:var(--danger-line);background:var(--surface)}.btn.danger:hover,.btn.danger-btn:hover{background:var(--danger-bg);border-color:var(--danger);color:var(--danger-text)}.btn.danger:focus-visible,.btn.danger-btn:focus-visible{box-shadow:var(--ring-danger)}.btn.sm{min-height:var(--control-h-sm);padding:0 var(--sp-3);font-size:var(--fs-xs);border-radius:var(--r-xs)}.btn.compact-btn{padding:0 var(--sp-3);max-width:110px}.file-btn{cursor:pointer}.btn.icon-btn{width:var(--control-h-sm);min-width:var(--control-h-sm);height:var(--control-h-sm);min-height:var(--control-h-sm);padding:0;border-radius:var(--pill)}.btn.icon-btn svg{display:block}.appbar{position:sticky;top:0;z-index:50;color:var(--text-on-brand);background:radial-gradient(120% 180% at 0% 0%,rgba(255,255,255,.1),transparent 55%),linear-gradient(105deg,var(--brand-700),var(--brand-500) 55%,#34607a);box-shadow:0 1px #ffffff0f inset,0 8px 24px #101d252e}.appbar-inner{max-width:var(--page-max);min-height:var(--appbar-h);margin:0 auto;padding:var(--sp-2) var(--page-pad);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap}.brand{display:inline-flex;align-items:center;gap:var(--sp-3);color:inherit;text-decoration:none;border-radius:var(--r-sm);padding:var(--sp-1);margin:calc(var(--sp-1) * -1);transition:opacity var(--t)}.brand:hover{opacity:.92}.brand-mark{display:grid;place-items:center;width:34px;height:34px;flex:none;border-radius:11px;background:linear-gradient(160deg,var(--accent-400),var(--accent-600));color:#fff;font-size:var(--fs-md);font-weight:800;letter-spacing:-.02em;box-shadow:0 4px 12px #d9770666,inset 0 1px #fff6}.brand-text{display:flex;flex-direction:column;gap:1px;min-width:0}.appbar h1,.brand-title{margin:0;font-size:var(--fs-md);font-weight:700;letter-spacing:-.01em;color:#fff;white-space:nowrap}.subtitle,.brand-sub{font-size:var(--fs-xs);color:var(--text-on-brand-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46ch}.nav-tabs{display:flex;align-items:center;gap:2px;padding:3px;border-radius:var(--pill);background:#ffffff1a;border:1px solid rgba(255,255,255,.14);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.nav-tab{position:relative;display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--pill);color:#ffffffd1;font-size:var(--fs-sm);font-weight:600;text-decoration:none;white-space:nowrap;transition:background var(--t),color var(--t)}.nav-tab:hover{background:#ffffff1f;color:#fff}.nav-tab.active{background:#fff;color:var(--brand-700);box-shadow:0 2px 8px #101d2538}.toolbar{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.appbar .btn.ghost{background:#ffffff14;border-color:#ffffff47;color:#fff;min-height:var(--control-h-sm);padding:0 var(--sp-3);font-size:var(--fs-sm)}.appbar .btn.ghost:hover{background:#ffffff2e;border-color:#ffffff80;color:#fff}.appbar .btn.ghost.active{background:#fff;color:var(--brand-700);border-color:#fff}.appbar .btn:focus-visible{box-shadow:0 0 0 3px #ffffff73}.user-chip{display:inline-flex;align-items:center;gap:var(--sp-2);padding:4px 10px 4px 4px;border-radius:var(--pill);background:#ffffff1a;border:1px solid rgba(255,255,255,.16);font-size:var(--fs-sm);max-width:320px}.user-avatar{display:grid;place-items:center;width:26px;height:26px;flex:none;border-radius:50%;background:linear-gradient(160deg,#fff,#dbe6ee);color:var(--brand-700);font-size:var(--fs-xs);font-weight:800;text-transform:uppercase}.user-email{color:#fff;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:22ch}@media (max-width: 1180px){.brand-sub{display:none}}@media (max-width: 900px){.appbar-inner{justify-content:flex-start}.nav-tabs{order:3;width:100%;overflow-x:auto;justify-content:flex-start;border-radius:var(--r)}.toolbar{margin-left:auto}.user-email{display:none}}.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--sp-3);margin-bottom:var(--sp-5)}.stat-card{position:relative;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-4);box-shadow:var(--shadow-sm);transition:box-shadow var(--t),transform var(--t),border-color var(--t);animation:fade-up var(--t-slow) both}.stat-card:before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:linear-gradient(90deg,var(--brand-400),var(--brand-500) 45%,var(--accent-400));opacity:.9}.stat-card:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--border-strong)}.stat-card .label{display:block;font-size:var(--fs-2xs);color:var(--text-3);text-transform:uppercase;letter-spacing:var(--tracking-caps);font-weight:700}.stat-card .value{font-size:var(--fs-2xl);font-weight:800;letter-spacing:-.02em;color:var(--n-800);margin-top:var(--sp-1);line-height:1.1}.report-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);margin-bottom:var(--sp-5);overflow:hidden;box-shadow:var(--shadow-sm);animation:fade-up var(--t-slow) both}.report-head{padding:var(--sp-3) var(--sp-4);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap;background:linear-gradient(180deg,var(--surface-2),var(--surface));border-bottom:1px solid var(--border)}.report-head .left{display:flex;align-items:baseline;gap:var(--sp-3);flex-wrap:wrap}.report-head h2,.report-head h3{margin:0;font-size:var(--fs-md);font-weight:700;color:var(--n-800)}.report-head .range-label{font-size:var(--fs-sm);color:var(--text-3);font-weight:500}.report-filters{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap}.report-filters .filter-date{display:inline-flex;align-items:center;gap:var(--sp-1);font-size:var(--fs-sm);color:var(--text-2);white-space:nowrap}.report-body{overflow-x:auto}.report-empty{padding:var(--sp-7) var(--sp-4);text-align:center;color:var(--text-3);font-size:var(--fs-sm)}.filter-bar{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-4);flex-wrap:wrap;align-items:center}.filter-bar .filter-label{font-size:var(--fs-2xs);font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:var(--tracking-caps)}.project-header{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-4) var(--sp-5);margin-bottom:var(--sp-4);box-shadow:var(--shadow-sm)}.project-header h2{margin:0 0 var(--sp-1);font-size:var(--fs-xl);letter-spacing:-.02em;color:var(--n-900)}.project-header .meta{display:flex;gap:var(--sp-2) var(--sp-4);flex-wrap:wrap;font-size:var(--fs-sm);color:var(--text-2)}.project-header .meta b{color:var(--n-800)}.project-header .actions{margin-top:var(--sp-3);display:flex;gap:var(--sp-2);flex-wrap:wrap}input,select,textarea{font-family:inherit;color:var(--text);background:var(--surface);transition:border-color var(--t),box-shadow var(--t),background var(--t)}input:focus-visible,select:focus-visible,textarea:focus-visible,input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand-400);box-shadow:var(--ring)}input:disabled,select:disabled,textarea:disabled{background:var(--surface-3);color:var(--text-3);cursor:not-allowed}select{cursor:pointer}label{display:block;font-size:var(--fs-xs);font-weight:700;color:var(--text-2);letter-spacing:.01em;margin:var(--sp-3) 0 6px}.project-filter-bar select,.filter-bar select,.filter-bar input,.report-head select,.mstone-toolbar select,.dashboard-filter-field input,.dashboard-filter-field select,.modal-card input,.modal-card select,.modal-card textarea,.edit-form-layout input,.edit-form-layout select,.create-project-modal input,.create-project-modal select,.login-form input,.notes-textarea,.cat-multiselect-btn,.notes-cell-btn{border:1px solid var(--border-strong);border-radius:var(--r-xs);background:var(--surface);font-size:var(--fs-sm);color:var(--text)}.project-filter-bar select,.filter-bar select,.filter-bar input,.report-head select,.mstone-toolbar select,.dashboard-filter-field input,.dashboard-filter-field select,.cat-multiselect-btn,.modal-card input,.modal-card select,.edit-form-layout input,.edit-form-layout select,.create-project-modal input,.create-project-modal select{height:var(--control-h);padding:0 var(--sp-3)}input[readonly]{background:var(--surface-3);color:var(--text-2);cursor:default}input[type=date]{font-variant-numeric:tabular-nums}input[type=date]::-webkit-calendar-picker-indicator{opacity:.45;cursor:pointer;transition:opacity var(--t)}input[type=date]:hover::-webkit-calendar-picker-indicator{opacity:.9}input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.row2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3);align-items:end}.dur-stepper{display:inline-flex;align-items:center;border:1px solid var(--border-strong);border-radius:var(--r-xs);overflow:hidden;background:var(--surface);box-shadow:var(--shadow-xs);transition:border-color var(--t),box-shadow var(--t)}.dur-stepper:focus-within{border-color:var(--brand-400);box-shadow:var(--ring)}.dur-stepper button{border:none;background:var(--surface-3);color:var(--n-700);font-weight:700;width:26px;height:28px;cursor:pointer;font-family:inherit;font-size:var(--fs-base);line-height:1;transition:background var(--t),color var(--t)}.dur-stepper button:hover{background:var(--brand-soft-2);color:var(--brand-ink)}.dur-stepper button:disabled{opacity:.5;cursor:not-allowed;background:var(--surface-3);color:var(--n-500)}.dur-stepper input{width:52px;border:none;text-align:center;font-size:var(--fs-sm);font-weight:700;padding:0;background:transparent;font-variant-numeric:tabular-nums}.dur-stepper input:focus,.dur-stepper input:focus-visible{outline:none;box-shadow:none}.node-table,.report-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}.node-table{table-layout:fixed}.node-table th,.report-table th{position:relative;background:linear-gradient(180deg,var(--surface-2),var(--table-head));color:var(--text-3);font-size:var(--fs-2xs);font-weight:700;text-transform:uppercase;letter-spacing:var(--tracking-caps);text-align:left;padding:9px 10px;border-bottom:1px solid var(--border);white-space:nowrap}.node-table td,.report-table td{padding:8px 10px;text-align:left;border-top:1px solid var(--border-hair);vertical-align:middle;color:var(--n-700)}.report-table td{vertical-align:top}.node-table tbody tr,.report-table tbody tr{transition:background var(--t),box-shadow var(--t)}.node-table tbody tr:hover,.report-table tbody tr:hover{background:var(--brand-soft)}.report-table tbody tr{cursor:pointer}.report-table .col-due{white-space:nowrap}.node-table tbody tr.row-done{opacity:.55}.node-table tbody tr.row-done:hover{opacity:1}.node-table td.name-skipped{text-decoration:line-through;color:var(--text-3)}.node-id{display:inline-block;font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:700;color:var(--brand-ink);background:var(--brand-soft);border:1px solid var(--brand-soft-2);border-radius:var(--r-xs);padding:2px 6px;letter-spacing:.02em}.ed-cell{width:100%;min-width:60px;border:1px solid transparent;border-radius:var(--r-xs);padding:5px 7px;font-size:var(--fs-sm);font-family:inherit;background:var(--surface-inset);color:var(--text)}.ed-cell:hover:not(:disabled){border-color:var(--border-strong);background:var(--surface)}.node-table .ed-cell:focus,.node-table .ed-cell:focus-visible{outline:none;border-color:var(--brand-400);background:var(--surface);box-shadow:var(--ring)}.node-table select.ed-cell{cursor:pointer}.node-table input[type=date].ed-cell{padding:5px 3px;font-size:var(--fs-xs);letter-spacing:-.01em}.ed-cell:disabled{background:transparent;border-color:transparent;color:var(--text-2)}.node-table select.stsel-done{background:var(--ok-bg);border-color:var(--ok-line);color:var(--ok-text);font-weight:700}.node-table select.stsel-doing{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn-text);font-weight:700}.col-id{width:54px}.col-name{width:200px}.col-dept{width:80px}.col-pic{width:140px}.col-dur{width:100px;text-align:center}.col-status{width:108px}.col-date{width:126px}.col-late{width:60px;text-align:center}.col-deps{width:80px;font-size:var(--fs-2xs);color:var(--text-3);font-family:var(--font-mono)}.col-notes,.col-att{width:130px}.status-pill,.role-badge,.badge,.count-pill,.fb-count{display:inline-flex;align-items:center;gap:4px;border-radius:var(--pill);font-size:var(--fs-2xs);font-weight:700;letter-spacing:.02em;white-space:nowrap;padding:3px 9px;line-height:1.35}.status-todo{background:var(--muted-bg);color:var(--muted-text)}.status-doing{background:var(--warn-bg);color:var(--warn-text)}.status-done{background:var(--ok-bg);color:var(--ok-text)}.status-pause{background:var(--danger-bg);color:var(--danger-text)}.status-skip{background:var(--skip-bg);color:var(--n-500);font-style:italic}.badge-late{background:var(--danger-bg);color:var(--danger-text)}.badge-ok{background:var(--ok-bg);color:var(--ok-text)}.badge-done{background:var(--violet-bg);color:var(--violet-text)}.role-badge{font-size:var(--fs-2xs)}.role-PIC{background:var(--info-bg);color:var(--info-text)}.role-manager{background:var(--ok-bg);color:var(--ok-text)}.role-viewer{background:#ffffffdb;color:var(--n-600)}.count-pill{background:linear-gradient(180deg,var(--accent-500),var(--accent-600));color:#fff;box-shadow:0 2px 6px #d9770652}.fb-count{background:var(--surface-3);color:var(--text-2)}.pic-cell{display:flex;gap:3px;align-items:center}.pic-cell .ed-cell{flex:1;min-width:0}.pic-multi{flex-wrap:wrap;gap:4px;align-items:center}.pic-chip{display:inline-flex;align-items:center;gap:3px;max-width:100%;background:var(--info-bg);border:1px solid var(--info-line);border-radius:var(--pill);padding:1px 4px 1px 9px;font-size:var(--fs-xs);font-weight:600;color:var(--info-text);line-height:1.5;transition:border-color var(--t),background var(--t)}.pic-chip:hover{background:color-mix(in srgb,var(--info-bg) 78%,var(--info-line))}.pic-chip-name{overflow-wrap:anywhere;min-width:0}.pic-chip .pic-x{flex:none;border:none;background:transparent;color:color-mix(in srgb,var(--info-text) 62%,transparent);cursor:pointer;font-size:var(--fs-sm);line-height:1;padding:0 2px;border-radius:var(--pill);transition:color var(--t),background var(--t)}.pic-chip .pic-x:hover{color:var(--danger);background:#dc26261a}.pic-cell .pic-add-input{flex:1 1 70px;width:auto;min-width:60px;border:none;border-bottom:1px dashed var(--border-strong);border-radius:0;background:transparent;padding:2px;font-size:var(--fs-xs);color:var(--text-2)}.pic-cell .pic-add-input:focus,.pic-cell .pic-add-input:focus-visible{outline:none;border-bottom-color:var(--brand);box-shadow:none}.att-chip{display:inline-flex;align-items:center;gap:3px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-xs);padding:2px 5px;margin:1px;font-size:var(--fs-2xs);max-width:118px;transition:border-color var(--t),background var(--t)}.att-chip:hover{border-color:var(--brand-300);background:var(--brand-soft)}.att-chip a{color:var(--info);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.att-chip a:hover{text-decoration:underline}.att-x{border:none;background:none;color:var(--n-400);cursor:pointer;font-size:var(--fs-sm);line-height:1;padding:0 1px;border-radius:var(--pill);transition:color var(--t)}.att-x:hover{color:var(--danger)}.att-add{min-height:24px;padding:0 8px;cursor:pointer;font-size:var(--fs-2xs)}.att-add.is-disabled{opacity:.5;pointer-events:none}.cat-multiselect,.code-combobox{position:relative}.cat-multiselect.stage-filter{min-width:220px}.cat-multiselect-btn{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);cursor:pointer;text-align:left;font-family:inherit;font-weight:500}.cat-multiselect-btn:hover{border-color:var(--brand-300)}.cat-caret{color:var(--text-3);font-size:var(--fs-2xs);transition:transform var(--t)}.cat-multiselect-menu,.code-combobox-menu{position:absolute;z-index:20;top:calc(100% + 6px);left:0;right:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);box-shadow:var(--shadow-md);padding:6px;max-height:260px;overflow:auto;animation:pop-in var(--t) both}.cat-multiselect-item{display:flex;align-items:center;gap:var(--sp-2);padding:7px 8px;border-radius:var(--r-xs);font-size:var(--fs-sm);color:var(--n-700);cursor:pointer;transition:background var(--t)}.cat-multiselect-item:hover{background:var(--brand-soft)}.cat-multiselect-item input[type=checkbox]{flex:none;width:15px;height:15px;margin:0;padding:0;border:none;border-radius:0;cursor:pointer;accent-color:var(--brand)}.cat-multiselect .cat-multiselect-item{margin:0;font-size:var(--fs-sm);font-weight:500;text-transform:none;letter-spacing:normal;text-align:left;color:var(--n-700)}.code-combobox-item{display:flex;flex-direction:column;gap:2px;width:100%;text-align:left;padding:7px 8px;border:none;background:none;border-radius:var(--r-xs);font-family:inherit;font-size:var(--fs-sm);color:var(--n-700);cursor:pointer;transition:background var(--t)}.code-combobox-item:hover{background:var(--brand-soft)}.code-combobox-item strong{font-size:var(--fs-sm);color:var(--n-800)}.code-combobox-item span{font-size:var(--fs-xs);color:var(--text-2)}.notes-cell-btn{display:block;width:100%;max-width:220px;text-align:left;padding:6px 8px;cursor:pointer;font:inherit;font-size:var(--fs-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-color:transparent;background:var(--surface-inset);transition:border-color var(--t),background var(--t),color var(--t)}.notes-cell-btn:hover{border-color:var(--border-strong);background:var(--surface)}.notes-placeholder{color:var(--text-3)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:var(--sp-5);background:#0a141c85;backdrop-filter:blur(4px) saturate(1.1);-webkit-backdrop-filter:blur(4px) saturate(1.1);animation:fade-in var(--t) both}.modal-card{width:min(680px,92vw);max-height:92vh;overflow:auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-4);box-shadow:var(--shadow-lg);animation:pop-in var(--t-slow) both}.modal-sub{font-size:var(--fs-sm);color:var(--text-2);margin-top:2px;margin-bottom:var(--sp-3)}.modal-card input,.modal-card select,.modal-card textarea{width:100%;padding:8px 10px}.modal-actions{margin-top:var(--sp-4);display:flex;justify-content:flex-end;gap:var(--sp-2)}.create-project-modal,.edit-project-modal{width:min(760px,94vw);padding:0;overflow:hidden;border-radius:var(--r-lg);box-shadow:var(--shadow-lg)}.create-modal-title,.edit-modal-title{margin:0;padding:var(--sp-5) var(--sp-5) 2px;font-size:var(--fs-2xl);line-height:var(--lh-tight);letter-spacing:-.02em;color:var(--n-900)}.create-modal-sub,.edit-modal-sub{margin:0;padding:0 var(--sp-5) var(--sp-4);color:var(--text-2);font-size:var(--fs-sm)}.create-form-layout,.edit-form-layout{padding:0 var(--sp-5) var(--sp-3);display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3) var(--sp-4)}.create-row-full,.edit-row-full{grid-column:1 / -1}.create-project-modal label,.edit-form-layout label{margin:0 0 5px;color:var(--text-2);font-size:var(--fs-xs);font-weight:700}.create-project-modal input,.create-project-modal select,.edit-form-layout input,.edit-form-layout select{width:100%}.create-form-layout .field-owner input,.create-form-layout .field-start-date input,.edit-owner-field,.edit-start-field,.edit-owner-field input,.edit-start-field input{max-width:320px}.create-project-modal .modal-actions,.edit-modal-actions{margin-top:0;padding:var(--sp-3) var(--sp-5) var(--sp-4);background:var(--surface-2);border-top:1px solid var(--border)}.edit-modal-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}.edit-modal-actions-right{display:inline-flex;gap:var(--sp-2);align-items:center}@media (max-width: 980px){.create-form-layout,.edit-form-layout{grid-template-columns:1fr}.create-row-full,.edit-row-full{grid-column:auto}.edit-owner-field,.edit-start-field,.edit-owner-field input,.edit-start-field input{max-width:100%}}.notes-modal{width:min(560px,94vw);padding:var(--sp-5)}.notes-modal-title{margin:0 0 2px;font-size:var(--fs-lg)}.notes-modal-sub{margin:0 0 var(--sp-3);font-size:var(--fs-sm);color:var(--text-2);font-weight:600}.notes-textarea{width:100%;min-height:180px;resize:vertical;padding:var(--sp-3);font:inherit;font-size:var(--fs-base);line-height:var(--lh)}.img-preview-card{background:var(--surface);border-radius:var(--r-lg);padding:var(--sp-3);width:min(90vw,900px);max-height:90vh;display:flex;flex-direction:column;gap:var(--sp-3);box-shadow:var(--shadow-lg);animation:pop-in var(--t-slow) both}.img-preview-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3)}.img-preview-name{font-size:var(--fs-sm);font-weight:600;color:var(--n-700);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.img-preview-actions{display:flex;align-items:center;gap:var(--sp-2);flex-shrink:0}.img-preview-img{max-width:100%;max-height:calc(90vh - 70px);object-fit:contain;border-radius:var(--r-sm);margin:0 auto;background:var(--surface-3)}.toast{position:fixed;bottom:var(--sp-6);right:var(--sp-6);z-index:200;max-width:min(420px,calc(100vw - 48px));padding:11px var(--sp-4);border-radius:var(--r-sm);background:linear-gradient(180deg,var(--toast-bg),var(--toast-bg-2));color:#fff;font-size:var(--fs-sm);font-weight:500;line-height:1.45;box-shadow:var(--shadow-lg);border:1px solid rgba(255,255,255,.08);opacity:0;transform:translateY(14px) scale(.98);transition:opacity var(--t-slow),transform var(--t-slow);pointer-events:none}.toast.show{opacity:1;transform:none}.project-filter-bar{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-4);color:var(--text-2);font-size:var(--fs-sm);flex-wrap:wrap}.dashboard-filters{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-4);margin-bottom:var(--sp-4);display:grid;grid-template-columns:minmax(200px,280px) minmax(160px,220px) minmax(190px,240px) max-content;justify-content:start;gap:var(--sp-3) var(--sp-4);align-items:end;box-shadow:var(--shadow-sm)}.dashboard-filter-field{display:grid;gap:5px}.dashboard-filter-field label{margin:0;font-size:var(--fs-2xs);font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:var(--tracking-caps)}.dashboard-filter-field input,.dashboard-filter-field select{width:100%}@media (max-width: 980px){.dashboard-filters{grid-template-columns:1fr}}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:var(--sp-4)}.project-card{position:relative;display:block;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-4) var(--sp-4) var(--sp-4);text-decoration:none;color:inherit;box-shadow:var(--shadow-sm);transition:border-color var(--t),box-shadow var(--t),transform var(--t);animation:fade-up var(--t-slow) both}.project-card:before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:linear-gradient(90deg,var(--brand-400),var(--accent-400));opacity:0;transition:opacity var(--t)}.project-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:var(--brand-line)}.project-card:hover:before{opacity:1}.project-card:focus-visible{outline:none;box-shadow:var(--ring),var(--shadow);border-color:var(--brand-300)}.pid{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--brand-ink);font-weight:700;letter-spacing:.04em}.pname{font-size:var(--fs-lg);font-weight:700;letter-spacing:-.015em;color:var(--n-900);margin:5px 0 var(--sp-3);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;padding-right:78px}.pmeta{font-size:var(--fs-xs);color:var(--text-2);display:flex;gap:6px 12px;margin-bottom:var(--sp-4);flex-wrap:wrap}.project-card .badge{position:absolute;top:var(--sp-4);right:var(--sp-4)}.progress-bar{height:8px;border-radius:var(--pill);background:var(--surface-3);overflow:hidden;box-shadow:inset 0 1px 2px #0f172a0f}.progress-bar>div{height:100%;border-radius:var(--pill);background:linear-gradient(90deg,var(--brand-500),#4d829e);box-shadow:0 0 10px #2e526659;transition:width var(--t-slow)}.progress-label{display:flex;justify-content:space-between;font-size:var(--fs-xs);margin-top:6px;color:var(--text-2);font-weight:600}.current-step{background:var(--surface-inset);border:1px solid var(--border);border-left:3px solid var(--accent-400);padding:9px 11px;margin-top:var(--sp-3);border-radius:var(--r-xs);font-size:var(--fs-xs);color:var(--text-2);line-height:1.45}.current-step strong{color:var(--n-800)}.project-detail-page{zoom:.875}.project-info-card{position:relative;overflow:hidden;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-5) var(--sp-6);margin-bottom:var(--sp-4);box-shadow:var(--shadow-sm)}.project-info-card:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:linear-gradient(180deg,var(--brand-400),var(--accent-400))}.project-info-card h2{margin:0 0 var(--sp-2);font-size:var(--fs-3xl);line-height:1.08;letter-spacing:-.03em;color:var(--n-900)}.project-info-meta{display:flex;gap:var(--sp-2) var(--sp-5);flex-wrap:wrap;color:var(--text-2);font-size:var(--fs-base)}.project-info-meta b{color:var(--n-800);font-weight:700}.project-info-actions{margin-top:var(--sp-4);display:flex;gap:var(--sp-2);flex-wrap:wrap}.stage-group{background:var(--surface);border:1px solid var(--border);border-left-width:4px;border-radius:var(--r);margin-bottom:var(--sp-4);overflow:hidden;box-shadow:var(--shadow-sm);animation:fade-up var(--t-slow) both}.stage-A{border-left-color:var(--stage-a)}.stage-B{border-left-color:var(--stage-b)}.stage-C{border-left-color:var(--stage-c)}.stage-D{border-left-color:var(--stage-d)}.stage-E{border-left-color:var(--stage-e)}.stage-F{border-left-color:var(--stage-f)}.stage-G{border-left-color:var(--stage-g)}.stage-header{padding:var(--sp-3) var(--sp-4);font-weight:700;font-size:var(--fs-base);color:var(--n-800);letter-spacing:-.01em;display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);border-bottom:1px solid var(--border)}.stage-header.stage-A{background:linear-gradient(180deg,var(--stage-a-soft),var(--surface))}.stage-header.stage-B{background:linear-gradient(180deg,var(--stage-b-soft),var(--surface))}.stage-header.stage-C{background:linear-gradient(180deg,var(--stage-c-soft),var(--surface))}.stage-header.stage-D{background:linear-gradient(180deg,var(--stage-d-soft),var(--surface))}.stage-header.stage-E{background:linear-gradient(180deg,var(--stage-e-soft),var(--surface))}.stage-header.stage-F{background:linear-gradient(180deg,var(--stage-f-soft),var(--surface))}.stage-header.stage-G{background:linear-gradient(180deg,var(--stage-g-soft),var(--surface))}.stage-progress{font-size:var(--fs-xs);color:var(--text-2);font-weight:600;background:color-mix(in srgb,var(--surface) 70%,transparent);border:1px solid var(--border);border-radius:var(--pill);padding:3px 10px;white-space:nowrap}.node-desc-info{color:var(--text-3);cursor:help;margin-left:4px}.report-table th:first-child,.report-table td:first-child{padding-left:var(--sp-4)}.report-table th:last-child,.report-table td:last-child{padding-right:var(--sp-4)}.report-filters .filter-date input[type=date]{font-size:var(--fs-sm);height:var(--control-h-sm);padding:0 var(--sp-2);border:1px solid var(--border-strong);border-radius:var(--r-xs)}.report-head .btn.sm{min-height:var(--control-h-sm)}.mstone-toolbar{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);flex-wrap:wrap}.mstone-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);overflow:auto;max-height:78vh;box-shadow:var(--shadow-sm)}.mstone-table{border-collapse:separate;border-spacing:0;font-size:var(--fs-xs);width:max-content}.mstone-table th,.mstone-table td{border-right:1px solid var(--border);border-bottom:1px solid var(--border);padding:6px;vertical-align:top}.mstone-table thead th{position:sticky;top:0;background:var(--grid-head);font-weight:700;color:var(--text-2);font-size:var(--fs-2xs);z-index:2}.mstone-col-project{position:sticky;left:0;background:var(--surface);z-index:1;width:150px;min-width:150px;max-width:150px;overflow-wrap:break-word;font-weight:600;color:var(--n-700);box-shadow:1px 0 0 var(--border)}.mstone-table thead th.mstone-col-project{background:var(--grid-head);z-index:4}.mstone-table tbody tr:hover td{background:var(--brand-soft)}.mstone-table tbody tr:hover td.mstone-col-project{background:var(--brand-soft-2)}.mstone-week-col{min-width:48px;text-align:center;font-weight:700}.mstone-week-col .mstone-week-num{font-size:var(--fs-xs)}.mstone-week-col .mstone-week-date{font-size:9px;color:var(--text-3);font-weight:500;display:block}.mstone-week-col.is-current{background:var(--current-head-bg);box-shadow:inset 0 -2px 0 var(--accent-500);color:var(--warn-text)}.mstone-cell{text-align:center;min-height:30px;padding:3px}.mstone-cell.is-current-col{background:var(--current-col-bg)}.mstone-month-bar{background:var(--grid-month);font-weight:800;color:var(--n-600);font-size:var(--fs-2xs);letter-spacing:.04em;text-align:center;padding:3px 6px;height:24px;box-sizing:border-box;top:0;z-index:3}.mstone-table thead th.mstone-week-col{top:24px;z-index:2}.mstone-legend{position:sticky;bottom:0;left:0;z-index:3;background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);padding:var(--sp-3) var(--sp-4);display:flex;gap:var(--sp-4);flex-wrap:wrap;font-size:var(--fs-xs);color:var(--text-2);border-top:1px solid var(--border);align-items:center}.mstone-legend .item{display:inline-flex;align-items:center;gap:var(--sp-1)}.mstone-chip{display:inline-block;padding:3px 6px;border-radius:var(--r-xs);font-size:var(--fs-2xs);font-weight:700;color:#fff;margin:1px;cursor:pointer;line-height:1.15;letter-spacing:.02em;box-shadow:var(--shadow-xs);transition:transform var(--t-fast),box-shadow var(--t-fast),filter var(--t-fast)}.mstone-chip:hover{transform:translateY(-1px) scale(1.06);box-shadow:var(--shadow);filter:saturate(1.15)}.mstone-chip.is-done{opacity:.4;text-decoration:line-through}.mstone-chip.is-late{box-shadow:0 0 0 2px var(--danger-text),var(--shadow-xs)}.mstone-equal .mstone-week-col,.mstone-equal .mstone-cell{width:46px;min-width:46px}.mstone-equal .mstone-cell .mstone-chip{display:block;width:fit-content;margin:2px auto}.mstone-wide .mstone-week-col,.mstone-wide .mstone-cell{width:120px;min-width:120px;max-width:120px}.mstone-equal .mstone-cell .mstone-chip.has-name{width:100%;box-sizing:border-box}.mstone-chip.has-name{padding:4px 5px;line-height:1.3;letter-spacing:0;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mstone-chip-name{font-size:9px;font-weight:500;opacity:.92}.mstone-A{background:linear-gradient(160deg,#8b5cf6,var(--stage-a))}.mstone-B{background:linear-gradient(160deg,#10b981,var(--stage-b))}.mstone-C{background:linear-gradient(160deg,#eab308,var(--stage-c))}.mstone-D{background:linear-gradient(160deg,#f97316,var(--stage-d))}.mstone-E{background:linear-gradient(160deg,#3b82f6,var(--stage-e))}.mstone-F{background:linear-gradient(160deg,#ef4444,var(--stage-f))}.mstone-G{background:linear-gradient(160deg,#64748b,var(--stage-g))}.wf-page{display:flex;flex-direction:column;gap:var(--sp-3)}.wf-head{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:var(--sp-3)}.wf-title h3{margin:0 0 2px;font-size:var(--fs-xl);letter-spacing:-.02em}.wf-sub{color:var(--text-2);font-size:var(--fs-sm)}.wf-tools{display:flex;flex-direction:column;align-items:flex-end;gap:var(--sp-2)}.wf-legend{display:flex;flex-wrap:wrap;gap:4px var(--sp-3);justify-content:flex-end;max-width:640px}.wf-legend-item{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-xs);color:var(--text-2);font-weight:500}.wf-legend-dot{width:10px;height:10px;border-radius:3px;display:inline-block;box-shadow:var(--shadow-xs)}.wf-zoom{display:inline-flex;align-items:center;gap:6px}.wf-zoom-val{font-size:var(--fs-sm);color:var(--text-2);min-width:44px;text-align:center;font-variant-numeric:tabular-nums;font-weight:600}.wf-canvas{overflow:auto;border:1px solid var(--border);border-radius:var(--r);background:linear-gradient(rgba(46,82,102,.05) 1px,transparent 1px) 0 0 / 100% 24px,linear-gradient(90deg,rgba(46,82,102,.05) 1px,transparent 1px) 0 0 / 24px 100%,var(--surface);max-height:calc(100vh - 190px);box-shadow:var(--shadow-sm)}.wf-canvas svg{display:block}.wf-node-code{font-size:13px;font-weight:700}.wf-node-meta{font-size:10px}.wf-node-name{font-size:11px}.wf-node-after{font-size:9.5px}.pic-admin{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-5);box-shadow:var(--shadow-sm)}.pic-admin-head{margin-bottom:var(--sp-4)}.pic-admin-head h2{margin:0 0 var(--sp-1);font-size:var(--fs-xl)}.pic-admin-head .hint{display:block;margin-left:0;color:var(--text-2);font-size:var(--fs-sm);line-height:1.55}.pic-admin-head .hint code{background:var(--surface-3);border:1px solid var(--border);font-family:var(--font-mono);font-size:var(--fs-xs);padding:1px 6px;border-radius:var(--r-xs);color:var(--brand-ink)}.pic-admin-msg{margin-top:var(--sp-2);padding:7px var(--sp-3);background:var(--ok-bg);border:1px solid var(--ok-line);color:var(--ok-text);border-radius:var(--r-xs);font-size:var(--fs-sm);font-weight:600;display:inline-block;animation:fade-up var(--t-slow) both}.pic-admin .node-table{table-layout:auto}.pic-admin .node-table td{vertical-align:middle}.fb-page{max-width:900px}.fb-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-5)}.fb-head h2{margin:0;color:var(--n-900);font-size:var(--fs-2xl);letter-spacing:-.02em}.fb-section{margin-bottom:var(--sp-7)}.fb-section-title{display:flex;align-items:center;gap:var(--sp-2);margin:0 0 var(--sp-3);font-size:var(--fs-md);color:var(--n-700)}.fb-empty{color:var(--text-3);font-size:var(--fs-sm);padding:var(--sp-3) 2px}.fb-list{display:flex;flex-direction:column;gap:var(--sp-3)}.fb-card{display:flex;align-items:flex-start;gap:var(--sp-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-4);box-shadow:var(--shadow-sm);transition:border-color var(--t),box-shadow var(--t);animation:fade-up var(--t-slow) both}.fb-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow)}.fb-card-body{flex:1;min-width:0}.fb-meta{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;font-size:var(--fs-sm);color:var(--text-2);margin-bottom:6px}.fb-meta b{color:var(--n-900);font-size:var(--fs-base)}.fb-time{color:var(--text-3)}.fb-tag{background:var(--surface-3);border-radius:var(--r-xs);padding:1px 8px;font-size:var(--fs-xs);color:var(--text-2);font-weight:600}.fb-rating{font-weight:700}.fb-rating-good{color:var(--ok)}.fb-rating-improve{color:var(--accent-700)}.fb-message{font-size:var(--fs-base);color:var(--n-800);white-space:pre-wrap;word-break:break-word;line-height:1.55}.fb-qa{display:flex;flex-direction:column;gap:6px}.fb-q,.fb-a{font-size:var(--fs-base);color:var(--n-800);white-space:pre-wrap;word-break:break-word;line-height:1.5}.fb-a{color:var(--text-2);background:var(--surface-inset);border:1px solid var(--border);border-radius:var(--r-xs);padding:var(--sp-2) var(--sp-3)}.fb-qa-label{display:inline-block;font-size:var(--fs-2xs);font-weight:800;text-transform:uppercase;letter-spacing:var(--tracking-caps);color:var(--text-3);margin-right:6px}.fb-done{flex-shrink:0;white-space:nowrap}@media (max-width: 640px){.fb-card{flex-direction:column}.fb-done{align-self:flex-end}}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--sp-5);background-color:var(--brand-800);background-image:radial-gradient(900px 520px at 12% 8%,rgba(93,141,168,.55),transparent 62%),radial-gradient(760px 480px at 88% 92%,rgba(217,119,6,.28),transparent 60%),linear-gradient(150deg,var(--brand-900),var(--brand-700) 55%,#23495c)}.login-card{width:100%;max-width:420px;background:var(--surface);border:1px solid rgba(255,255,255,.5);border-radius:var(--r-xl);padding:var(--sp-7) var(--sp-6) var(--sp-6);box-shadow:0 24px 60px #0610166b,0 2px #fff9 inset;animation:pop-in var(--t-slow) both}.login-brand{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-5)}.login-brand .brand-mark{width:42px;height:42px;border-radius:13px;font-size:var(--fs-lg)}.login-brand-name{font-size:var(--fs-xs);font-weight:800;letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--text-3)}.login-title{margin:0 0 6px;font-size:var(--fs-2xl);letter-spacing:-.025em;color:var(--n-900)}.login-sub{margin:0 0 var(--sp-5);font-size:var(--fs-base);color:var(--text-2);line-height:1.55}.login-sub strong{color:var(--n-800)}.login-form{display:flex;flex-direction:column;gap:var(--sp-2)}.login-form label{margin:0;font-size:var(--fs-sm);font-weight:700;color:var(--n-700)}.login-form input{height:46px;padding:0 var(--sp-4);border:1px solid var(--border-strong);border-radius:var(--r-sm);font-size:var(--fs-md);background:var(--surface-inset)}.login-form input:focus{background:var(--surface)}.login-form .btn{min-height:44px;margin-top:var(--sp-2);font-size:var(--fs-base)}#login-code,#lark-code{letter-spacing:.5em;text-indent:.5em;text-align:center;font-weight:700;font-size:var(--fs-xl);font-family:var(--font-mono)}.login-divider{display:flex;align-items:center;gap:var(--sp-3);margin:var(--sp-5) 0 var(--sp-3);font-size:var(--fs-xs);color:var(--text-3);text-transform:uppercase;letter-spacing:var(--tracking-caps);font-weight:700}.login-divider:before,.login-divider:after{content:"";flex:1;height:1px;background:var(--border)}.login-card>.btn.ghost{width:100%;margin-top:var(--sp-2);border:1px solid var(--border);background:var(--surface-2);color:var(--n-700)}.login-card>.btn.ghost:hover{background:var(--brand-50);border-color:var(--brand-200);color:var(--brand-700)}.login-form .btn.ghost{border:1px solid var(--border);color:var(--n-600)}.login-info,.login-error{margin-top:var(--sp-4);padding:var(--sp-3) var(--sp-3);border-radius:var(--r-sm);font-size:var(--fs-sm);line-height:1.5;animation:fade-up var(--t-slow) both}.login-info{background:var(--ok-bg);border:1px solid var(--ok-line);color:var(--ok-text)}.login-error{background:var(--danger-bg);border:1px solid var(--danger-line);color:var(--danger-text)}.sg-page{max-width:1100px}.sg-section{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:var(--sp-5);margin-bottom:var(--sp-4);box-shadow:var(--shadow-sm)}.sg-section-title{margin:0 0 var(--sp-1);font-size:var(--fs-md);color:var(--n-800)}.sg-section-hint{margin:0 0 var(--sp-4);font-size:var(--fs-sm);color:var(--text-2);line-height:1.55;max-width:78ch}.sg-section-title+.sg-swatches,.sg-section-title+.sg-row,.sg-section-title+.sg-boxes{margin-top:var(--sp-4)}.sg-page code{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--brand-ink);background:var(--brand-soft);border:1px solid var(--brand-line);border-radius:var(--r-xs);padding:1px 6px}.sg-swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:var(--sp-3)}.sg-swatch{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2);border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface-2)}.sg-swatch-chip{width:42px;height:42px;flex:none;border-radius:var(--r-xs);border:1px solid var(--border-strong);box-shadow:var(--shadow-xs)}.sg-swatch-text{display:flex;flex-direction:column;gap:2px;min-width:0}.sg-swatch-val{font-family:var(--font-mono);font-size:var(--fs-2xs);color:var(--text-3)}.sg-swatch-note{font-size:var(--fs-xs);color:var(--text-2)}.sg-stages{display:flex;gap:var(--sp-2);flex-wrap:wrap}.sg-stage{display:inline-flex;align-items:center;gap:6px;padding:var(--sp-2) var(--sp-4);border:1px solid;border-left-width:4px;border-radius:var(--r-sm);font-weight:700;font-size:var(--fs-sm);color:var(--n-800)}.sg-stage-dot{width:10px;height:10px;border-radius:50%}.sg-type-row,.sg-space-row{display:grid;grid-template-columns:96px 62px 1fr;align-items:center;gap:var(--sp-3);padding:6px 0;border-top:1px solid var(--border-hair)}.sg-type-row:first-child,.sg-space-row:first-child{border-top:none}.sg-space-bar{height:12px;border-radius:var(--r-xs);background:linear-gradient(90deg,var(--brand-400),var(--accent-400))}.sg-boxes{display:flex;gap:var(--sp-4);flex-wrap:wrap;margin-bottom:var(--sp-4)}.sg-box{display:grid;place-items:center;min-width:132px;height:76px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm)}.sg-row{display:flex;gap:var(--sp-3);flex-wrap:wrap;align-items:center}.sg-input{height:var(--control-h);padding:0 var(--sp-3);border:1px solid var(--border-strong);border-radius:var(--r-xs);background:var(--surface);font-size:var(--fs-sm);min-width:170px}.sg-section .stat-row,.sg-section .report-card{margin-bottom:0}.sg-section .help-text,.sg-section .login-info,.sg-section .login-error,.sg-section .computed-note{margin-bottom:var(--sp-3)}
