:root{--bg-0:#0a0908;--bg-1:#131110;--bg-2:#1c1917;--bg-3:#292524;--bg-4:#44403c;--fg-0:#fafaf9;--fg-1:#e7e5e4;--fg-2:#a8a29e;--fg-3:#78716c;--accent:#fbbf24;--accent-hover:#f59e0b;--accent-pressed:#d97706;--on-accent:#1c1917;--success:#4ade80;--success-bg:#052e16;--danger:#f87171;--danger-bg:#450a0a;--info:#38bdf8;--border-subtle:#292524;--border-strong:#44403c;--border-focus:#fbbf24;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--font-sans:"Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "Cascadia Code", monospace;--fs-xs:11px;--fs-sm:13px;--fs-md:15px;--fs-lg:18px;--fs-xl:22px;--fs-2xl:28px;--lh-tight:1.2;--lh-normal:1.5;--r-sm:4px;--r-md:8px;--r-lg:12px;--r-pill:999px;--sh-1:0 1px 2px #0006;--sh-2:0 4px 12px #00000080;--sh-3:0 12px 32px #0009;--sh-focus:0 0 0 2px var(--bg-0), 0 0 0 4px var(--accent);--t-fast:.12s ease;--t-base:.2s ease;--t-slow:.32s cubic-bezier(.2, .8, .2, 1);--z-overlay:10;--z-drawer:50;--z-modal:100;--z-toast:200}*,:before,:after{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0;padding:0;overflow:hidden}body{font-family:var(--font-sans);color:var(--fg-1);background:var(--bg-2);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:var(--lh-normal)}.app-shell{background:var(--bg-2);width:100vw;height:100dvh;color:var(--fg-1);font-family:var(--font-sans);flex-direction:column;display:flex}.app-header{align-items:center;gap:var(--sp-4);padding:var(--sp-3) var(--sp-5);border-bottom:1px solid var(--border-subtle);background:var(--bg-0);flex-shrink:0;min-height:56px;display:flex}.app-header h1{font-size:var(--fs-md);letter-spacing:.01em;color:var(--fg-0);align-items:center;gap:var(--sp-2);margin:0;font-weight:600;display:flex}.app-header h1 .logo-dot{background:var(--accent);border-radius:2px;width:10px;height:10px;display:inline-block;transform:rotate(45deg)}.app-header-actions{align-items:center;gap:var(--sp-2);margin-left:auto;display:flex}.app-bloco-id{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-2);padding:var(--sp-1) var(--sp-3);background:var(--bg-1);border:1px solid var(--border-subtle);border-radius:var(--r-pill)}.backend-pill{font-size:var(--fs-xs);padding:var(--sp-1) var(--sp-3);border-radius:var(--r-pill);font-family:var(--font-mono);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.backend-pill:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.backend-loading{background:var(--bg-3);color:var(--fg-2)}.backend-ok{background:var(--success-bg);color:var(--success)}.backend-error{background:var(--danger-bg);color:var(--danger)}.app-body{flex:1;min-height:0;display:flex;position:relative}.sidebar{border-right:1px solid var(--border-subtle);background:var(--bg-1);width:360px;padding:var(--sp-4) var(--sp-4);gap:var(--sp-5);flex-direction:column;flex-shrink:0;display:flex;overflow-y:auto}.sidebar-section{gap:var(--sp-2);flex-direction:column;display:flex}.sidebar-section h2{font-size:var(--fs-sm);margin:0 0 var(--sp-2) 0;color:var(--fg-1);text-transform:uppercase;letter-spacing:.08em;font-weight:600}.viewer{background:var(--bg-2);flex:1;min-width:0;min-height:0;position:relative}.viewer canvas{display:block}.viewer-pan,.viewer-pan canvas{cursor:grab}.viewer-pan:active,.viewer-pan canvas:active{cursor:grabbing}.viewer-trena,.viewer-trena canvas{cursor:crosshair}.trena-overlay{top:var(--sp-4);z-index:var(--z-overlay);align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-4);-webkit-backdrop-filter:blur(6px);border:1px solid var(--border-strong);border-radius:var(--r-md);color:var(--fg-1);font-size:var(--fs-sm);box-shadow:var(--sh-2);max-width:calc(100% - var(--sp-5) * 2);background:#131110eb;display:flex;position:absolute;left:50%;transform:translate(-50%)}.trena-overlay>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.trena-overlay button{background:var(--bg-3);color:var(--fg-1);border:1px solid var(--border-strong);padding:var(--sp-1) var(--sp-3);border-radius:var(--r-sm);font-size:var(--fs-xs);cursor:pointer;transition:background var(--t-fast);font-family:inherit}.trena-overlay button:hover:not(:disabled){background:var(--bg-4)}.trena-overlay button:disabled{opacity:.5;cursor:not-allowed}.trena-overlay button.is-active{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600}.trena-overlay button.is-active:hover{background:var(--accent-hover);border-color:var(--accent-hover)}button{font-family:inherit}.btn-primary{background:var(--accent);color:var(--on-accent);border:1px solid var(--accent);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);font-size:var(--fs-md);cursor:pointer;transition:background var(--t-fast), transform var(--t-fast);justify-content:center;align-items:center;gap:var(--sp-2);font-weight:600;line-height:1;display:inline-flex}.btn-primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn-primary:active:not(:disabled){background:var(--accent-pressed);border-color:var(--accent-pressed);transform:scale(.98)}.btn-primary:disabled{background:var(--bg-3);border-color:var(--bg-3);color:var(--fg-3);cursor:not-allowed}.btn-secondary{background:var(--bg-2);color:var(--fg-1);border:1px solid var(--border-strong);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);font-size:var(--fs-sm);cursor:pointer;transition:background var(--t-fast), border-color var(--t-fast), transform var(--t-fast);justify-content:center;align-items:center;gap:var(--sp-2);line-height:1;display:inline-flex}.btn-secondary:hover:not(:disabled){background:var(--bg-3);border-color:var(--bg-4)}.btn-secondary:active:not(:disabled){transform:scale(.98)}.btn-secondary:disabled{opacity:.5;cursor:not-allowed}.btn-secondary.is-active{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn-secondary.is-active:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn-icon{background:var(--bg-2);color:var(--fg-1);border:1px solid var(--border-strong);border-radius:var(--r-sm);cursor:pointer;width:36px;height:36px;font-size:var(--fs-md);transition:background var(--t-fast), border-color var(--t-fast), transform var(--t-fast);place-items:center;padding:0;display:grid}.btn-icon:hover:not(:disabled){background:var(--bg-3);border-color:var(--bg-4)}.btn-icon:active:not(:disabled){transform:scale(.96)}.btn-icon:disabled{opacity:.4;cursor:not-allowed}.btn-ghost{color:var(--fg-2);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);cursor:pointer;font-size:var(--fs-sm);transition:background var(--t-fast), color var(--t-fast);background:0 0;border:none}.btn-ghost:hover:not(:disabled){background:var(--bg-3);color:var(--fg-0)}.card{background:var(--bg-2);border:1px solid var(--border-subtle);border-radius:var(--r-md);padding:var(--sp-3);transition:border-color var(--t-fast), transform var(--t-fast), box-shadow var(--t-fast)}@media (hover:hover){.card:hover{box-shadow:var(--sh-2);transform:translateY(-1px)}}.btn-trena{background:var(--bg-2);color:var(--fg-1);border:1px solid var(--border-strong);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);font-size:var(--fs-sm);cursor:pointer;transition:background var(--t-fast), border-color var(--t-fast), color var(--t-fast), transform var(--t-fast);white-space:nowrap;align-items:center;gap:6px;font-family:inherit;display:inline-flex}.btn-trena:hover:not(:disabled){background:var(--bg-3);border-color:var(--bg-4)}.btn-trena:active:not(:disabled){transform:scale(.97)}.btn-trena-ativo{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn-trena-ativo:hover{background:var(--accent-hover)!important;border-color:var(--accent-hover)!important}.btn-trena:disabled{opacity:.4;cursor:not-allowed}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[role=tab]:focus-visible,[role=button]:focus-visible{box-shadow:var(--sh-focus);border-radius:var(--r-sm);outline:none}.toolbar-mobile{top:var(--sp-3);z-index:var(--z-overlay);gap:var(--sp-2);padding:var(--sp-1);-webkit-backdrop-filter:blur(6px);border:1px solid var(--border-strong);border-radius:var(--r-pill);box-shadow:var(--sh-2);background:#131110eb;display:flex;position:absolute;left:50%;transform:translate(-50%)}.toolbar-mobile .btn-trena{border-radius:var(--r-pill);padding:var(--sp-2) var(--sp-4);font-size:var(--fs-sm);border:none;min-height:36px;font-weight:500}.vistas-overlay{bottom:var(--sp-4);right:var(--sp-4);z-index:var(--z-overlay);gap:var(--sp-1);padding:var(--sp-1);-webkit-backdrop-filter:blur(6px);border:1px solid var(--border-strong);border-radius:var(--r-md);box-shadow:var(--sh-2);background:#131110eb;display:flex;position:absolute}.vistas-overlay button{color:var(--fg-1);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);font-size:var(--fs-xs);cursor:pointer;transition:background var(--t-fast), color var(--t-fast);background:0 0;border:1px solid #0000;min-width:44px;font-family:inherit;font-weight:500}.vistas-overlay button:hover{background:var(--bg-3);color:var(--fg-0)}.vistas-overlay button:active{background:var(--bg-4);transform:scale(.97)}.exposure-control{top:var(--sp-4);left:var(--sp-4);z-index:var(--z-overlay);align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);-webkit-backdrop-filter:blur(6px);border:1px solid var(--border-strong);border-radius:var(--r-pill);font-size:var(--fs-xs);box-shadow:var(--sh-2);transition:background var(--t-fast);background:#131110eb;display:flex;position:absolute}.exposure-control-icon{font-size:var(--fs-md);color:var(--accent);line-height:1}.exposure-control input[type=range]{width:110px;accent-color:var(--accent);cursor:pointer}.exposure-control-valor{font-family:var(--font-mono);text-align:right;min-width:44px;color:var(--fg-1);font-size:var(--fs-xs)}.exposure-control-reset{border:1px solid var(--border-strong);color:var(--fg-2);cursor:pointer;width:24px;height:24px;font-size:var(--fs-sm);transition:background var(--t-fast), color var(--t-fast);background:0 0;border-radius:50%;place-items:center;padding:0;display:grid}.exposure-control-reset:hover{background:var(--bg-3);color:var(--fg-0)}.exposure-control-toggle{-webkit-backdrop-filter:blur(6px);border:1px solid var(--border-strong);color:var(--accent);width:40px;height:40px;font-size:var(--fs-lg);cursor:pointer;top:var(--sp-4);left:var(--sp-4);z-index:var(--z-overlay);box-shadow:var(--sh-2);background:#131110eb;border-radius:50%;place-items:center;display:none;position:absolute}.trena-label{background:var(--accent);color:var(--on-accent);padding:var(--sp-1) var(--sp-2);border-radius:var(--r-sm);font-family:var(--font-mono);pointer-events:none;white-space:nowrap;box-shadow:var(--sh-2);flex-direction:column;align-items:center;gap:2px;font-weight:600;display:flex}.trena-label strong{font-size:var(--fs-sm)}.trena-label small{font-size:var(--fs-xs);opacity:.8}.cota-label{color:var(--accent);font-family:var(--font-mono);font-weight:700;font-size:var(--fs-sm);text-shadow:-1px -1px 0 var(--bg-2), 1px -1px 0 var(--bg-2), -1px 1px 0 var(--bg-2), 1px 1px 0 var(--bg-2);pointer-events:none;white-space:nowrap;background:0 0}.app-footer{padding:var(--sp-2) var(--sp-5);font-size:var(--fs-xs);color:var(--fg-2);border-top:1px solid var(--border-subtle);background:var(--bg-0);text-align:center;flex-shrink:0}.upload-form{gap:var(--sp-3);flex-direction:column;display:flex}.upload-form h2{font-size:var(--fs-md);margin:0 0 var(--sp-1) 0;color:var(--fg-0);font-weight:600}.upload-form label{gap:var(--sp-1);font-size:var(--fs-xs);color:var(--fg-2);text-transform:uppercase;letter-spacing:.06em;flex-direction:column;font-weight:500;display:flex}.upload-form input[type=text],.upload-form input[type=number]{background:var(--bg-2);border:1px solid var(--border-strong);color:var(--fg-0);padding:var(--sp-2) var(--sp-3);border-radius:var(--r-sm);font-family:var(--font-mono);font-size:var(--fs-sm);transition:border-color var(--t-fast);text-transform:none;letter-spacing:normal}.upload-form input[type=text]:focus,.upload-form input[type=number]:focus{border-color:var(--border-focus);outline:none}.upload-form input[type=file]{color:var(--fg-2);font-size:var(--fs-xs)}.form-info{font-size:var(--fs-xs);color:var(--fg-2);line-height:var(--lh-normal);margin:0}.upload-form fieldset{border:1px solid var(--border-subtle);border-radius:var(--r-md);padding:var(--sp-3);gap:var(--sp-2);flex-direction:column;margin:0;display:flex}.upload-form legend{font-size:var(--fs-xs);color:var(--fg-2);padding:0 var(--sp-2);text-transform:uppercase;letter-spacing:.06em}.dim-row{grid-template-columns:1fr 1fr 1fr;gap:var(--sp-2)!important;display:grid!important}.file-input{padding:var(--sp-2) var(--sp-3);border:1px dashed var(--border-strong);border-radius:var(--r-sm);background:var(--bg-2);cursor:pointer;transition:border-color var(--t-fast), background var(--t-fast);align-items:center;gap:var(--sp-3)!important;text-transform:none!important;letter-spacing:normal!important;flex-direction:row!important;display:flex!important}.file-input:hover{border-color:var(--accent);background:var(--bg-3)}.file-input.has-file{border-style:solid;border-color:var(--success)}.file-input>.face-rotulo{min-width:70px;color:var(--fg-1);font-weight:600;font-size:var(--fs-sm);text-transform:none;letter-spacing:normal}.file-input input[type=file]{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.file-input-status{font-size:var(--fs-xs);color:var(--fg-2);font-family:var(--font-mono);text-transform:none;letter-spacing:normal;text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.file-input.has-file .file-input-status{color:var(--success)}.faces-grid .face-input{align-items:center;gap:var(--sp-2);flex-direction:row}.faces-grid .face-input>span{min-width:70px;font-weight:500}.face-input-file{font-family:var(--font-mono);color:var(--fg-2);margin-left:var(--sp-2);font-size:var(--fs-xs)}.upload-form button[type=submit]{background:var(--accent);color:var(--on-accent);border:1px solid var(--accent);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);cursor:pointer;font-weight:600;font-size:var(--fs-md);justify-content:center;align-items:center;gap:var(--sp-2);transition:background var(--t-fast), transform var(--t-fast);width:100%;display:inline-flex}.upload-form button[type=submit]:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.upload-form button[type=submit]:active:not(:disabled){transform:scale(.99)}.upload-form button[type=submit]:disabled{background:var(--bg-3);border-color:var(--bg-3);color:var(--fg-3);cursor:not-allowed}.upload-spinner{border:2px solid;border-top-color:#0000;border-radius:50%;width:14px;height:14px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.form-erro{background:var(--danger-bg);color:#fecaca;padding:var(--sp-3);border-radius:var(--r-md);font-size:var(--fs-sm);line-height:var(--lh-normal);border:1px solid #7f1d1d}.form-erro ul{margin:var(--sp-1) 0 0 var(--sp-4);padding:0}.form-erro-face{margin-top:var(--sp-1);font-size:var(--fs-xs)}.form-erro code{padding:0 var(--sp-1);font-family:var(--font-mono);background:#0000004d;border-radius:2px}.blocos-list{gap:var(--sp-1);flex-direction:column;max-height:320px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.bloco-item-wrap{align-items:stretch;gap:var(--sp-1);display:flex;position:relative}.bloco-item{text-align:left;background:var(--bg-2);border:1px solid var(--border-subtle);color:var(--fg-1);padding:var(--sp-3);border-radius:var(--r-md);cursor:pointer;gap:var(--sp-1) var(--sp-3);min-height:56px;transition:background var(--t-fast), border-color var(--t-fast), transform var(--t-fast);flex:1;grid-template-columns:1fr auto;align-items:center;display:grid}.bloco-item:hover:not(:disabled){border-color:var(--accent);background:var(--bg-3)}.bloco-item:active:not(:disabled){transform:scale(.99)}.bloco-item-ativo,.bloco-item:disabled{background:var(--bg-3);border-color:var(--accent);cursor:default}.bloco-item-titulo{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--fg-0);grid-column:1;font-weight:600}.bloco-item-dim{font-size:var(--fs-xs);color:var(--fg-2);font-family:var(--font-mono);grid-column:1}.bloco-item-data{font-size:var(--fs-xs);color:var(--fg-3);text-align:right;grid-area:1/2/span 2;align-self:center}.bloco-item-share{background:var(--bg-2);border:1px solid var(--border-subtle);width:48px;min-height:48px;color:var(--fg-2);border-radius:var(--r-md);cursor:pointer;font-size:var(--fs-md);transition:background var(--t-fast), border-color var(--t-fast), color var(--t-fast);flex-shrink:0;place-items:center;padding:0;display:grid}.bloco-item-share:hover{background:var(--bg-3);border-color:var(--accent);color:var(--fg-0)}.bloco-item-share-ok{font-weight:700;background:var(--success-bg)!important;border-color:var(--success)!important;color:var(--success)!important}.lista-vazia{font-size:var(--fs-sm);color:var(--fg-2);margin:0;font-style:italic}.blocos-empty{align-items:center;gap:var(--sp-2);padding:var(--sp-5) var(--sp-3);color:var(--fg-2);text-align:center;flex-direction:column;display:flex}.blocos-empty svg{color:var(--fg-3);opacity:.6}.blocos-empty-title{font-size:var(--fs-md);color:var(--fg-1);margin:0;font-weight:600}.blocos-empty-hint{font-size:var(--fs-sm);color:var(--fg-2);margin:0}.preview-texturas{gap:var(--sp-2);grid-template-columns:repeat(auto-fill,minmax(120px,1fr));display:grid}.preview-face{gap:var(--sp-1);background:var(--bg-2);border:1px solid var(--border-subtle);border-radius:var(--r-md);padding:var(--sp-2);transition:transform var(--t-fast), border-color var(--t-fast);flex-direction:column;margin:0;display:flex}@media (hover:hover){.preview-face:hover{border-color:var(--border-strong);transform:scale(1.02)}}.preview-face figcaption{font-size:var(--fs-xs);color:var(--fg-2);justify-content:space-between;align-items:center;font-weight:500;display:flex}.preview-face-deduzida{opacity:.6;border-style:dashed!important}.badge-deduzida{font-size:var(--fs-xs);background:var(--bg-3);color:var(--fg-2);padding:1px var(--sp-2);border-radius:var(--r-pill);text-transform:uppercase;letter-spacing:.04em;font-weight:600}.preview-face img{object-fit:contain;background:var(--bg-3);border-radius:var(--r-sm);width:100%;height:80px}.preview-placeholder{height:80px;color:var(--fg-3);font-size:var(--fs-xs);background:var(--bg-3);border-radius:var(--r-sm);place-items:center;display:grid}.preview-meta{font-size:var(--fs-xs);color:var(--fg-2);font-family:var(--font-mono)}.preview-dim{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--fg-2);font-family:var(--font-mono);display:block}.publico-erro{padding:var(--sp-5);font-size:var(--fs-md);color:var(--danger);background:var(--danger-bg);border-radius:var(--r-md);font-family:var(--font-mono);border:1px solid #7f1d1d;margin:auto}.toast-portal{bottom:var(--sp-5);z-index:var(--z-toast);pointer-events:none;position:fixed;left:50%;transform:translate(-50%)}.toast{align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);background:var(--bg-1);border:1px solid var(--border-strong);border-radius:var(--r-md);color:var(--fg-0);font-size:var(--fs-sm);box-shadow:var(--sh-3);pointer-events:auto;animation:toast-up var(--t-slow);max-width:calc(100vw - var(--sp-5) * 2);display:inline-flex}.toast-sucesso{border-color:var(--success)}.toast-sucesso .toast-icon{color:var(--success)}.toast-erro{border-color:var(--danger)}.toast-erro .toast-icon{color:var(--danger)}.toast-info .toast-icon{color:var(--info)}.toast-icon{flex-shrink:0;width:18px;height:18px}@keyframes toast-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.tooltip-wrap{display:inline-flex;position:relative}.tooltip-text{background:var(--bg-0);color:var(--fg-0);border:1px solid var(--border-strong);padding:var(--sp-1) var(--sp-2);border-radius:var(--r-sm);font-size:var(--fs-xs);white-space:nowrap;pointer-events:none;opacity:0;transition:opacity var(--t-fast);z-index:var(--z-overlay);box-shadow:var(--sh-1);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%)}.tooltip-wrap:hover .tooltip-text,.tooltip-wrap:focus-within .tooltip-text{opacity:1}.tabs{gap:var(--sp-3);flex-direction:column;display:flex}.tabs-list{gap:var(--sp-1);border-bottom:1px solid var(--border-subtle);scrollbar-width:none;padding-bottom:0;display:flex;overflow-x:auto}.tabs-list::-webkit-scrollbar{display:none}.tabs-tab{color:var(--fg-2);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-sm);cursor:pointer;transition:color var(--t-fast), border-color var(--t-fast);white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;font-weight:500}.tabs-tab:hover{color:var(--fg-0)}.tabs-tab[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}.tabs-panel{gap:var(--sp-3);flex-direction:column;display:flex}.viewer-empty{background:var(--bg-2);padding:var(--sp-5);z-index:var(--z-overlay);place-items:center;display:grid;position:absolute;inset:0}.viewer-empty-inner{align-items:center;gap:var(--sp-4);text-align:center;flex-direction:column;max-width:420px;display:flex}.viewer-empty svg{color:var(--fg-3)}.viewer-empty-title{font-size:var(--fs-lg);color:var(--fg-1);margin:0;font-weight:600}.viewer-empty-hint{font-size:var(--fs-sm);color:var(--fg-2);line-height:var(--lh-normal);margin:0}.viewer-skeleton{-webkit-backdrop-filter:blur(2px);z-index:var(--z-overlay);pointer-events:none;background:#0a0908d9;place-items:center;display:grid;position:absolute;inset:0}.viewer-skeleton-inner{align-items:center;gap:var(--sp-3);color:var(--fg-1);font-size:var(--fs-sm);flex-direction:column;display:flex}.viewer-skeleton-spinner{width:36px;height:36px;color:var(--accent);animation:1.5s linear infinite spin}.mobile-topbar{align-items:center;gap:var(--sp-2);width:100%;display:none}.mobile-topbar-title{text-align:center;font-size:var(--fs-md);color:var(--fg-0);justify-content:center;align-items:center;gap:var(--sp-2);flex:1;font-weight:600;display:flex}.mobile-drawer-backdrop{z-index:var(--z-drawer);opacity:0;pointer-events:none;transition:opacity var(--t-slow);background:#00000080;position:fixed;inset:0}.mobile-drawer-backdrop.is-open{opacity:1;pointer-events:auto}.mobile-drawer{background:var(--bg-1);border-right:1px solid var(--border-strong);width:80%;max-width:360px;box-shadow:var(--sh-3);z-index:calc(var(--z-drawer) + 1);transition:transform var(--t-slow);flex-direction:column;display:flex;position:fixed;top:0;bottom:0;left:0;overflow:hidden;transform:translate(-100%)}.mobile-drawer.is-open{transform:translate(0)}.mobile-drawer-header{padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border-subtle);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.mobile-drawer-title{font-size:var(--fs-md);color:var(--fg-0);margin:0;font-weight:600}.mobile-drawer-content{padding:var(--sp-4);gap:var(--sp-4);flex-direction:column;flex:1;display:flex;overflow-y:auto}@media (width<=1280px){.sidebar{width:320px}}@media (width<=1024px){.sidebar{width:280px}.app-header h1{font-size:var(--fs-md)}.app-header{padding:var(--sp-3) var(--sp-4)}}@media (width<=640px){.desktop-only{display:none!important}.mobile-topbar{display:flex}.app-header{padding:var(--sp-2) var(--sp-3);gap:var(--sp-2)}.app-header>h1.desktop-only,.app-header-actions.desktop-only,.sidebar.desktop-sidebar,.app-footer{display:none}.vistas-overlay{bottom:var(--sp-3);right:var(--sp-3);left:var(--sp-3);scrollbar-width:none;justify-content:flex-start;overflow-x:auto}.vistas-overlay::-webkit-scrollbar{display:none}.vistas-overlay button{flex-shrink:0;min-width:56px;min-height:44px}.exposure-control{display:none}.exposure-control.is-open{top:calc(var(--sp-4) + 48px);display:flex}.exposure-control-toggle{display:grid}.trena-overlay{top:calc(var(--sp-4) + 48px + var(--sp-2));left:var(--sp-3);right:var(--sp-3);max-width:none;font-size:var(--fs-xs);transform:none}}
