:root{--bg: #07090d;--ink: #eef2fb;--muted: #93a0b8;--faint: #6b7689;--accent: #6ea8fe;--accent-2: #a98bff;--ok: #5fe39a;--warn: #ffd454;--glass: rgba(16, 20, 30, .72);--hairline: rgba(255, 255, 255, .12);--hover: rgba(255, 255, 255, .08);--shadow: 0 24px 60px -24px rgba(0, 0, 0, .85);--ease: cubic-bezier(.16, 1, .3, 1)}*{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%;overflow:hidden;font-family:SF Pro Text,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}#app{position:relative}#viewport{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0}#viewport canvas{display:block;width:100%;height:100%}.rule-thirds{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;pointer-events:none;opacity:0;transition:opacity .15s ease}.rule-thirds.is-on{opacity:1}.rule-thirds-line{position:absolute;background:#ffffff6b;box-shadow:0 0 1px #00000059}.rule-thirds-line--v1{left:33.333%;top:0;bottom:0;width:1px;transform:translate(-.5px)}.rule-thirds-line--v2{left:66.666%;top:0;bottom:0;width:1px;transform:translate(-.5px)}.rule-thirds-line--h1{top:33.333%;left:0;right:0;height:1px;transform:translateY(-.5px)}.rule-thirds-line--h2{top:66.666%;left:0;right:0;height:1px;transform:translateY(-.5px)}.loader{position:absolute;top:0;right:0;bottom:0;left:0;z-index:8;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.1rem;background:var(--bg);transition:opacity .9s var(--ease),visibility 0s linear .9s}.loader.done{opacity:0;visibility:hidden;pointer-events:none}.loader-track{width:min(220px,60vw);height:2px;border-radius:1px;background:var(--hairline);overflow:hidden}.loader-bar{width:100%;height:100%;background:var(--ink);transform:scaleX(0);transform-origin:left;transition:transform .25s ease-out}.loader-text{min-height:1.2em;font-size:.78rem;color:var(--faint);font-variant-numeric:tabular-nums;text-align:center;max-width:min(80vw,460px)}.loader.error .loader-text{color:var(--warn);-webkit-user-select:text;user-select:text}.menu-toggle{position:absolute;top:1.1rem;right:1.1rem;z-index:6;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;border:1px solid var(--hairline);background:var(--glass);-webkit-backdrop-filter:blur(16px) saturate(1.2);backdrop-filter:blur(16px) saturate(1.2);color:var(--ink);cursor:pointer;box-shadow:var(--shadow);transition:transform .3s var(--ease),opacity .3s var(--ease),background-color .2s ease}.menu-toggle:hover{background:#ffffff1f}.menu-toggle:active{transform:scale(.94)}.menu-toggle svg{transition:transform .5s var(--ease)}.menu-toggle:hover svg{transform:rotate(45deg)}.menu-toggle.hidden{opacity:0;transform:scale(.85);pointer-events:none}.toast{position:absolute;top:1.15rem;left:50%;transform:translate(-50%,-8px);z-index:6;max-width:min(80vw,460px);padding:.5rem .95rem;border-radius:999px;border:1px solid var(--hairline);background:var(--glass);-webkit-backdrop-filter:blur(16px) saturate(1.2);backdrop-filter:blur(16px) saturate(1.2);box-shadow:var(--shadow);font-size:.82rem;line-height:1.3;color:var(--ink);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:0;pointer-events:none;transition:opacity .4s var(--ease),transform .4s var(--ease)}.toast.show{opacity:1;transform:translate(-50%)}.drawer{position:absolute;top:1rem;right:1rem;bottom:1rem;z-index:7;width:min(300px,calc(100vw - 2rem));padding:1.15rem;border-radius:18px;background:var(--glass);border:1px solid var(--hairline);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(22px) saturate(1.25);backdrop-filter:blur(22px) saturate(1.25);display:flex;flex-direction:column;gap:.85rem;transform:translate(calc(100% + 1.5rem));opacity:0;pointer-events:none;transition:transform .45s var(--ease),opacity .35s var(--ease)}.drawer.open{transform:translate(0);opacity:1;pointer-events:auto}.drawer-head{display:flex;align-items:center;justify-content:space-between}.wordmark{font-size:.82rem;font-weight:600;letter-spacing:.28em;color:var(--muted)}.icon-btn{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;border:1px solid transparent;background:transparent;color:var(--muted);cursor:pointer;transition:background-color .2s ease,color .2s ease}.icon-btn:hover{background:var(--hover);color:var(--ink)}.field{display:flex;flex-direction:column;gap:.4rem;font-size:.74rem;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}.field select{-webkit-appearance:none;-moz-appearance:none;appearance:none;text-transform:none;letter-spacing:normal;background:linear-gradient(135deg,transparent calc(100% - 16px),var(--muted) 0) no-repeat,#ffffff0a;background-position:right .75rem center,0 0;background-size:6px 6px,auto;color:var(--ink);border:1px solid var(--hairline);border-radius:10px;padding:.55rem 1.6rem .55rem .65rem;font-size:.85rem;cursor:pointer;transition:border-color .25s ease,box-shadow .25s ease,background-color .25s ease}.field select:hover:not(:disabled){border-color:#ffffff47}.field select:focus-visible{outline:none;border-color:#fff6;box-shadow:0 0 0 3px #ffffff1f}.field select:disabled{opacity:.5;cursor:not-allowed}.slider-field{display:grid;gap:.35rem;margin-top:.55rem}.slider-field:first-of-type{margin-top:.35rem}.slider-label{display:flex;justify-content:space-between;align-items:baseline;font-size:.78rem;color:var(--muted)}.slider-label output{font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;color:var(--ink)}.slider-field input[type=range]{width:100%;margin:0;accent-color:rgba(255,255,255,.85)}.transport{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.transport button{border:1px solid var(--hairline);border-radius:11px;padding:.6rem .75rem;font-size:.9rem;font-weight:600;cursor:pointer;background:#ffffff0f;color:var(--ink);transition:transform .12s ease,background-color .2s ease,border-color .2s ease,opacity .2s ease}.transport button:not(:disabled):hover{background:var(--hover);border-color:#ffffff47;transform:translateY(-1px)}.transport button:not(:disabled):active{transform:translateY(0) scale(.98)}.transport button:disabled{opacity:.38;cursor:not-allowed}.transport button.primary{background:#ffffffeb;border-color:transparent;color:#0b0e14}.transport button.primary:not(:disabled):hover{background:#fff;transform:translateY(-1px)}.case-toggle{width:100%;margin-top:.35rem;border:1px solid var(--hairline);border-radius:10px;padding:.55rem .75rem;font-size:.85rem;font-weight:600;cursor:pointer;background:#ffffff0f;color:var(--ink);transition:transform .12s ease,background-color .2s ease,border-color .2s ease}.case-toggle:hover{background:var(--hover);border-color:#ffffff47;transform:translateY(-1px)}.case-toggle:active{transform:scale(.98)}.case-toggle[aria-pressed=true]{background:#6ea8fe2e;border-color:#6ea8fe8c}.views{display:grid;grid-template-columns:repeat(2,1fr);gap:.4rem}.views button{border:1px solid var(--hairline);border-radius:10px;padding:.45rem .4rem;font-size:.8rem;font-weight:600;cursor:pointer;background:#ffffff0d;color:var(--ink);transition:background-color .2s ease,transform .12s ease,border-color .2s ease}.views button.wide{grid-column:1 / -1}.views button[hidden]{display:none}.views button.is-active{background:#6ea8fe33;border-color:#6ea8fea6;color:var(--ink);box-shadow:0 0 0 1px #6ea8fe40}.views button:hover{background:var(--hover);border-color:#ffffff47;transform:translateY(-1px)}.views button.is-active:hover{background:#6ea8fe47;border-color:#6ea8febf}.views button:active{transform:scale(.97)}.views button kbd{margin-left:.2rem;padding:.05rem .3rem;font-size:.68rem;font-weight:500;font-family:inherit;color:var(--muted);background:#ffffff0f;border:1px solid var(--hairline);border-radius:4px}.debug-stack{position:absolute;left:1rem;bottom:1rem;z-index:3;display:flex;flex-direction:column;justify-content:flex-start;gap:.4rem;width:min(220px,calc(100vw - 2rem));max-height:calc(100vh - 4.5rem);overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;pointer-events:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.15) transparent}.debug-stack>.scene-debug{position:relative;flex-shrink:0;width:100%}.scene-debug{overflow:hidden;border-radius:10px;background:#0c0f16f0;border:1px solid rgba(255,255,255,.08);box-shadow:0 8px 28px #00000073;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);font-size:.68rem;color:#8b96ab}.debug-stack .scene-debug[open] .scene-debug-body{max-height:min(28vh,220px)}.debug-stack .zfight-probe[open] .scene-debug-body{max-height:min(42vh,320px)}.zfight-probe-hint{margin:0 0 .45rem;font-size:.62rem;line-height:1.35;color:#6d7890}.zfight-probe-status{margin-bottom:.35rem;font-size:.62rem;line-height:1.35;color:#9aa6bc}.zfight-probe-status--warn{color:#e8c06a}.zfight-probe-status--ok{color:#7dcda8}.zfight-probe-table-wrap{overflow-x:auto;margin-bottom:.35rem}.zfight-probe-table{width:100%;border-collapse:collapse;font-size:.6rem;font-variant-numeric:tabular-nums}.zfight-probe-table th,.zfight-probe-table td{padding:.15rem .2rem;text-align:left;border-bottom:1px solid rgba(255,255,255,.06);white-space:nowrap}.zfight-probe-table th{color:#6d7890;font-weight:600}.zfight-probe-coplanar td{color:#e8c06a;background:#e8c06a14}.zfight-probe-detail{margin:0;padding:.35rem .4rem;border-radius:6px;background:#00000040;font-size:.58rem;line-height:1.45;color:#a8b4c8;white-space:pre-wrap;word-break:break-word}.scene-debug[open] .scene-debug-body{max-height:calc(58vh - 2rem);overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.15) transparent}.scene-debug>summary{cursor:pointer;padding:.45rem .55rem;font-size:.7rem;font-weight:600;letter-spacing:.04em;color:#d8deea;list-style:none;-webkit-user-select:none;user-select:none}.scene-debug>summary:before{content:"▸ ";display:inline-block;font-size:.55rem;opacity:.55;transition:transform .15s ease}.scene-debug[open]>summary:before{transform:rotate(90deg)}.scene-debug>summary::-webkit-details-marker{display:none}.scene-debug-body{padding:0 .5rem .45rem}.debug-toolbar{display:flex;gap:.25rem;margin-bottom:.4rem}.debug-toolbar button{flex:1;border:1px solid rgba(255,255,255,.1);border-radius:5px;padding:.28rem .2rem;font-size:.62rem;font-weight:500;letter-spacing:.02em;cursor:pointer;background:#ffffff0a;color:#b8c2d4;transition:background .15s ease,color .15s ease}.debug-toolbar button:hover{background:#6ea8fe1f;color:#e8ecf4;border-color:#6ea8fe40}.debug-group{border-top:1px solid rgba(255,255,255,.06)}.debug-group>summary{cursor:pointer;padding:.32rem 0;font-size:.62rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:#6ea8fe;list-style:none;-webkit-user-select:none;user-select:none}.debug-group>summary:before{content:"▸ ";font-size:.5rem;opacity:.5}.debug-group[open]>summary:before{content:"▾ "}.debug-group>summary::-webkit-details-marker{display:none}.debug-group-body{display:flex;flex-direction:column;gap:.15rem;padding-bottom:.35rem}.debug-toggle{display:flex;align-items:center;gap:.4rem;min-height:1.25rem;cursor:pointer;-webkit-user-select:none;user-select:none}.debug-toggle input{width:.75rem;height:.75rem;margin:0;accent-color:var(--accent);cursor:pointer}.debug-toggle span{font-size:.62rem;color:#9aa6bc}.debug-row{display:grid;grid-template-columns:2.1rem 2.2rem 1fr;align-items:center;gap:.25rem;min-height:1.1rem;cursor:default}.debug-row-label{font-size:.62rem;color:#6b7689;letter-spacing:.02em}.debug-row output{font-size:.62rem;font-variant-numeric:tabular-nums;text-align:right;color:#9aa6bc}.debug-row input[type=range]{width:100%;height:2px;margin:0;accent-color:var(--accent);cursor:pointer}.debug-vec3{display:grid;grid-template-columns:1.6rem 1fr;gap:.2rem;align-items:start;margin:.1rem 0}.debug-vec3-label{font-size:.62rem;font-weight:600;color:#6b7689;padding-top:.15rem;letter-spacing:.02em}.debug-vec3-axes{display:flex;flex-direction:column;gap:.1rem}.debug-vec3 .debug-row{grid-template-columns:.75rem 2rem 1fr;min-height:.95rem}.debug-vec3 .debug-row-label{font-size:.58rem;color:#555f72}@media(max-width:720px){.drawer{top:auto;left:.6rem;right:.6rem;bottom:.6rem;width:auto;max-height:60vh;overflow-y:auto;transform:translateY(calc(100% + 1.5rem))}.drawer.open{transform:translateY(0)}.debug-stack{left:.5rem;width:min(200px,calc(100vw - 1rem));bottom:.5rem;max-height:calc(100vh - 5.5rem)}.debug-stack .scene-debug[open] .scene-debug-body{max-height:min(24vh,180px)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
