:root{--bg:#f8fafc;--panel:#ffffff;--input-bg:#f1f5f9;--text:#0f172a;--muted:#64748b;--accent:#2563eb;--accent-hover:#1d4ed8;--ok:#16a34a;--error:#dc2626;--warn:#d97706;--border:#e2e8f0;--icon-folder:#f59e0b;--icon-doc:#64748b;--icon-code:#7c3aed;--icon-image:#059669;--icon-archive:#ea580c;--icon-disk:#0891b2;--icon-exe:#e11d48;--header-bg:#0f2a4a;--header-border:#1e3a5f;--header-text:#ffffff;--header-h:56px}.dark{--bg:#0f172a;--panel:#1e293b;--input-bg:#0b1220;--text:#e2e8f0;--muted:#94a3b8;--accent:#2563eb;--accent-hover:#1d4ed8;--ok:#22c55e;--error:#f87171;--warn:#fbbf24;--border:#334155;--icon-folder:#fbbf24;--icon-doc:#94a3b8;--icon-code:#a78bfa;--icon-image:#34d399;--icon-archive:#fb923c;--icon-disk:#22d3ee;--icon-exe:#fb7185;--header-bg:#0a1929;--header-border:#1e3a5f}*{box-sizing:border-box}html{font-size:clamp(16px,.3125vw + 12px,20px)}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.container{max-width:720px;margin:0 auto;padding:2rem 1.25rem}.container.center{min-height:calc(100vh - var(--header-h));display:flex;align-items:center;justify-content:center}.topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}h1{font-size:1.5rem;margin:0 0 .25rem}.muted{color:var(--muted);margin:0;font-size:.9rem}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:1.5rem;display:flex;flex-direction:column;gap:.75rem}.card.login{width:100%;max-width:380px;text-align:center;align-items:center}.login-logo{height:64px;width:auto;margin:.25rem 0}.dark .login-logo-light,.login-logo-dark{display:none}.dark .login-logo-dark{display:block}label{font-size:.9rem}.dropzone,label{color:var(--muted)}.dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;text-align:center;padding:2.25rem 1rem;background:var(--input-bg);border:2px dashed var(--border);border-radius:10px;cursor:pointer;transition:border-color .15s ease,background .15s ease}.dropzone:focus-visible,.dropzone:hover:not(.disabled){border-color:var(--accent);outline:none}.dropzone.dragging{border-color:var(--accent);background:rgba(37,99,235,.1)}.dropzone.disabled{cursor:not-allowed;opacity:.6}.dz-icon{width:42px;height:42px;color:var(--muted)}.dropzone.dragging .dz-icon{color:var(--accent)}.dz-file,.dz-prompt{margin:0;font-size:.95rem}.dz-file strong,.dz-prompt strong{color:var(--text)}.dz-file strong{word-break:break-all}select{color:var(--text);background:var(--input-bg);border:1px solid var(--border);border-radius:8px;padding:.6rem .75rem;width:100%}button,select{font-size:.95rem}button{background:var(--accent);color:white;border:none;border-radius:8px;padding:.6rem 1.1rem;cursor:pointer;transition:background .15s ease}button:hover:not(:disabled){background:var(--accent-hover)}button:disabled{opacity:.5;cursor:not-allowed}button.secondary{background:transparent;border:1px solid var(--border);color:var(--text)}button.danger{background:transparent;border:1px solid var(--warn);color:var(--warn)}button.danger:hover:not(:disabled){background:var(--warn);color:#1a1206}.status{margin:0;font-size:.9rem}.ok,.status.ok{color:var(--ok)}.error,.status.error{color:var(--error)}.status.warn,.warn{color:var(--warn)}.status.muted{color:var(--muted)}.upload-conflicts{margin:0;padding-left:1.1rem;max-height:8rem;overflow-y:auto;font-size:.85rem;word-break:break-all}.upload-progress{width:100%;height:8px;background:var(--input-bg);border:1px solid var(--border);border-radius:999px;overflow:hidden}.upload-progress-bar{height:100%;background:var(--accent);border-radius:999px;transition:width .15s ease}.upload-progress-bar.is-error{background:var(--error)}.upload-progress-bar.is-canceled{background:var(--muted)}.upload-results{display:flex;flex-direction:column;gap:.5rem}.upload-widget{position:fixed;right:1rem;bottom:1rem;z-index:60;width:min(360px,calc(100vw - 2rem));background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,.18);overflow:hidden}.upload-widget-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.6rem .75rem;border-bottom:1px solid var(--border)}.upload-widget-title{font-size:.875rem;font-weight:600;color:var(--text)}.upload-widget-list{list-style:none;margin:0;padding:.5rem .75rem;display:flex;flex-direction:column;gap:.75rem;max-height:45vh;overflow-y:auto}.upload-widget-item{display:flex;flex-direction:column;gap:.3rem}.upload-widget-item-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.upload-widget-name{font-size:.85rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload-widget-status{font-size:.75rem}.upload-widget-icon{flex:none;background:transparent;border:none;padding:0 .25rem;border-radius:6px;font-size:1rem;line-height:1;color:var(--muted);cursor:pointer}.upload-widget-icon:hover:not(:disabled){background:var(--input-bg);color:var(--text)}.upload-widget-clear{margin:0 .75rem .75rem;width:calc(100% - 1.5rem);font-size:.8rem;padding:.4rem .75rem}.app-header{position:-webkit-sticky;position:sticky;top:0;z-index:50;background:var(--header-bg);color:var(--header-text);border-bottom:1px solid var(--header-border)}.app-header-inner{max-width:90vw;margin:0 auto;padding:0 1.25rem;height:var(--header-h);display:flex;align-items:center}.app-header-spacer{flex:1 1 auto;min-width:1.5rem}.app-header-left{gap:1.5rem;flex:none}.app-brand,.app-header-left{display:flex;align-items:center}.app-brand{gap:.5rem;text-decoration:none;color:var(--header-text)}.brand-logo{height:28px;width:auto;display:block}.app-brand .brand-name{font-weight:700;font-size:1.125rem;letter-spacing:-.01em}.app-brand .brand-sub{font-size:.875rem;color:rgba(255,255,255,.7)}.app-nav{display:flex;align-items:center;gap:.25rem}.app-nav a{padding:.375rem .75rem;border-radius:.5rem;font-size:.875rem;color:rgba(255,255,255,.8);text-decoration:none;transition:background .15s ease,color .15s ease}.app-nav a:hover{color:#fff;background:rgba(255,255,255,.1)}.app-nav a.active{color:#fff;background:rgba(255,255,255,.15)}.app-header-right{display:flex;align-items:center;gap:.75rem;flex:none}.app-user{font-size:.875rem;color:rgba(255,255,255,.7)}.app-header form{margin:0;display:flex}.app-header .app-signout{background:transparent;border:none;padding:0;border-radius:0;font-size:.875rem;color:rgba(255,255,255,.6);cursor:pointer;transition:color .15s ease}.app-header .app-signout:hover{background:transparent;color:#fff}.theme-toggle{display:inline-flex;align-items:center;gap:.125rem;padding:.125rem;border-radius:.5rem;border:1px solid var(--border);background:var(--panel)}.app-header .theme-toggle button{background:transparent;border:none;padding:.25rem .5rem;border-radius:.375rem;font-size:.875rem;line-height:1;cursor:pointer;color:var(--muted);transition:background .15s ease,color .15s ease}.app-header .theme-toggle button:hover:not(:disabled){background:var(--input-bg)}.app-header .theme-toggle button.active{background:var(--accent);color:#fff}@media (max-width:640px){.app-brand .brand-sub,.app-user{display:none}}.viewer-page{max-width:1200px;margin:0 auto;padding:1.5rem 1.25rem}@media (min-width:1600px){.viewer-page{max-width:1500px}}.viewer-head{margin-bottom:1rem;text-align:center}.explorer-wrap{display:flex;flex-direction:column;gap:.5rem}.explorer-path{margin:0;font-size:.8rem;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;word-break:break-all;text-align:center}.explorer{display:flex;align-items:stretch;justify-content:center;overflow:hidden;height:calc(100vh - 220px);min-height:320px;border:1px solid var(--border);border-radius:12px;background:var(--panel)}.explorer-col{flex:0 1 300px;min-width:0;display:flex;flex-direction:column;border-right:1px solid var(--border);overflow-y:auto}.explorer-col:first-child{border-left:1px solid var(--border)}.explorer-col-head{position:-webkit-sticky;position:sticky;top:0;z-index:1;padding:.5rem .75rem;font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:var(--panel);border-bottom:1px solid var(--border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.explorer-list{list-style:none;margin:0;padding:.25rem;display:flex;flex-direction:column;gap:1px}.explorer-empty{padding:.75rem;color:var(--muted);font-size:.85rem}.explorer-item{display:flex;align-items:center;gap:.5rem;width:100%;text-align:left;background:transparent;color:var(--text);border:none;border-radius:6px;padding:.4rem .5rem;font-size:.9rem;cursor:pointer}.explorer-item:hover:not(:disabled){background:var(--input-bg)}.explorer-item.selected,.explorer-item.selected:hover:not(:disabled){background:var(--accent);color:#fff}.explorer-item-icon{flex:none;width:20px;height:20px;display:grid;place-items:center;color:var(--muted)}.explorer-item-icon svg{width:20px;height:20px;display:block}.explorer-item-icon.folder{color:var(--icon-folder)}.explorer-item-icon.doc{color:var(--icon-doc)}.explorer-item-icon.code{color:var(--icon-code)}.explorer-item-icon.image{color:var(--icon-image)}.explorer-item-icon.archive{color:var(--icon-archive)}.explorer-item-icon.disk{color:var(--icon-disk)}.explorer-item-icon.exe{color:var(--icon-exe)}.explorer-item.selected .explorer-item-icon{color:#fff!important}.explorer-item-name{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.explorer-item-chevron{flex:none;color:var(--muted);font-size:1rem;line-height:1}.explorer-item-meta{flex:none;color:var(--muted);font-size:.72rem}.explorer-item.selected .explorer-item-chevron,.explorer-item.selected .explorer-item-meta{color:rgba(255,255,255,.85)}.logs-viewer{display:flex;flex-direction:column;gap:.75rem}.logs-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.75rem}.logs-tab,.logs-tabs{display:flex;gap:.4rem}.logs-tab{align-items:center;background:transparent;border:1px solid var(--border);border-radius:8px;padding:.4rem .75rem;font-size:.85rem;color:var(--muted);cursor:pointer}.logs-tab.active{color:var(--text);border-color:var(--accent,var(--text));background:var(--input-bg)}.logs-tab-count{font-size:.72rem;color:var(--muted);background:var(--panel);border:1px solid var(--border);border-radius:999px;padding:0 .4rem}.logs-actions{display:flex;align-items:center;gap:.6rem}.logs-filter{font-size:.85rem;padding:.35rem .6rem;border:1px solid var(--border);border-radius:8px;background:var(--input-bg);color:var(--text)}.logs-auto{display:flex;align-items:center;gap:.35rem;font-size:.8rem;color:var(--muted);white-space:nowrap}.logs-empty{padding:1rem;text-align:center}.logs-list{list-style:none;margin:0;display:flex;flex-direction:column;gap:.35rem;max-height:calc(100vh - 320px);min-height:240px;overflow-y:auto;border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:.75rem}.logs-line{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;color:var(--text);border-bottom:1px solid var(--border);padding-bottom:.35rem}.logs-line:last-child{border-bottom:none;padding-bottom:0}.logs-line-raw{display:flex;align-items:flex-start;gap:.5rem;color:var(--muted);white-space:pre-wrap;word-break:break-all;padding:.2rem 0}.logs-dot{flex:none;width:8px;height:8px;margin-top:.4em;border-radius:50%;background:var(--muted)}.logs-line-row .logs-dot{margin-top:0;align-self:center}.logs-dot-ok{background:var(--ok)}.logs-dot-warn{background:var(--warn)}.logs-dot-error{background:var(--error)}.logs-line-row{width:100%;flex-wrap:wrap;gap:.5rem;background:none;border:none;padding:.2rem 0;margin:0;font:inherit;color:inherit;text-align:left;cursor:pointer}.logs-line-row,.logs-summary{display:flex;align-items:baseline}.logs-summary{flex:1 1 auto;min-width:0;flex-wrap:wrap;gap:.4rem}.logs-badge,.logs-ts{flex:none;color:var(--muted)}.logs-badge{font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;padding:.05rem .4rem;border-radius:999px;border:1px solid var(--border)}.logs-badge-warn{color:var(--warn);border-color:var(--warn)}.logs-badge-error{color:var(--error);border-color:var(--error)}.logs-msg,.logs-path{color:var(--text)}.logs-path{word-break:break-all}.logs-actor,.logs-chip,.logs-dur{color:var(--muted);font-size:.72rem}.logs-chip{background:var(--input-bg);border:1px solid var(--border);border-radius:6px;padding:0 .35rem;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.logs-chip-event,.logs-chip-method{font-weight:600;color:var(--text)}.logs-chip-req{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.logs-status{flex:none;font-size:.72rem;font-weight:600;padding:0 .35rem;border-radius:6px;border:1px solid var(--border)}.logs-status-ok{color:var(--ok);border-color:var(--ok)}.logs-status-warn{color:var(--warn);border-color:var(--warn)}.logs-status-error{color:var(--error);border-color:var(--error)}.logs-expand-hint{flex:none;margin-left:auto;color:var(--muted)}.logs-raw{margin:.3rem 0 .5rem;padding:.6rem .75rem;background:var(--input-bg);border:1px solid var(--border);border-radius:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;white-space:pre-wrap;word-break:break-all;overflow-x:auto}