:root{color-scheme:dark;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;--accent: #3a7bd5}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;width:100%;background:#14181d;color:#e8eaed;overflow:hidden;overscroll-behavior:none}.viewer-root{position:fixed;top:0;right:0;bottom:0;left:0;touch-action:none}.viewer-root canvas{display:block;width:100%!important;height:100%!important}.overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.overlay button{pointer-events:auto}.hud{position:absolute;left:0;right:0;display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem;flex-wrap:wrap;padding-top:max(.75rem,env(safe-area-inset-top));padding-bottom:.75rem;padding-left:max(.9rem,env(safe-area-inset-left));padding-right:max(.9rem,env(safe-area-inset-right))}.hud-top{top:0;background:linear-gradient(to bottom,rgba(0,0,0,.45),transparent)}.hud-left,.hud-right{display:flex;align-items:center;gap:.5rem}.hud-right{flex-wrap:wrap;justify-content:flex-end}.badge{font-size:.68rem;font-weight:700;letter-spacing:.08em;background:var(--accent);color:#fff;padding:.15rem .45rem;border-radius:5px}.project-name{font-weight:600;font-size:.95rem;text-shadow:0 1px 4px rgba(0,0,0,.6)}.seg{display:flex;background:#14181d99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);border-radius:9px;overflow:hidden}.seg-btn{border:0;background:transparent;color:#cdd2d8;font:inherit;font-size:.85rem;padding:.4rem .8rem;cursor:pointer}.seg-btn.active{background:var(--accent);color:#fff}.seg-btn:disabled{color:#6b7178;cursor:not-allowed}.icon-btn{width:38px;height:38px;display:grid;place-items:center;font-size:1.1rem;color:#e8eaed;background:#14181d99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);border-radius:9px;cursor:pointer}.icon-btn:active{background:#3a7bd566}.loading{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;justify-items:center;gap:.9rem;background:#14181d59}.spinner{width:34px;height:34px;border:3px solid rgba(255,255,255,.18);border-top-color:var(--accent);border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.progress{width:min(60vw,280px);height:6px;background:#ffffff24;border-radius:99px;overflow:hidden}.progress-bar{height:100%;background:var(--accent);transition:width .15s ease}.loading-text{font-size:.85rem;color:#aab0b7}.error-box{max-width:320px;text-align:center;background:#281616d9;border:1px solid #5b2b2b;border-radius:12px;padding:1rem 1.25rem}.error-box p{color:#ff9d96;font-size:.85rem;margin:.5rem 0 0;word-break:break-word}.pill{font:inherit;font-size:.85rem;color:#cdd2d8;padding:.4rem .8rem;background:#14181d99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);border-radius:9px;cursor:pointer}.pill.active{background:var(--accent);border-color:var(--accent);color:#fff}.walk-hint{position:absolute;bottom:max(1rem,env(safe-area-inset-bottom));left:50%;transform:translate(-50%);font-size:.8rem;color:#cdd2d8;background:#14181d8c;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:.35rem .7rem;border-radius:8px;white-space:nowrap;pointer-events:none}.joystick{position:absolute;left:max(1.25rem,env(safe-area-inset-left));bottom:calc(max(1.25rem,env(safe-area-inset-bottom)) + 2.5rem);width:116px;height:116px;border-radius:50%;background:#14181d66;border:1px solid rgba(255,255,255,.16);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto;touch-action:none;display:grid;place-items:center}.joystick-thumb{width:52px;height:52px;border-radius:50%;background:#3a7bd5d9;box-shadow:0 2px 10px #0006}.vert-controls{position:absolute;right:max(1.25rem,env(safe-area-inset-right));bottom:calc(max(1.25rem,env(safe-area-inset-bottom)) + 2.5rem);display:flex;flex-direction:column;gap:.6rem;pointer-events:auto}.vert-btn{width:58px;height:58px;font-size:1.3rem;color:#e8eaed;background:#14181d80;border:1px solid rgba(255,255,255,.16);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:14px;display:grid;place-items:center;touch-action:none;-webkit-user-select:none;user-select:none}.vert-btn:active{background:#3a7bd580}.page-center{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;text-align:center}.page-center a{color:var(--accent)}.app,.login-screen{position:fixed;top:0;right:0;bottom:0;left:0;background:#f4f6f8;color:#1b2027;overflow:hidden;display:flex;flex-direction:column}.app-main{flex:1;overflow:auto;padding:1.5rem}.app-loading,.app-muted{color:#6b7480;padding:1.5rem}.app-error{color:#b42318;background:#fee4e2;border:1px solid #fda29b;padding:.6rem .8rem;border-radius:8px}.app-notice{color:#027a48;background:#d1fae0;border:1px solid #6ce9a6;padding:.6rem .8rem;border-radius:8px;cursor:pointer}.app-header{display:flex;align-items:center;gap:1.25rem;padding:.75rem 1.25rem;background:#fff;border-bottom:1px solid #e3e8ee}.app-brand{font-weight:700;font-size:1.05rem;text-decoration:none;color:#1b2027}.app-brand span{color:#3a7bd5}.app-nav{display:flex;gap:.85rem}.app-nav a{color:#475160;text-decoration:none;font-size:.92rem}.app-nav a:hover{color:#3a7bd5}.app-user{margin-left:auto;display:flex;align-items:center;gap:.75rem}.app-whoami{font-size:.85rem;color:#6b7480}.btn{font:inherit;font-size:.9rem;border-radius:8px;padding:.5rem .9rem;border:1px solid transparent;cursor:pointer}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:#3a7bd5;color:#fff}.btn-primary:hover:not(:disabled){background:#316bbb}.btn-ghost{background:transparent;border-color:#cdd5df;color:#475160}.btn-ghost:hover{background:#eef1f5}.login-screen{align-items:center;justify-content:center}.login-card{width:min(92vw,360px);background:#fff;border:1px solid #e3e8ee;border-radius:14px;padding:2rem 1.75rem;box-shadow:0 10px 30px #141e3214;display:flex;flex-direction:column;gap:.85rem}.login-brand{margin:0;font-size:1.5rem}.login-brand span{color:#3a7bd5}.login-sub{margin:0 0 .5rem;color:#6b7480;font-size:.9rem}.field{display:flex;flex-direction:column;gap:.3rem;font-size:.85rem;color:#475160}.field input{font:inherit;padding:.55rem .7rem;border:1px solid #cdd5df;border-radius:8px;background:#fff;color:#1b2027}.field input:focus{outline:2px solid #b6cdf0;border-color:#3a7bd5}.login-error{color:#b42318;font-size:.85rem;margin:0}.projects-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.25rem}.projects-head h1{margin:0;font-size:1.4rem}.new-project{display:flex;gap:.5rem}.new-project input{font:inherit;padding:.5rem .7rem;border:1px solid #cdd5df;border-radius:8px;min-width:200px}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem}.project-card{background:#fff;border:1px solid #e3e8ee;border-radius:12px;padding:1rem;display:flex;flex-direction:column;gap:.6rem}.project-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem}.project-card-top h2{margin:0;font-size:1.05rem}.project-card-meta{display:flex;justify-content:space-between;font-size:.8rem;color:#6b7480}.project-card-meta code{background:#eef1f5;padding:.1rem .35rem;border-radius:5px}.project-card-actions{border-top:1px solid #eef1f5;padding-top:.6rem;min-height:1.5rem}.switch{display:inline-flex;align-items:center;gap:.4rem;font-size:.85rem;color:#475160;cursor:pointer}.btn-sm{padding:.3rem .6rem;font-size:.82rem}.project-card{text-decoration:none;color:inherit;transition:border-color .12s,box-shadow .12s}.project-card:hover{border-color:#b6cdf0;box-shadow:0 4px 14px #141e3212}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#141c2873;display:grid;place-items:center;padding:1rem;z-index:50}.modal{width:min(94vw,460px);background:#fff;border-radius:14px;padding:1.5rem;display:flex;flex-direction:column;gap:.85rem}.modal h2{margin:0}.modal-actions{display:flex;justify-content:flex-end;gap:.6rem}.dropzone{border:2px dashed #cdd5df;border-radius:10px;padding:1.4rem 1rem;text-align:center;color:#6b7480;font-size:.9rem;cursor:pointer;background:#fafbfc}.dropzone.over{border-color:#3a7bd5;background:#eef4fc}.dropzone.disabled{opacity:.6;cursor:not-allowed}.dropzone code{background:#eef1f5;padding:.05rem .3rem;border-radius:4px}.progress{height:8px;background:#e3e8ee;border-radius:99px;overflow:hidden}.progress-bar{height:100%;background:#3a7bd5;transition:width .15s ease}.detail{max-width:760px}.detail-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem}.detail-head h1{margin:.4rem 0 .2rem;font-size:1.4rem;display:flex;align-items:center;gap:.6rem}.back-link{color:#3a7bd5;text-decoration:none;font-size:.85rem}.panel{background:#fff;border:1px solid #e3e8ee;border-radius:12px;padding:1.1rem 1.25rem;margin-bottom:1rem}.panel h2{margin:0 0 .8rem;font-size:1rem}.link-row{display:flex;gap:.5rem}.link-row input{flex:1;font:inherit;font-size:.85rem;padding:.5rem .7rem;border:1px solid #cdd5df;border-radius:8px;background:#f7f9fb;color:#1b2027}.link-actions{display:flex;align-items:center;gap:1rem;margin-top:.7rem}.file-list{list-style:none;margin:0 0 .8rem;padding:0;display:flex;flex-direction:column;gap:.4rem}.file-list li{display:flex;align-items:center;gap:.75rem;padding:.4rem .6rem;background:#f7f9fb;border:1px solid #eef1f5;border-radius:8px;font-size:.88rem}.file-list li span:first-child{flex:1;word-break:break-all}.data-table{width:100%;border-collapse:collapse;font-size:.88rem}.data-table th,.data-table td{text-align:left;padding:.5rem .6rem;border-bottom:1px solid #eef1f5}.data-table th{color:#6b7480;font-weight:600;font-size:.78rem;text-transform:uppercase;letter-spacing:.03em}.row-inactive{opacity:.5}.stats{display:flex;gap:2rem;flex-wrap:wrap}.stats div{display:flex;flex-direction:column}.stats strong{font-size:1.2rem}.stats span{font-size:.8rem;color:#6b7480}.user-form{display:flex;gap:.5rem;flex-wrap:wrap}.user-form input,.user-form select{font:inherit;padding:.5rem .7rem;border:1px solid #cdd5df;border-radius:8px}.badge{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:.15rem .45rem;border-radius:6px;white-space:nowrap}.badge-green{background:#d1fae0;color:#027a48}.badge-amber{background:#fef0c7;color:#b54708}.badge-red{background:#fee4e2;color:#b42318}.badge-gray{background:#eaecf0;color:#475160}
