:root{--bg: #f2f4f7;--surface: #ffffff;--surface-2: #f7f8fa;--surface-3: #eef1f5;--border: #e3e8ef;--border-strong: #cdd6e1;--text: #13213c;--text-2: #4a5569;--muted: #7d889b;--navy: #14254a;--navy-2: #1d3466;--accent: #2457c5;--accent-2: #3a6fdc;--accent-weak: #e9f0fd;--accent-ring: rgba(36, 87, 197, .28);--ok: #0a7d36;--ok-bg: #e7f6ec;--warn: #a35f00;--warn-bg: #fff4dc;--err: #c22d2d;--err-bg: #fdecec;--hull: #dfe6ef;--radius: 12px;--radius-s: 8px;--shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 2px 10px rgba(16, 24, 40, .05);--shadow-l: 0 12px 40px rgba(16, 24, 40, .18);--font: "Segoe UI Variable Text", "Segoe UI", Inter, system-ui, -apple-system, Roboto, sans-serif;--mono: "Cascadia Mono", Consolas, ui-monospace, monospace;--series-1: #2a78d6;--series-2: #eb6834;--series-3: #1baf7a;--series-4: #eda100;--ink: #0b0b0b;--grid: #e8ebef;--axis: #c3c9d3;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:13px;line-height:1.4;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.app{display:grid;grid-template-rows:auto minmax(0,1fr);height:100vh;min-height:560px}.main{display:grid;grid-template-columns:344px minmax(0,1fr) 336px;grid-template-rows:minmax(260px,1.3fr) minmax(220px,1fr);grid-template-areas:"left view right" "left lines right";gap:14px;padding:14px;min-height:0}.main>.left-col{grid-area:left}.main>.viewport-card{grid-area:view}.main>.bottom-panel{grid-area:lines}.main>.right-col{grid-area:right}.main>.start-gallery{grid-area:gallery}.panel-col{min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding-right:2px;scrollbar-width:thin}.app.layout-analyse .main{grid-template-rows:minmax(200px,.55fr) minmax(0,1fr);grid-template-areas:"left lines view" "left lines right"}.app.layout-start .main{grid-template-columns:344px minmax(0,1fr);grid-template-rows:minmax(0,1fr);grid-template-areas:"left gallery"}.app.layout-start .viewport-card{display:none}@media (max-width: 1280px){.main{grid-template-columns:320px minmax(0,1fr);grid-template-rows:minmax(300px,1.3fr) minmax(240px,1fr) auto;grid-template-areas:"left view" "left lines" "right right";overflow-y:auto}.app.layout-analyse .main{grid-template-rows:minmax(420px,1.6fr) minmax(240px,1fr) auto;grid-template-areas:"left lines" "left view" "right right"}.app.layout-start .main{grid-template-columns:320px minmax(0,1fr);grid-template-rows:minmax(0,1fr);grid-template-areas:"left gallery"}.main>.right-col{overflow:visible;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));align-items:start}}@media (max-width: 820px){.main,.app.layout-analyse .main{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 360px 420px auto;grid-template-areas:"left" "view" "lines" "right";padding:10px}.app.layout-start .main{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto;grid-template-areas:"left" "gallery"}.panel-col{overflow:visible}}.app.expanded .main{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);grid-template-areas:"view";gap:0}.app.expanded .panel-col,.app.expanded .bottom-panel,.app.expanded .start-gallery{display:none}.header{display:flex;flex-direction:column;gap:6px;padding:8px 16px;background:var(--surface);border-bottom:1px solid var(--border)}.header-top{display:flex;align-items:center;gap:14px;min-width:0;flex-wrap:wrap}.design-switch{position:relative;padding-left:10px;border-left:1px solid var(--border);min-width:0}.project-name{display:inline-flex;align-items:center;gap:6px;border:1px solid transparent;background:transparent;border-radius:8px;padding:4px 6px;color:var(--text-2);font-size:13px;white-space:nowrap;max-width:280px}.project-name:hover{background:var(--surface-3);color:var(--text)}.project-name .ell{overflow:hidden;text-overflow:ellipsis;min-width:0}.project-name .count{font-size:11px;font-weight:600;color:var(--accent);background:var(--accent-weak);border-radius:999px;padding:0 6px}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.brand{display:flex;align-items:center;gap:10px;min-width:190px}.brand-name{font-weight:650;font-size:17px;letter-spacing:-.01em;color:var(--navy);white-space:nowrap}.brand-name span{font-weight:400;color:var(--muted)}.steps{display:flex;align-items:center;gap:18px;min-width:0;overflow-x:auto;scrollbar-width:none}.step-group{display:flex;align-items:center;gap:8px}.step-group-label{font-size:10.5px;font-weight:650;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}.step-row{display:flex;gap:2px;background:var(--surface-3);border-radius:9px;padding:2px}.step-btn{border:0;background:transparent;padding:5px 10px;border-radius:7px;font-size:12.5px;color:var(--text-2);white-space:nowrap;display:flex;align-items:center;gap:6px}.step-btn .num{font-size:10.5px;color:var(--muted);font-variant-numeric:tabular-nums}.step-btn:hover{background:#ffffffb3;color:var(--text)}.step-btn.active{background:var(--navy);color:#fff;box-shadow:0 1px 2px #00000026}.step-btn.active .num{color:#ffffffb3}.header-tools{display:flex;align-items:center;gap:8px}.save-ind{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);white-space:nowrap;min-width:110px}.save-ind.ok{color:var(--ok)}.save-ind.warn{color:var(--warn)}.save-ind.err{color:var(--err)}.save-ind .ell{overflow:hidden;text-overflow:ellipsis;min-width:0}.girth-row{border-left:2px solid var(--border);padding-left:8px;margin-bottom:8px}.girth-row .param{margin-bottom:4px}.file-ctl{position:relative;display:flex;align-items:center;gap:6px}.file-ctl .save-ind{width:150px;min-width:0;justify-content:flex-end;overflow:hidden}.file-ctl .save-ind svg{flex:none}.menu{position:absolute;top:calc(100% + 6px);right:0;z-index:80;width:290px;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-l);padding:6px;display:flex;flex-direction:column}.menu>button{display:flex;align-items:center;gap:9px;border:0;background:transparent;padding:7px 9px;border-radius:7px;text-align:left;font-size:12.5px;color:var(--text)}.menu>button:hover:not(:disabled),.menu>button:focus-visible{background:var(--surface-3)}.menu>button:disabled{color:var(--muted);cursor:not-allowed}.menu.left{left:10px;right:auto}.menu-head{padding:4px 9px;font-size:10.5px;font-weight:650;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}.menu>button.menu-design{align-items:flex-start}.menu-design .tick{width:14px;flex:none;color:var(--accent);padding-top:1px}.menu-design .col{display:flex;flex-direction:column;min-width:0}.menu-design .nm{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-design .sub{font-size:11.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu kbd{margin-left:auto;font-family:var(--font);font-size:11px;color:var(--muted)}.menu-sep{height:1px;background:var(--border);margin:5px 4px}.menu-check{display:flex;align-items:center;gap:8px;padding:6px 9px;font-size:12.5px}.menu-check.disabled{color:var(--muted)}.menu-note{padding:4px 9px 6px;font-size:11.5px;color:var(--muted);line-height:1.4}.menu-warn{display:flex;gap:7px;align-items:flex-start;padding:6px 9px 2px;font-size:12.5px;color:var(--warn)}.menu-warn svg{flex:none;margin-top:2px}.menu-actions{display:flex;gap:6px;padding:4px 9px 6px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--border-strong);background:var(--surface);border-radius:8px;padding:6px 11px;font-size:12.5px;color:var(--text);white-space:nowrap;transition:background .12s,border-color .12s}.btn:hover:not(:disabled){background:var(--surface-2);border-color:#b8c3d1}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--navy);border-color:var(--navy);color:#fff}.btn.primary:hover:not(:disabled){background:var(--navy-2)}.btn.accent{background:var(--accent);border-color:var(--accent);color:#fff}.btn.ghost{border-color:transparent;background:transparent}.btn.ghost:hover:not(:disabled){background:var(--surface-3)}.btn.small{padding:3px 8px;font-size:12px}.btn.block{width:100%}.btn.danger{color:var(--err)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--text-2)}.icon-btn:hover:not(:disabled){background:var(--surface-3);color:var(--text)}.icon-btn:disabled{opacity:.35;cursor:not-allowed}.icon-btn.on{background:var(--accent-weak);color:var(--accent)}.seg{display:inline-flex;background:var(--surface-3);border-radius:8px;padding:2px;gap:2px;flex-wrap:wrap}.seg button{border:0;background:transparent;padding:4px 9px;border-radius:6px;font-size:12px;color:var(--text-2)}.seg button:hover{color:var(--text)}.seg button.on{background:var(--surface);color:var(--navy);font-weight:600;box-shadow:0 1px 2px #1018281f}.seg.full{display:flex}.seg.full button{flex:1}select.select,input.text{border:1px solid var(--border-strong);border-radius:7px;background:var(--surface);padding:5px 8px;font-size:12.5px;min-width:0}select.select{padding-right:22px}input.text{width:100%}.toggle{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--text-2);cursor:pointer;user-select:none}.toggle input{accent-color:var(--accent);width:15px;height:15px;margin:0}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.card-pad{padding:14px}.card-title{display:flex;align-items:center;gap:8px;font-weight:650;font-size:14px;color:var(--navy)}.card-title .grow{flex:1}.card-sub{color:var(--muted);font-size:12px;margin-top:2px}.section{border-top:1px solid var(--border)}.section:first-child{border-top:0}.section-head{width:100%;display:flex;align-items:center;gap:8px;padding:12px 14px;background:none;border:0;text-align:left;font-weight:620;font-size:13.5px;color:var(--navy)}.section-head:hover{background:var(--surface-2)}.section-head .grow{flex:1}.section-body{padding:2px 14px 14px;display:flex;flex-direction:column;gap:10px}.level-badge{font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);background:var(--accent-weak);border-radius:4px;padding:1px 5px}.hint{font-size:12px;color:var(--muted)}.hint.block{background:var(--surface-2);border-radius:8px;padding:8px 10px;color:var(--text-2)}.row{display:flex;align-items:center;gap:8px}.row.wrap{flex-wrap:wrap}.row.between{justify-content:space-between}.grow{flex:1}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.param{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"label value" "slider slider" "ends ends";row-gap:3px;column-gap:8px}.param.disabled{opacity:.55}.param-label{grid-area:label;display:flex;align-items:center;gap:5px;font-size:12.5px;color:var(--text);min-width:0}.param-label .txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.param-value{grid-area:value;display:flex;align-items:center;gap:4px}.param-value input{width:72px;text-align:right;border:1px solid var(--border-strong);border-radius:6px;padding:3px 6px;font-size:12.5px;font-variant-numeric:tabular-nums;background:var(--surface)}.param-value input.warn{border-color:#e0a73a;background:var(--warn-bg)}.param-value input.bad{border-color:var(--err);background:var(--err-bg)}.param-unit{font-size:11.5px;color:var(--muted);min-width:26px}.param-reset{opacity:0;border:0;background:none;color:var(--muted);padding:0 2px;display:inline-flex}.param:hover .param-reset,.param:focus-within .param-reset{opacity:1}.param-reset:hover{color:var(--accent)}.param input[type=range]{grid-area:slider;width:100%;margin:2px 0 0;accent-color:var(--navy);height:18px}.param-ends{grid-area:ends;display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-top:-3px}.param-msg{grid-column:1 / -1;font-size:11.5px;color:var(--warn)}.param-msg.bad{color:var(--err)}input[type=range]{-webkit-appearance:none;appearance:none;background:transparent}input[type=range]::-webkit-slider-runnable-track{height:4px;background:linear-gradient(to right,var(--navy) 0%,var(--navy) var(--fill, 50%),#dde3eb var(--fill, 50%),#dde3eb 100%);border-radius:4px}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--navy);border:2px solid #fff;box-shadow:0 0 0 1px var(--navy),0 1px 3px #00000040;margin-top:-5px}input[type=range]::-moz-range-track{height:4px;background:#dde3eb;border-radius:4px}input[type=range]::-moz-range-progress{height:4px;background:var(--navy);border-radius:4px}input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--navy);border:2px solid #fff}.metrics{display:flex;flex-direction:column}.metric{display:flex;align-items:center;gap:6px;padding:6px 0;border-bottom:1px solid var(--surface-3);font-size:12.5px}.metric:last-child{border-bottom:0}.metric .m-label{flex:1;display:flex;align-items:center;gap:5px;color:var(--text-2);min-width:0}.metric .m-value{font-weight:600;font-variant-numeric:tabular-nums;color:var(--text);white-space:nowrap}.metric .m-unit{color:var(--muted);font-size:11.5px;min-width:30px}.metric .m-delta{font-size:11.5px;font-variant-numeric:tabular-nums}.conf{width:7px;height:7px;border-radius:50%;flex:none;display:inline-block}.conf.high{background:#1f9d55}.conf.medium{background:#e0a400}.conf.low{background:#c9c9c9;box-shadow:inset 0 0 0 1.5px #8a8f98}.tag{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;padding:1px 7px;border-radius:999px;background:var(--surface-3);color:var(--text-2);white-space:nowrap}.tag.ok{background:var(--ok-bg);color:var(--ok)}.tag.warn{background:var(--warn-bg);color:var(--warn)}.tag.err{background:var(--err-bg);color:var(--err)}.tag.accent{background:var(--accent-weak);color:var(--accent)}.big-figure{font-size:28px;font-weight:650;letter-spacing:-.02em;color:var(--navy);line-height:1.1}.big-figure small{font-size:13px;font-weight:500;color:var(--muted);margin-left:4px}.stat-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.stat{background:var(--surface-2);border-radius:10px;padding:8px 10px}.stat .s-label{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:4px}.stat .s-value{font-size:17px;font-weight:650;color:var(--navy)}.stat .s-value small{font-size:11px;font-weight:500;color:var(--muted);margin-left:2px}.issues{display:flex;flex-direction:column;gap:6px}.issue{display:flex;gap:8px;padding:8px 9px;border-radius:8px;background:var(--surface-2);font-size:12px;line-height:1.35}.issue.error{background:var(--err-bg)}.issue.warning{background:var(--warn-bg)}.issue .i-icon{flex:none;margin-top:1px}.issue.error .i-icon{color:var(--err)}.issue.warning .i-icon{color:var(--warn)}.issue.info .i-icon{color:var(--accent)}.issue .fix{color:var(--text-2);margin-top:2px}.impact{display:flex;flex-direction:column;gap:5px;font-size:12px}.impact-line{display:flex;gap:7px;align-items:flex-start}.impact-line .dot{width:6px;height:6px;border-radius:50%;margin-top:6px;background:var(--accent);flex:none}.impact-line.good .dot{background:#1f9d55}.impact-line.caution .dot{background:#e0a400}.viewport-card{position:relative;overflow:hidden;min-height:0;background:radial-gradient(ellipse at 50% 35%,#fff,#f1f4f8 70%,#e9edf2)}.viewport-canvas{position:absolute;inset:0}.viewport-canvas canvas{display:block;width:100%;height:100%;touch-action:none}.vp-toolbar{position:absolute;top:10px;left:10px;right:10px;display:flex;align-items:flex-start;gap:8px;pointer-events:none;flex-wrap:wrap}.vp-toolbar>*{pointer-events:auto}.vp-pill{background:#ffffffeb;backdrop-filter:blur(6px);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);display:flex;align-items:center;gap:2px;padding:3px}.vp-pill .seg{background:transparent}.vp-pill .seg button.on{background:var(--navy);color:#fff}.vp-hint{position:absolute;bottom:10px;left:14px;font-size:11.5px;color:var(--muted);pointer-events:none}.vp-legend{position:absolute;bottom:10px;right:12px;display:flex;gap:10px;font-size:11.5px;color:var(--text-2);background:#ffffffd9;border-radius:8px;padding:4px 8px}.vp-legend span{display:inline-flex;align-items:center;gap:5px}.marker-label{position:absolute;transform:translate(-50%,-140%);font-size:10.5px;font-weight:700;letter-spacing:.02em;padding:1px 5px;border-radius:4px;background:#ffffffe6;border:1px solid var(--border);color:var(--text);pointer-events:none;white-space:nowrap}.vp-busy{position:absolute;top:54px;right:14px;font-size:11.5px;color:var(--muted)}.bottom-panel{display:flex;flex-direction:column;min-height:0;overflow:hidden}.bp-head{display:flex;align-items:center;gap:10px;padding:10px 14px 6px;flex-wrap:wrap}.bp-title{font-weight:650;font-size:14px;color:var(--navy)}.tabs{display:flex;gap:2px;flex-wrap:wrap}.tabs button{border:0;background:none;padding:5px 10px;font-size:12.5px;color:var(--text-2);border-bottom:2px solid transparent}.tabs button.on{color:var(--navy);font-weight:600;border-bottom-color:var(--accent)}.bp-body{flex:1;min-height:0;position:relative;padding:0 10px 8px}.lines-svg{width:100%;height:100%;display:block}.lines-svg text{font-family:var(--font)}.chart-wrap{position:relative;width:100%;height:100%;display:flex;flex-direction:column}.chart-legend{display:flex;gap:12px;flex-wrap:wrap;font-size:11.5px;color:var(--text-2);padding:0 4px 4px;align-items:center}.chart-legend .key{display:inline-flex;align-items:center;gap:5px}.chart-legend .swatch-line{width:14px;height:2px;border-radius:2px}.chart-wrap{min-height:0}.chart-plot{flex:1;min-height:0;position:relative}.chart-plot>.chart-svg,.chart-plot>.table-scroll{position:absolute;inset:0}.chart-svg{width:100%;height:100%;display:block}.chart-svg text{font-family:var(--font);fill:var(--muted);font-size:10.5px}.chart-tip{position:absolute;pointer-events:none;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-l);padding:6px 8px;font-size:11.5px;min-width:120px;z-index:5}.chart-tip .t-head{color:var(--muted);margin-bottom:3px}.chart-tip .t-row{display:flex;align-items:center;gap:6px}.chart-tip .t-row b{font-variant-numeric:tabular-nums}.chart-tip .t-key{width:10px;height:2px;border-radius:2px}.chart-table{width:100%;border-collapse:collapse;font-size:11.5px;font-variant-numeric:tabular-nums}.chart-table th,.chart-table td{text-align:right;padding:3px 6px;border-bottom:1px solid var(--surface-3)}.chart-table th:first-child,.chart-table td:first-child{text-align:left}.chart-table th{color:var(--muted);font-weight:600;position:sticky;top:0;background:var(--surface)}.table-scroll{overflow:auto;height:100%}.dtable{width:100%;border-collapse:collapse;font-size:12px}.dtable th{text-align:left;font-weight:600;color:var(--muted);font-size:11px;padding:4px 6px;border-bottom:1px solid var(--border);white-space:nowrap}.dtable td{padding:5px 6px;border-bottom:1px solid var(--surface-3);vertical-align:middle}.dtable td.num,.dtable th.num{text-align:right;font-variant-numeric:tabular-nums}.dtable tr.sel td{background:var(--accent-weak)}.dtable tr.clickable:hover td{background:var(--surface-2);cursor:pointer}.cell-input{width:64px;border:1px solid transparent;border-radius:5px;padding:2px 4px;text-align:right;background:transparent;font-variant-numeric:tabular-nums;font-size:12px}.cell-input:hover{border-color:var(--border-strong)}.cell-input:focus{border-color:var(--accent);background:var(--surface)}.tip-pop{position:fixed;z-index:1000;max-width:300px;background:var(--navy);color:#fff;font-size:12px;line-height:1.45;border-radius:8px;padding:8px 10px;box-shadow:var(--shadow-l);pointer-events:none}.tip-pop .tp-title{font-weight:650;margin-bottom:3px}.tip-pop .tp-meta{margin-top:6px;color:#b9c6e4;font-size:11px}.info-btn{display:inline-flex;border:0;background:none;padding:0;color:#9aa5b6;cursor:help}.info-btn:hover{color:var(--accent)}.link{border:0;background:none;padding:0;color:var(--accent);text-decoration:underline;text-underline-offset:2px;font-size:inherit}.overlay{position:fixed;inset:0;background:#0f172a61;z-index:200;display:flex;align-items:center;justify-content:center;padding:20px}.modal{background:var(--surface);border-radius:16px;box-shadow:var(--shadow-l);width:min(980px,100%);max-height:calc(100vh - 40px);overflow:auto}.modal-head{display:flex;align-items:center;gap:10px;padding:18px 22px 8px}.modal-head h2{margin:0;font-size:19px;color:var(--navy);flex:1}.modal-body{padding:6px 22px 18px}.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 22px 18px;border-top:1px solid var(--border)}.drawer{position:fixed;top:0;right:0;bottom:0;width:min(720px,100%);background:var(--surface);z-index:210;box-shadow:var(--shadow-l);display:flex;flex-direction:column}.drawer-head{display:flex;align-items:center;gap:10px;padding:16px 20px;border-bottom:1px solid var(--border)}.drawer-head h2{margin:0;flex:1;font-size:18px;color:var(--navy)}.drawer-body{overflow:auto;padding:6px 22px 30px;font-size:13px;line-height:1.55}.drawer-body h3{color:var(--navy);font-size:15px;margin:22px 0 6px;display:flex;align-items:center;gap:8px}.drawer-body .eq{font-family:var(--mono);font-size:12px;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;padding:8px 10px;white-space:pre-wrap;margin:6px 0}.drawer-body .flash{animation:flash 1.6s ease}@keyframes flash{0%{background:var(--accent-weak)}to{background:transparent}}.toc{display:flex;flex-wrap:wrap;gap:4px;margin:10px 0 4px}.family-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px}.family{border:1.5px solid var(--border);border-radius:12px;background:var(--surface);padding:0 0 10px;text-align:left;overflow:hidden;transition:border-color .12s,box-shadow .12s}.family:hover{border-color:#b5c3d7}.family.on{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}.family img,.family .ph{width:100%;aspect-ratio:16 / 8.5;display:block;background:linear-gradient(180deg,#f7f9fb,#edf1f5);object-fit:cover}.family .f-name{font-weight:650;color:var(--navy);padding:8px 10px 2px;font-size:13px}.family .f-desc{color:var(--text-2);font-size:11.5px;padding:0 10px}.chips{display:flex;gap:4px;flex-wrap:wrap}.chip{border:1px solid var(--border-strong);background:var(--surface);border-radius:7px;min-width:30px;padding:3px 7px;font-size:12px;font-variant-numeric:tabular-nums}.chip.on{background:var(--navy);border-color:var(--navy);color:#fff}.chip.mod:after{content:"•";margin-left:3px;color:var(--series-2)}.section-editor{width:100%;height:210px;background:var(--surface-2);border-radius:10px;border:1px solid var(--border);touch-action:none}.handle{cursor:grab}.handle:active{cursor:grabbing}.le-root{position:fixed;inset:0;z-index:220;background:var(--bg);display:grid;grid-template-rows:auto minmax(0,1fr) auto}.le-head{display:flex;align-items:center;gap:14px;padding:10px 16px;background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap}.le-main{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,32%);grid-template-rows:minmax(0,1fr) minmax(0,1fr);gap:12px;padding:12px;min-height:0}.le-profile{grid-column:1;grid-row:1}.le-plan{grid-column:1;grid-row:2}.le-side{grid-column:2;grid-row:1 / 3;display:grid;grid-template-rows:minmax(0,1fr) auto;gap:12px;min-height:0}.le-view{display:flex;flex-direction:column;min-height:0;overflow:hidden}.le-view-head{display:flex;align-items:center;gap:8px;padding:8px 12px 2px;flex-wrap:wrap;color:var(--navy)}.le-canvas{flex:1;min-height:0;position:relative;touch-action:none}.le-canvas svg{position:absolute;inset:0;display:block;user-select:none}.le-numbers{max-height:46vh;overflow:auto}.le-num-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;padding:6px 12px 12px}.le-foot{display:flex;align-items:center;gap:10px;padding:8px 16px;background:var(--surface);border-top:1px solid var(--border);font-size:12.5px;color:var(--text-2);min-height:38px}@media (max-width: 1000px){.le-main{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(220px,1fr) minmax(200px,1fr) auto;overflow-y:auto}.le-side{grid-column:1;grid-row:3;grid-template-rows:320px auto}}.toasts{position:fixed;bottom:16px;right:16px;display:flex;flex-direction:column;gap:8px;z-index:300}.toast{background:var(--navy);color:#fff;border-radius:10px;padding:9px 12px;font-size:12.5px;box-shadow:var(--shadow-l);max-width:380px;display:flex;gap:8px;align-items:flex-start}.toast.error{background:#8f1d1d}.toast.warning{background:#7a4b00}.toast.success{background:#0f5e2e}.toast button{border:0;background:none;color:inherit;opacity:.7;padding:0}.progress{height:6px;border-radius:6px;background:var(--surface-3);overflow:hidden}.progress>div{height:100%;background:var(--accent);transition:width .2s}.loading-screen{height:100vh;display:flex;align-items:center;justify-content:center;color:var(--muted);gap:10px}.kbd{font-family:var(--mono);font-size:11px;background:var(--surface-3);border-radius:4px;padding:0 4px}.divider{height:1px;background:var(--border);margin:4px 0}.muted{color:var(--muted)}.mono{font-family:var(--mono)}.ok-text{color:var(--ok)}.warn-text{color:var(--warn)}.err-text{color:var(--err)}.sim-start,.sim-progress{display:flex;flex-direction:column;gap:6px}.sim-start .btn.primary{justify-content:center}.sim-ok{display:flex;align-items:center;gap:5px;color:var(--ok)}.sim-runs{display:flex;flex-direction:column;gap:1px;border-top:1px solid var(--border);padding-top:8px}.sim-group{font-size:12px;font-weight:600;color:var(--text)}.sim-group-name{font-size:11px;color:var(--muted);margin:6px 0 1px}.sim-run{display:flex;align-items:center;gap:6px;min-height:26px}.sim-run-main{display:flex;align-items:center;gap:6px;flex:1;min-width:0;font-size:12.5px;cursor:pointer}.sim-run-main input{accent-color:var(--accent);margin:0}.sim-run-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sim-run-time{font-size:12px;color:var(--text-2);font-variant-numeric:tabular-nums}.sim-swatch{flex:none;display:inline-block;width:10px;height:10px;border-radius:3px;border:1.5px solid;vertical-align:-1px;margin-right:5px}.sim-run-main .sim-swatch,.sim-bar-label .sim-swatch,.sim-section figcaption .sim-swatch,.chart-legend .sim-swatch{margin-right:0}.sim-tab,.sim-empty{position:absolute;inset:0 10px 8px;display:flex;flex-direction:column}.sim-tab{gap:8px}.sim-empty{align-items:center;justify-content:center;gap:10px}.sim-head{flex-wrap:wrap;gap:8px}.sim-body{flex:1;min-height:0;position:relative}.sim-tab-progress{display:inline-flex;align-items:center;gap:8px}.sim-tab-progress .progress{width:120px}.sim-scroll{height:100%;overflow:auto;scrollbar-width:thin}.sim-caption{font-size:11.5px;color:var(--text-2);margin-bottom:8px}.sim-bars{display:flex;flex-direction:column;gap:6px}.sim-bar-row{display:grid;grid-template-columns:minmax(90px,30%) minmax(40px,1fr) auto;align-items:center;gap:10px;font-size:12px}.sim-bar-label{display:flex;align-items:center;gap:6px;min-width:0;color:var(--text)}.sim-bar-label>span:last-child,.sim-section figcaption>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sim-bar-track{display:flex;height:14px;border-left:1px solid var(--axis)}.sim-bar{height:100%;border-radius:0 4px 4px 0}.sim-bar-track.stacked>span{height:100%;box-sizing:border-box;border-right:2px solid var(--surface)}.sim-bar-track.stacked>span:last-child{border-right:0;border-radius:0 4px 4px 0}.sim-bar-value{color:var(--text);font-variant-numeric:tabular-nums}.sim-heat{border-collapse:separate;border-spacing:2px;font-size:11.5px;font-variant-numeric:tabular-nums}.sim-heat th{font-weight:600;color:var(--muted);padding:2px 6px;text-align:center}.sim-heat th.band{color:var(--text-2);text-decoration:underline;text-underline-offset:3px}.sim-heat tbody th{text-align:left;font-weight:500;color:var(--text);white-space:nowrap;padding-right:10px}.sim-heat td{min-width:38px;padding:4px 5px;text-align:center;border-radius:3px;color:var(--text)}.sim-single{height:100%;display:grid;grid-template-columns:minmax(180px,250px) minmax(0,1fr);gap:14px}.sim-two{height:100%;display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,36%);gap:12px}.sim-two.drag{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.sim-two.polar{grid-template-columns:minmax(0,1fr) minmax(250px,42%)}.sim-nowrap th,.sim-nowrap td{white-space:nowrap}.sim-cell-label{display:inline-block;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}.sim-plan-row{display:grid;grid-template-columns:minmax(120px,22%) minmax(0,1fr) minmax(150px,22%);align-items:center;gap:10px;font-size:12px}.sim-plan-row svg{width:100%;height:100%;display:block}.sim-dims{font-size:11px;color:var(--text-2)}.sim-sections{display:grid;gap:6px 12px;margin-bottom:6px}.sim-section{margin:0;display:flex;flex-direction:column;align-items:center;min-width:0}.sim-section svg{width:100%;display:block}.sim-section figcaption{display:flex;align-items:center;gap:5px;max-width:100%;font-size:11.5px;color:var(--text)}.sim-pos{margin-bottom:10px}.sim-pos-head{font-size:12px;font-weight:600;color:var(--text);margin-bottom:4px}.sim-two.waves{grid-template-columns:minmax(0,1fr) minmax(200px,32%)}.sim-two.waves .hint p{margin:0 0 6px}.family-group{grid-column:1 / -1;font-size:11.5px;font-weight:600;color:var(--text-2);margin-top:4px}.family-group:first-child{margin-top:0}.imp-drop{display:flex;align-items:center;justify-content:center;gap:10px;border:1.5px dashed var(--border-strong);border-radius:12px;padding:26px 16px;color:var(--text-2);background:var(--surface-2);flex-wrap:wrap}.imp-drop.small{padding:8px 12px;justify-content:flex-start}.imp-drop.over{border-color:var(--accent);background:var(--accent-weak)}.imp-grid{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(280px,1fr);gap:16px;margin-top:12px;align-items:start}@media (max-width: 860px){.imp-grid{grid-template-columns:minmax(0,1fr)}}.imp-preview{border:1px solid var(--border);border-radius:10px;background:var(--surface);padding:6px}.imp-sketch{width:100%;height:auto;display:block}.imp-sketch .imp-hull{fill:var(--hull);stroke:none}.imp-sketch .imp-line{fill:none;stroke:var(--navy);stroke-width:1.4;stroke-linejoin:round}.imp-sketch .imp-line.thin{stroke-width:1}.imp-sketch .imp-wl{stroke:var(--accent);stroke-width:1.2}.imp-sketch .imp-cut{stroke:var(--err);stroke-width:2;stroke-dasharray:3 2;opacity:.75}.imp-sketch .imp-axis{stroke:var(--axis);stroke-width:1;stroke-dasharray:4 3}.imp-sketch .imp-label{font-size:11px;fill:var(--muted)}.imp-sketch .imp-label.wl{fill:var(--accent)}.imp-controls{display:flex;flex-direction:column;gap:9px}.imp-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.imp-dims{padding:8px 10px;border-radius:8px;background:var(--surface-2);border:1px solid var(--border)}.vp-options{position:absolute;top:8px;right:8px;z-index:2}.vp-gear{background:#ffffffeb;border:1px solid var(--border);box-shadow:var(--shadow)}.vp-gear.on{background:var(--navy);color:#fff}.viewport-card.compact .vp-busy{inset:auto auto 8px 10px}.vp-menu{position:fixed;z-index:300;width:330px;max-height:calc(100vh - 80px);overflow:auto;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-l);padding:10px 12px 12px;display:flex;flex-direction:column;gap:4px}.vp-menu .seg{flex-wrap:wrap}.vp-menu-label{font-size:11px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:6px}.vp-check{display:flex;align-items:center;gap:7px;padding:2px 0;cursor:pointer;color:var(--text)}.vp-check.disabled{color:var(--muted);cursor:default}.vp-check input,.vp-markers input{margin:0}.vp-markers{display:flex;flex-wrap:wrap;gap:4px 12px}.vp-markers label{display:inline-flex;align-items:center;gap:4px;cursor:pointer}.vp-markers .dot{width:8px;height:8px;border-radius:8px;display:inline-block}.start-gallery{overflow-y:auto;min-height:0;padding:18px 20px 20px;display:flex;flex-direction:column;gap:12px;scrollbar-width:thin}.sg-title{margin:0;font-size:19px;color:var(--navy);display:flex;align-items:center;gap:8px}.sg-inputs{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 12px}.sg-inputs>label{flex:1 1 150px;min-width:0}.sg-inputs>label.wide{flex:1.6 1 190px}.sg-inputs>label:first-child,.sg-inputs>label:nth-child(5){flex:0 0 auto}.sg-create{flex:0 0 auto;height:34px}.start-gallery .family-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}@media (max-width: 1100px){.start-gallery .family-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 820px){.start-gallery .family-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.family.import .ph{display:grid;place-items:center;color:var(--accent);background:linear-gradient(180deg,#f4f7fd,#e9f0fd)}.family.import:hover .ph{color:var(--accent-2)}.sg-current{border-top:1px solid var(--border);padding-top:12px;margin-top:4px;display:flex;flex-direction:column;gap:8px}.sg-current-title{font-weight:650;color:var(--navy)}.sg-current-row{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:flex-end}.sg-current-row>*{flex:1 1 220px;min-width:0}.sg-current-row>label.wide{flex:1.4 1 240px}.compare-empty{height:100%;min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;color:var(--text-2);padding:20px}.compare-empty b{color:var(--navy);font-size:14px}.compare-empty span{max-width:460px}.motion-tab{position:absolute;inset:0 10px 8px;display:grid;grid-template-columns:minmax(0,1fr) 236px;gap:10px}.motion-main{display:grid;grid-template-rows:minmax(0,1fr) 96px;gap:6px;min-width:0;min-height:0}.motion-view{position:relative;min-height:0;border-radius:8px;overflow:hidden;background:linear-gradient(180deg,#eef3f9,#dde7f2)}.motion-view canvas{display:block}.motion-chips{position:absolute;left:8px;top:8px;display:flex;flex-wrap:wrap;gap:6px;pointer-events:none;z-index:1}.motion-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:2px 8px;border-radius:999px;background:#ffffffd9;color:var(--text, #1f2733);border:1px solid rgba(0,0,0,.06)}.motion-chip i{width:8px;height:8px;border-radius:50%;display:inline-block}.motion-chip b{display:none;font-weight:600}.motion-chip.under{background:#d03b3b;color:#fff}.motion-chip.under b{display:inline}.motion-empty{position:absolute;inset:0;display:grid;place-items:center;font-size:12px;color:var(--muted)}.motion-trace{display:grid;grid-template-rows:auto minmax(0,1fr);min-height:0}.motion-trace canvas{width:100%;height:100%;display:block}.motion-side{overflow:auto;font-size:12px;display:flex;flex-direction:column;gap:8px;padding-right:2px}.motion-ctl{display:flex;flex-direction:column;gap:4px}.motion-ctl.row{flex-direction:row;align-items:center;gap:6px}.motion-ctl label{font-size:11px;color:var(--muted)}.motion-ctl label b{color:var(--text, #1f2733);font-weight:600;margin-left:4px}.motion-ctl input[type=range]{width:100%}.motion-stats td:not(:first-child),.motion-stats th:not(:first-child){text-align:right;white-space:nowrap}
