html,body{min-width:320px;min-height:100%}body{margin:0}button,input,textarea,select{font:inherit}:root{--bg: #fbfbfd;--surface: #ffffff;--surface-2: #f5f5f7;--ink: #1d1d1f;--ink-soft: #515154;--ink-faint: #86868b;--line: rgba(0, 0, 0, .1);--line-strong: rgba(0, 0, 0, .18);--accent: #0071e3;--accent-hover: #0062c4;--accent-soft: rgba(0, 113, 227, .1);--green: #34c759;--yellow: #ff9f0a;--red: #ff3b30;--danger: #ff3b30;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 3px rgba(0, 0, 0, .06);--shadow-md: 0 4px 12px rgba(0, 0, 0, .06), 0 1px 3px rgba(0, 0, 0, .04);--panel-radius: 14px;--control-radius: 10px;--font-system: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", system-ui, "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box}body{margin:0;color:var(--ink);font-family:var(--font-system);font-feature-settings:"ss01","ss02";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--bg)}#root{min-height:100vh}.app-shell{min-height:100vh;padding:1.25rem;color:var(--ink);display:flex;flex-direction:column;gap:1rem}.hero{position:relative;display:grid;gap:.65rem;grid-template-columns:1fr;padding:1.25rem 1.5rem;border:1px solid var(--line);border-radius:var(--panel-radius);background:var(--surface)}.hero>div{padding-right:96px}.top-links{position:absolute;top:1.25rem;right:1.25rem;display:flex;gap:.4rem;z-index:2}.top-link{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:8px;color:var(--ink-soft);text-decoration:none;transition:background-color .12s ease,color .12s ease}.top-link:hover{background:var(--surface-2);color:var(--ink)}.top-link svg{width:16px;height:16px;display:block}.eyebrow{display:inline-flex;align-items:center;margin:0;padding:.18rem .6rem;border-radius:980px;background:var(--accent-soft);color:var(--accent);font-size:.74rem;font-weight:500;letter-spacing:-.005em;width:fit-content}.hero h1{margin:.4rem 0 0;max-width:22ch;font-size:clamp(1.4rem,1vw + .85rem,1.85rem);font-weight:600;line-height:1.15;letter-spacing:-.02em;color:var(--ink)}.hero-copy{margin:.55rem 0 0;max-width:64ch;color:var(--ink-soft);font-size:.94rem;line-height:1.45}.layout{display:grid;gap:1rem;grid-template-columns:1.1fr 1fr;align-items:stretch;flex:1;min-height:0}.col{display:flex;flex-direction:column;gap:1rem;min-width:0;min-height:0}.col-left>.controls-panel,.col-right>.panel{flex:1;min-height:0}.panel{position:relative;border:1px solid var(--line);border-radius:var(--panel-radius);background:var(--surface)}.controls-panel{padding:1.25rem 1.5rem}.controls-panel h2,.image-panel h2,.preview-panel .preview-title{margin:0;font-size:.95rem;font-weight:600;letter-spacing:-.01em;color:var(--ink)}.field{display:grid;gap:.4rem;margin-top:1rem}.field>span{font-size:.78rem;font-weight:500;color:var(--ink-soft);letter-spacing:-.005em}.field input[type=file],.field input[type=url],.field input[type=number]{width:100%;border:1px solid var(--line);border-radius:var(--control-radius);background:var(--surface);color:var(--ink);padding:.55rem .7rem;font-family:var(--font-system);font-size:.92rem;font-weight:400;transition:border-color .12s ease,box-shadow .12s ease}.field input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.field input:disabled{background:var(--surface-2);color:var(--ink-faint)}.field small{color:var(--ink-faint);font-size:.78rem;line-height:1.4}.field-grid{display:grid;gap:.7rem}.two-col{grid-template-columns:1fr 1fr}.compact{margin-top:.85rem}.meta-card{min-height:38px;border:1px solid var(--line);border-radius:var(--control-radius);padding:.5rem .7rem;background:var(--surface-2);display:flex;align-items:center;font-size:.88rem;color:var(--ink-soft)}.actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.1rem}.btn{border:1px solid transparent;background:var(--surface-2);color:var(--ink);border-radius:var(--control-radius);padding:.55rem 1rem;font-family:var(--font-system);font-size:.88rem;font-weight:500;text-decoration:none;cursor:pointer;transition:background-color .12s ease,color .12s ease,border-color .12s ease,transform 80ms ease}.btn:hover:not(:disabled):not(.btn-disabled){background:#ebebef}.btn:active:not(:disabled):not(.btn-disabled){transform:scale(.985)}.btn:disabled,.btn-disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.btn-primary{background:var(--accent);color:#fff;border-color:transparent}.btn-primary:hover:not(:disabled):not(.btn-disabled){background:var(--accent-hover)}button.btn:not(.btn-primary){background:var(--surface-2)}a.btn:not(.btn-disabled){background:var(--accent);color:#fff}a.btn:not(.btn-disabled):hover{background:var(--accent-hover)}.status-card{margin-top:1rem;border-radius:var(--control-radius);border:1px solid var(--line);background:var(--surface);padding:.75rem .85rem}.status-row{display:flex;align-items:center;gap:.55rem;color:var(--ink);font-size:.88rem}.status-dot{width:.6rem;height:.6rem;border-radius:999px;background:var(--green);flex-shrink:0}.status-card[data-stage=loading-model] .status-dot{background:var(--accent)}.status-card[data-stage=running-inference] .status-dot{background:var(--yellow)}.status-card[data-stage=building-ply] .status-dot{background:var(--red)}.progress-bar{margin-top:.6rem;height:4px;border-radius:999px;background:var(--surface-2);overflow:hidden}.progress-bar-fill{height:100%;background:var(--accent);transition:width .12s ease}.error-text{margin:.55rem 0 0;color:var(--danger);font-size:.86rem;font-weight:500}.result-text{margin:.4rem 0 0;color:var(--ink-faint);font-size:.78rem}.model-loader{margin-top:1rem;display:flex;flex-direction:column;gap:.45rem}.model-loader-label{font-size:.78rem;font-weight:500;color:var(--ink-soft)}.model-loader-row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.model-loader-or{font-size:.82rem;color:var(--ink-faint);padding:0 .15rem}.model-loader-upload{display:inline-flex;align-items:center;cursor:pointer}.model-loader-filename{font-size:.86rem;color:var(--ink);background:var(--surface-2);border-radius:var(--control-radius);padding:.4rem .65rem;flex:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.model-loader-reset{margin-left:auto;background:transparent;color:var(--ink-soft);font-size:.82rem;padding:.4rem .65rem}.model-loader-reset:hover{background:var(--surface-2);color:var(--ink)}.model-loader-status-loaded{display:inline-flex;align-items:center;gap:.4rem;font-size:.88rem;font-weight:500;color:var(--green);background:#34c7591a;border-radius:var(--control-radius);padding:.4rem .7rem;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.model-loader-status-loading{display:inline-flex;align-items:center;gap:.5rem;font-size:.88rem;font-weight:500;font-variant-numeric:tabular-nums;color:var(--accent);background:var(--accent-soft);border-radius:var(--control-radius);padding:.4rem .7rem;flex:1}.model-loader-spinner{width:12px;height:12px;border-radius:999px;border:2px solid rgba(0,113,227,.25);border-top-color:var(--accent);animation:model-loader-spin .8s linear infinite;flex-shrink:0}@keyframes model-loader-spin{to{transform:rotate(360deg)}}.model-loader-hint{color:var(--ink-faint);font-size:.78rem;line-height:1.4}.image-panel{padding:1rem 1.1rem;display:flex;flex-direction:column;min-height:0}.panel-header{display:flex;justify-content:space-between;align-items:center;gap:.75rem}.dim-label{font-size:.74rem;font-weight:500;color:var(--ink-soft);background:var(--surface-2);border-radius:980px;padding:.22rem .55rem}.image-frame{margin-top:.7rem;border-radius:var(--control-radius);border:1px dashed var(--line-strong);background:var(--surface-2);display:grid;place-items:center;overflow:hidden;flex:1;min-height:0}.image-frame img{width:100%;height:100%;object-fit:contain;display:block}.empty-state{color:var(--ink-faint);font-size:.88rem;padding:1.5rem;text-align:center}.preview-panel{padding:1rem 1.1rem;display:grid;grid-template-rows:auto 1fr auto;min-height:0;gap:.7rem}.preview-controls{display:flex;flex-direction:column;gap:.5rem}.preview-controls-row{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center}.preview-controls-actions{justify-content:space-between}.preview-control{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;font-weight:500;color:var(--ink-soft)}.preview-control-grow{flex:1;min-width:160px}.preview-control-checkbox{cursor:pointer}.preview-control input[type=color]{width:28px;height:22px;padding:0;border:1px solid var(--line);border-radius:6px;background:var(--surface);cursor:pointer}.preview-control input[type=range]{flex:1;min-width:100px;accent-color:var(--accent)}.preview-control input[type=number]{width:80px;border:1px solid var(--line);border-radius:8px;padding:.35rem .5rem;font-family:var(--font-system);font-size:.86rem;background:var(--surface);color:var(--ink)}.preview-save-status{font-size:.78rem;color:var(--ink-faint)}.preview-transform{display:flex;flex-direction:column;gap:.4rem;border-top:1px solid var(--line);padding-top:.55rem}.preview-transform-row{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}.preview-transform-label{font-size:.78rem;font-weight:500;color:var(--ink-soft);min-width:64px}.preview-transform-axis{display:inline-flex;align-items:center;gap:.3rem;font-size:.78rem;color:var(--ink-faint)}.preview-transform-axis>span{width:18px;text-align:center;color:var(--ink-soft)}.preview-transform-axis input[type=number]{width:64px;border:1px solid var(--line);border-radius:8px;padding:.3rem .45rem;font-family:var(--font-system);font-size:.82rem;background:var(--surface);color:var(--ink)}.preview-transform-nudge{padding:.25rem .45rem;font-size:.72rem;background:var(--surface-2);color:var(--ink-soft)}.preview-transform-flip{width:36px;padding:.4rem 0;text-align:center;background:var(--surface-2);color:var(--ink-soft);font-weight:600}.preview-transform-flip.is-active{background:var(--accent);color:#fff}.preview-transform-reset{margin-left:auto;background:transparent;color:var(--ink-soft);font-size:.78rem;padding:.35rem .65rem}.preview-transform-reset:hover:not(:disabled):not(.btn-disabled){background:var(--surface-2);color:var(--ink)}.embed-snippet{margin-top:1rem;display:flex;flex-direction:column;gap:.45rem;border:1px solid var(--line);border-radius:var(--control-radius);padding:.85rem;background:var(--surface)}.embed-snippet-header{display:flex;justify-content:space-between;align-items:center;gap:.65rem}.embed-snippet-title{font-size:.84rem;font-weight:600;color:var(--ink)}.embed-snippet-copy{padding:.35rem .65rem;font-size:.78rem}.embed-snippet-text{width:100%;resize:vertical;border:1px solid var(--line);border-radius:8px;padding:.55rem .65rem;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:.78rem;line-height:1.45;background:var(--surface-2);color:var(--ink)}.embed-snippet-hint{color:var(--ink-faint);font-size:.78rem;line-height:1.4}.preview-toolbar{display:flex;justify-content:space-between;gap:.75rem;align-items:center}.preview-status{color:var(--ink-faint);font-size:.78rem}.splat-canvas-shell{position:relative;min-height:360px;border-radius:var(--control-radius);overflow:hidden;background:#000}.splat-canvas-host{position:absolute;inset:0}.splat-canvas-host canvas{width:100%!important;height:100%!important;display:block}.splat-empty{position:absolute;inset:0;display:grid;place-items:center;color:#ffffffb3;font-size:.88rem;padding:1.5rem;text-align:center;z-index:3}.footer-note{margin-top:1rem;color:var(--ink-faint);font-size:.78rem;border-top:1px solid var(--line);padding-top:.7rem}.footer-note p{margin:0;line-height:1.45}.footer-note a{color:var(--accent);text-decoration:none}.footer-note a:hover{text-decoration:underline}@media(max-width:1180px){.hero h1{max-width:100%}.app-shell{min-height:auto}.layout{grid-template-columns:1fr;flex:none}.col-left>.controls-panel,.col-right>.panel{flex:none}.image-frame{min-height:240px}.preview-panel{min-height:380px}}@media(max-width:720px){.app-shell{padding:.75rem}.top-links{top:.85rem;right:.85rem}.top-link{width:30px;height:30px}.hero{padding:1rem 1.1rem}.hero>div{padding-top:2rem;padding-right:80px}.controls-panel{padding:1rem 1.1rem}.two-col{grid-template-columns:1fr}.actions{flex-direction:column;align-items:stretch}.btn{width:100%;justify-content:center;text-align:center}.preview-toolbar{flex-direction:column;align-items:flex-start}}
