:root{--bg: #edf0e6;--bg-elevated: #f7f8f0;--surface: #fbfcf5;--surface-hover: #eef3e6;--border: #c6d0bd;--border-subtle: #d8dfd0;--text: #141912;--text-secondary: #586351;--text-tertiary: #8a9483;--accent: #dfff48;--accent-hover: #cceb32;--accent-muted: rgba(223, 255, 72, .28);--accent-text: #12170e;--cyan: #3a765d;--cyan-muted: rgba(58, 118, 93, .1);--success: #3f8b3c;--danger: #b84d45;--ink: #11150f;--ink-2: #182013;--radius-sm: 4px;--radius: 6px;--font: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;--sidebar-w: 300px;--topbar-h: 44px;--toolbar-h: 40px;--stats-h: 56px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased}body{background:var(--bg)}#app{height:100vh;overflow:hidden}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.topbar{height:var(--topbar-h);display:flex;align-items:center;justify-content:space-between;padding:0 18px;border-bottom:1px solid #273022;background:linear-gradient(90deg,rgba(223,255,72,.08),transparent 38%),var(--ink);color:#f5f7ef;flex-shrink:0}.logo{display:flex;align-items:center;gap:10px}.logo-icon{width:32px;height:32px;border-radius:3px;background:var(--ink-2);border:1px solid rgba(223,255,72,.55);display:grid;place-items:center;color:var(--accent)}.logo-icon svg{width:18px;height:18px}.logo-text h1{font-size:.95rem;font-weight:700;letter-spacing:0;line-height:1.1;color:#f5f7ef}.logo-text p{display:none}.privacy-tag{font-size:.68rem;color:var(--accent);background:#dfff4814;border:1px solid rgba(223,255,72,.32);padding:5px 10px;border-radius:3px;font-weight:700}.workspace{display:flex;flex:1;min-height:0;overflow:hidden;position:relative;background:var(--bg)}.sidebar{width:var(--sidebar-w);flex-shrink:0;display:flex;flex-direction:column;border-right:1px solid #b9c4b0;background:var(--bg-elevated);overflow:hidden}.sidebar-main{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:16px 14px 10px;display:flex;flex-direction:column;gap:12px}.upload-zone{display:block;cursor:pointer;border:1px dashed #aebaa4;border-radius:var(--radius-sm);background:#fdfdf7;transition:border-color .15s,background .15s,box-shadow .15s;flex-shrink:0}.upload-zone:hover,.upload-zone.is-drag{border-color:#9eb930;background:#f6ffd5;box-shadow:inset 0 0 0 1px #dfff4875}.upload-zone.has-file{border-style:solid;border-color:#b7c4ad}.upload-zone.disabled{cursor:not-allowed;opacity:.72}.upload-inner.compact-empty,.upload-compact{display:flex;align-items:center;gap:8px;padding:11px 12px;font-size:.8rem;color:var(--text-secondary)}.upload-compact-icon{font-size:1rem;flex-shrink:0}.upload-compact-name{flex:1;min-width:0;font-weight:600;font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.file-chip{font-family:var(--mono);font-size:.62rem;padding:2px 6px;border-radius:3px;background:#eff2e8;border:1px solid var(--border);color:var(--text-tertiary);flex-shrink:0}.file-chip.ok{color:var(--success);border-color:#5fd99a40}.file-chip.danger{color:var(--danger);border-color:#f070704d}.notice{padding:8px 10px;border-radius:4px;font-size:.68rem;line-height:1.45}.notice.error{color:var(--danger);background:#fff0ed;border:1px solid rgba(184,77,69,.22)}.settings-block{flex-shrink:0;display:flex;flex-direction:column;gap:8px;padding:12px;border:1px solid var(--border-subtle);background:#fdfdf7b8}.ratio-row{display:flex;align-items:baseline;justify-content:space-between}.ratio-label{font-size:.75rem;font-weight:700;color:var(--text-secondary)}.ratio-value-lg{font-family:var(--mono);font-size:1.5rem;font-weight:800;color:var(--text);line-height:1}.ratio-value-lg span{font-size:.75rem;color:var(--cyan)}.preset-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}.preset-btn{min-width:0;padding:5px 0;border-radius:3px;border:1px solid var(--border);background:#f7f8f0;color:var(--text-secondary);font-family:var(--mono);font-size:.68rem;font-weight:700;cursor:pointer;transition:all .12s}.preset-btn:hover:not(:disabled){border-color:#96ad35;color:var(--text)}.preset-btn.active{background:var(--accent);border-color:#9eb930;color:var(--accent-text)}.preset-btn:disabled{opacity:.35;cursor:not-allowed}.texture-block{flex-shrink:0;display:flex;flex-direction:column;gap:6px;padding:12px;border:1px solid var(--border-subtle);background:#fdfdf7b8}.texture-block .check-row{margin:0}.texture-params{display:flex;flex-direction:column;gap:6px;padding-left:22px}.texture-row{display:flex;align-items:center;gap:8px}.texture-select{flex:1;padding:5px 8px;border-radius:3px;border:1px solid var(--border);background:#fdfdf7;color:var(--text);font-size:.72rem}.texture-preset-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}.texture-preset-btn{min-width:0;padding:5px 0;border-radius:3px;border:1px solid var(--border);background:#f7f8f0;color:var(--text-secondary);font-size:.66rem;font-weight:700;cursor:pointer;transition:all .12s}.texture-preset-btn:hover:not(:disabled){border-color:var(--cyan);color:var(--text)}.texture-preset-btn.active{background:#dff3e8;border-color:#3a765d52;color:var(--cyan)}.texture-preset-btn:disabled{opacity:.35;cursor:not-allowed}.texture-preset-hint{font-size:.62rem;color:var(--text-tertiary);line-height:1.35;margin:0}.field-hint{font-size:.6rem;color:var(--text-tertiary);margin:2px 0 0}.adv-section-title{font-size:.68rem;font-weight:800;color:var(--cyan);margin:8px 0 4px}.adv-section-title:first-child{margin-top:0}.radio-row{display:flex;gap:8px;align-items:flex-start;padding:6px 0;cursor:pointer}.radio-row input{margin-top:2px;accent-color:var(--cyan);flex-shrink:0}.radio-row .label{font-size:.76rem;font-weight:500;display:block}.radio-row .desc{font-size:.65rem;color:var(--text-tertiary);line-height:1.35;display:block}.adv-hint{font-size:.65rem;color:var(--text-tertiary);line-height:1.45;margin-top:8px}.field.compact-field{margin:0}.field-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.field-row label{font-size:.72rem;color:var(--text-secondary);font-weight:700}.field-row output{font-family:var(--mono);font-size:.72rem;color:var(--cyan)}input[type=range]{width:100%;height:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#ccd6c4;border-radius:999px;outline:none;cursor:pointer}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--accent);border:2px solid var(--ink);cursor:pointer}input[type=range]:disabled{opacity:.35}.advanced-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:#fdfdf7;color:var(--text-secondary);font-size:.78rem;font-weight:500;cursor:pointer;flex-shrink:0;margin-top:auto}.advanced-toggle:hover{color:var(--text-secondary);background:var(--surface-hover)}.advanced-toggle.open{border-color:#9eb930;color:var(--text);background:#f6ffd5}.adv-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#11150f47;z-index:20}.adv-drawer{position:absolute;top:0;right:0;bottom:0;width:min(340px,90vw);z-index:21;background:var(--ink);border-left:1px solid #2b3426;display:flex;flex-direction:column;padding:14px;gap:10px;box-shadow:-18px 0 42px #11150f42;overflow:hidden;color:#eef3e8}.adv-drawer-head{display:flex;align-items:center;justify-content:space-between;font-size:.85rem;font-weight:600;flex-shrink:0}.adv-close{width:28px;height:28px;border:1px solid #303b2a;border-radius:3px;background:#151c12;color:#aeb8a6;cursor:pointer;font-size:.75rem}.adv-close:hover{color:#f5f7ef}.adv-tabs{display:flex;gap:3px;padding:3px;background:#0f150d;border-radius:var(--radius-sm);border:1px solid #303b2a;flex-shrink:0}.adv-tab{flex:1;padding:6px 4px;border:none;border-radius:5px;background:transparent;color:#879181;font-size:.7rem;font-weight:500;cursor:pointer}.adv-tab.active{background:#182013;color:var(--accent)}.adv-panel{flex:1;min-height:0;overflow-y:auto;background:#131a10;border:1px solid #303b2a;border-radius:var(--radius-sm);padding:10px}.adv-panel::-webkit-scrollbar{width:4px}.adv-panel::-webkit-scrollbar-thumb{background:#303b2a;border-radius:2px}.check-row{display:flex;gap:8px;padding:5px 0;cursor:pointer;align-items:flex-start}.check-row input{margin-top:2px;accent-color:var(--accent);flex-shrink:0}.check-row .label{font-size:.76rem;font-weight:700;display:block}.check-row .desc{font-size:.65rem;color:var(--text-tertiary);line-height:1.35;display:block}.adv-panel .check-row .label,.adv-panel .radio-row .label{color:#edf3e7}.adv-panel .check-row .desc,.adv-panel .radio-row .desc,.adv-panel .adv-hint,.adv-panel .field-row label,.adv-panel .texture-preset-hint,.adv-panel .field-hint{color:#8f9988}select{width:100%;padding:7px 9px;background:#fdfdf7;border:1px solid var(--border);border-radius:3px;color:var(--text);font-family:var(--mono);font-size:.72rem}.adv-panel select{background:#10160e;border-color:#303b2a;color:#dde5d8}.btn-text{width:100%;margin-top:6px;padding:7px;background:transparent;border:1px dashed #303b2a;border-radius:3px;color:#9da897;font-size:.72rem;cursor:pointer}.log-box{flex:1;min-height:80px;max-height:160px;overflow-y:auto;padding:8px;background:#0f150d;border:1px solid #303b2a;border-radius:var(--radius-sm);font-family:var(--mono);font-size:.62rem;line-height:1.45;color:#9da897;white-space:pre-wrap}.sidebar-footer{flex-shrink:0;padding:12px 14px;border-top:1px solid var(--border-subtle);background:#f1f3ea;display:grid;grid-template-columns:1fr 1fr;gap:8px}.btn{display:flex;align-items:center;justify-content:center;gap:6px;padding:11px 10px;border-radius:var(--radius-sm);border:1px solid transparent;font-family:var(--font);font-size:.82rem;font-weight:600;cursor:pointer;transition:transform .1s,opacity .15s,border-color .15s,background .15s}.btn:active:not(:disabled){transform:scale(.98)}.btn:disabled{opacity:.38;cursor:not-allowed}.btn-run{background:var(--accent);border-color:#9eb930;color:var(--accent-text)}.btn-run:disabled{background:#eef1e8;color:var(--text-tertiary);border:1px solid var(--border)}.btn-dl{background:#fdfdf7;color:var(--text-secondary);border:1px solid var(--border)}.btn-dl:hover:not(:disabled){border-color:var(--cyan);color:var(--cyan)}.spinner{width:14px;height:14px;border:2px solid rgba(18,23,14,.25);border-top-color:var(--accent-text);border-radius:50%;animation:spin .65s linear infinite}.spinner.light{border-color:#14191229;border-top-color:var(--accent-hover)}@keyframes spin{to{transform:rotate(360deg)}}.viewer{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden;background:var(--bg)}.viewer-toolbar{height:var(--toolbar-h);display:flex;align-items:center;justify-content:space-between;padding:0 14px;border-bottom:1px solid #c7d1bd;background:#f7f8f0;flex-shrink:0}.view-tabs{display:flex;gap:2px}.view-tab{padding:6px 14px;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--text-secondary);font-size:.78rem;font-weight:700;cursor:pointer}.view-tab:hover:not(:disabled){color:var(--text);border-color:var(--border)}.view-tab.active{color:var(--accent);background:var(--ink);border-color:#26301f;box-shadow:none}.view-tab:disabled{opacity:.3;cursor:not-allowed}.viewer-hint{font-size:.68rem;color:var(--text-tertiary);font-weight:700}.viewer-stage{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.viewer-body{flex:1;min-height:0;display:grid;overflow:hidden}.viewer-body.mode-original,.viewer-body.mode-simplified{grid-template-columns:1fr}.viewer-body.mode-compare{grid-template-columns:1fr 1fr}.viewer-body.mode-original .vp-simplified,.viewer-body.mode-simplified .vp-original{display:none}.vp{position:relative;min-height:0;overflow:hidden;background:linear-gradient(var(--border-subtle),var(--border-subtle)) 50% 50% / 100% 1px no-repeat,linear-gradient(90deg,var(--border-subtle),var(--border-subtle)) 50% 50% / 1px 100% no-repeat,radial-gradient(ellipse 70% 54% at 50% 72%,#f9faf2,var(--bg))}.viewer-body.mode-compare .vp-original{border-right:1px solid #b9c4b0}.vp-label{position:absolute;top:10px;left:10px;z-index:3;font-size:.62rem;font-weight:600;text-transform:uppercase;letter-spacing:0;color:var(--text);background:#fdfdf7e6;padding:4px 8px;border-radius:3px;border:1px solid var(--border-subtle);pointer-events:none}.vp canvas{display:block;width:100%!important;height:100%!important}.vp-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:var(--text-secondary);font-size:.8rem;font-weight:700;text-align:center;padding:16px;z-index:2;pointer-events:none}.vp-empty.error{color:var(--danger)}.stats-bar{height:var(--stats-h);flex-shrink:0;display:flex;align-items:center;gap:10px;padding:0 14px;border-top:1px solid #c7d1bd;background:#eef1e8;overflow-x:auto;overflow-y:hidden}.stat-pill{display:flex;align-items:center;gap:6px;padding:4px 10px;border-radius:3px;background:#f9faf2;border:1px solid #d4dccb;flex-shrink:0}.stat-pair{min-width:148px}.stat-pill-label{font-size:.65rem;color:var(--text-secondary);font-weight:800}.stat-pill-val{font-family:var(--mono);font-size:.72rem;font-weight:500}.stat-flow{display:flex;align-items:center;gap:5px;font-family:var(--mono);font-size:.72rem;font-weight:700;color:var(--text)}.stat-arrow{color:var(--text-tertiary)}.stat-pill-save{font-family:var(--mono);font-size:.68rem;color:var(--success);font-weight:800}.stat-pill-save.bad{color:var(--danger)}.stat-timing{margin-left:auto;font-family:var(--mono);font-size:.68rem;color:var(--cyan);font-weight:800;flex-shrink:0}@media(max-width:800px){:root{--sidebar-w: 260px}}@media(max-width:640px){.topbar{padding:0 14px}.privacy-tag,.viewer-hint{display:none}.workspace{flex-direction:column}.sidebar{width:100%;min-width:0;max-height:38vh;border-right:none;border-bottom:1px solid var(--border-subtle)}.sidebar-main>*,.sidebar-footer{width:100%;max-width:362px}.preset-row,.texture-preset-row{width:100%;max-width:334px}.viewer{min-height:0}}
