:root{--p5-blue:#466981;--p5-navy:#1c2630;--p5-gray:#8b8c89;--p5-light:#dfe0dc;--p5-white:#fff;--danger:#b42318;--ok:#177245;--shadow:0 12px 32px #10182014}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Inter,Segoe UI,Arial,sans-serif;color:var(--p5-navy);background:#f4f6f7}body{font-size:16px}button,input,select,textarea{font:inherit}button,.button{border:0;border-radius:8px;padding:.7rem 1rem;background:var(--p5-blue);color:#fff;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:.5rem}.button.secondary,button.secondary{background:#e8eef1;color:var(--p5-navy)}.button.danger,button.danger{background:var(--danger)}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{width:100%;padding:.72rem;border:1px solid #bcc7ce;border-radius:7px;background:#fff;color:var(--p5-navy)}label{display:grid;gap:.35rem;font-size:.875rem;font-weight:600}.appbar{height:64px;background:var(--p5-navy);color:#fff;display:flex;align-items:center;padding:0 1.25rem;gap:1rem}.brand{font-weight:800;letter-spacing:.08em}.brand span{color:#9fc0d5}.appbar nav{margin-left:auto;display:flex;gap:.5rem}.shell{max-width:1440px;margin:auto;padding:1.25rem}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.card{background:#fff;border:1px solid #dde3e6;border-radius:10px;box-shadow:var(--shadow);padding:1rem}.card h2,.card h3{margin:.15rem 0 .5rem}.muted{color:#66747d}.badge{display:inline-flex;padding:.25rem .55rem;border-radius:6px;background:#e9f0f4;color:#35596f;font-size:.75rem;font-weight:700}.form{display:grid;gap:1rem}.login-shell{min-height:100vh;display:grid;place-items:center;padding:1rem;background:linear-gradient(140deg,var(--p5-navy),#334b5c)}.login{width:min(420px,100%);padding:2rem;background:#fff;border-radius:12px}.error{color:var(--danger);font-size:.875rem}.viewer-page{height:100dvh;overflow:hidden;background:#0d141a}.viewer-top{position:absolute;z-index:10;top:.75rem;left:.75rem;right:.75rem;height:54px;background:#17222ce8;color:#fff;border:1px solid #ffffff24;border-radius:10px;display:flex;align-items:center;padding:.5rem .75rem;gap:.5rem;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.viewer-top .title{font-weight:700;margin-right:auto}.viewer-canvas{width:100%;height:100%;display:block}.toolrail{position:absolute;z-index:11;left:.75rem;top:74px;display:grid;gap:.5rem}.toolrail button{width:46px;height:46px;padding:0;justify-content:center;background:#17222ce8}.panel{position:absolute;z-index:10;right:.75rem;top:74px;width:320px;max-height:calc(100dvh - 90px);overflow:auto;background:#f9fbfcec;border:1px solid #ffffff52;border-radius:10px;padding:1rem;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.panel h3{font-size:1rem;margin:.25rem 0 .75rem}.panel section{display:grid;gap:.65rem;margin-top:1rem;padding-top:1rem;border-top:1px solid #d7e0e5}.model-row{display:flex;align-items:center;gap:.6rem;padding:.5rem 0;border-bottom:1px solid #dce3e7}.model-row input{width:auto}.properties{font-size:.84rem;display:grid;grid-template-columns:minmax(90px,auto) 1fr;gap:.35rem .7rem}.properties dt{font-weight:700}.properties dd{margin:0;overflow-wrap:anywhere}.viewer-status{position:absolute;z-index:12;bottom:1rem;left:50%;transform:translate(-50%);background:#17222ce8;color:#fff;padding:.55rem .8rem;border-radius:8px}.hidden{display:none!important}@media(max-width:760px){.shell{padding:.75rem}.viewer-top{left:.45rem;right:.45rem;top:.45rem}.viewer-top .desktop-only{display:none}.toolrail{left:.45rem;top:auto;bottom:.5rem;right:.45rem;display:flex;justify-content:center}.toolrail button{width:44px;height:44px}.panel{top:66px;right:.45rem;width:min(300px,calc(100vw - .9rem));max-height:calc(100dvh - 126px)}.viewer-status{bottom:4.2rem;white-space:nowrap;max-width:90vw;overflow:hidden;text-overflow:ellipsis}}.actions{display:flex;gap:.5rem;flex-wrap:wrap}.stack{display:grid;gap:.75rem}.model-card{border:1px solid #dbe2e6;border-radius:9px;padding:.85rem;background:#fbfcfc}.model-head{display:flex;gap:.65rem;align-items:center}.model-head h3{margin-right:auto}.upload{display:grid;grid-template-columns:1fr auto;gap:.5rem;margin-top:.75rem}.upload progress,.upload [data-status]{grid-column:1/-1;width:100%}dialog{border:0;max-width:min(600px,calc(100vw - 2rem))}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.65rem;border-bottom:1px solid #dce3e7}
