:root{font-family:Inter,Segoe UI,Arial,sans-serif;color:#102f4d;background:#f4f7fa;--nav:#073f69;--blue:#1479c9;--line:#d7e1ea;--muted:#62778a;--danger:#b42318;--ok:#18794e}
*{box-sizing:border-box}body{margin:0;min-height:100vh}button,input,select,textarea{font:inherit}.hidden{display:none!important}.login-shell{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#073f69,#1479c9);padding:24px}.login-card{width:min(420px,100%);background:white;border-radius:18px;padding:36px;box-shadow:0 24px 70px #002b5066}.brand-mark{font-size:32px;font-weight:800;color:#073f69}.login-card p{margin:4px 0 28px;color:var(--muted)}label{display:grid;gap:7px;margin:16px 0;font-weight:600}input,select,textarea{width:100%;border:1px solid #b9c8d5;border-radius:8px;padding:11px;background:white}button{border:0;border-radius:8px;padding:10px 14px;cursor:pointer}.primary{background:var(--blue);color:#fff;font-weight:700}.secondary{background:#e8f0f6;color:#073f69}.error{color:var(--danger);margin-top:14px;min-height:20px}.app-shell{min-height:100vh;display:grid;grid-template-columns:250px 1fr;grid-template-rows:76px 1fr;grid-template-areas:"head head" "side main"}.topbar{grid-area:head;background:var(--nav);color:#fff;display:flex;align-items:center;padding:0 24px;gap:18px;position:sticky;top:0;z-index:20}.brand{display:grid;font-size:20px;font-weight:800}.brand small{font-size:12px;font-weight:400;color:#c7dced}.top-actions{margin-left:auto;display:flex;align-items:center;gap:12px}.user-button{background:#e7f2fb;color:#073f69;font-weight:700}.icon-button{display:none;background:transparent;color:#fff;font-size:25px}.status-dot{font-size:13px}.status-dot:before{content:"";display:inline-block;width:9px;height:9px;border-radius:50%;background:#43c784;margin-right:6px}.sidebar{grid-area:side;background:var(--nav);padding:14px 10px;overflow-y:auto}.nav-item{width:100%;display:flex;align-items:center;text-align:left;background:transparent;color:#eaf4fb;margin:2px 0;padding:12px 14px}.nav-item.active,.nav-item:hover{background:var(--blue)}.content{grid-area:main;padding:28px;min-width:0}.page-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px}.page-heading h1{margin:0;font-size:30px}.page-heading p{margin:5px 0;color:var(--muted)}.cards{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:16px}.card,.panel{background:#fff;border:1px solid var(--line);border-radius:12px;padding:20px;box-shadow:0 2px 8px #173c5c0a}.metric{font-size:36px;font-weight:800;color:var(--nav)}.card p{margin:5px 0;color:var(--muted)}.clickable{cursor:pointer}.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}.toolbar input{max-width:400px}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:10px;background:#fff}table{width:100%;border-collapse:collapse;min-width:760px}th,td{text-align:left;padding:11px 12px;border-bottom:1px solid var(--line);font-size:14px}th{background:#edf4f9;color:#294c69;position:sticky;top:0}tr.selectable:hover{background:#f0f7fc;cursor:pointer}.badge{display:inline-block;border-radius:999px;padding:4px 9px;background:#e8f0f6}.badge.good{background:#dff4e8;color:var(--ok)}.badge.warn{background:#fff0cc;color:#815b00}.notice{padding:12px 14px;border-radius:8px;margin-bottom:14px;background:#e8f2fb}.notice.error{background:#ffe8e6;color:var(--danger)}.empty{padding:45px;text-align:center;color:var(--muted)}dialog{border:0;border-radius:12px;width:min(1000px,94vw);max-height:90vh;padding:0;box-shadow:0 20px 70px #001e3c55}dialog form{padding:26px;overflow:auto;max-height:90vh}.dialog-close{float:right;background:transparent;font-size:24px}.detail-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.detail-grid div{padding:10px;background:#f4f7fa;border-radius:8px}.detail-grid small{display:block;color:var(--muted)}.scrim{display:none}
@media(max-width:850px){.app-shell{grid-template-columns:1fr;grid-template-areas:"head" "main"}.topbar{padding:0 14px}.icon-button{display:block}.sidebar{position:fixed;left:-270px;top:76px;bottom:0;width:260px;z-index:30;transition:left .2s}.sidebar.open{left:0}.scrim.show{display:block;position:fixed;inset:76px 0 0;background:#001e3c66;z-index:25}.content{padding:18px}.cards{grid-template-columns:1fr}.top-actions .status-dot,.top-actions .secondary{display:none}.detail-grid{grid-template-columns:1fr 1fr}}
@media(max-width:500px){.brand small{display:none}.page-heading{display:block}.detail-grid{grid-template-columns:1fr}.login-card{padding:26px}}
.model-stage{height:min(68vh,720px);min-height:420px;background:linear-gradient(#e8eef3,#fff);border:1px solid var(--line);border-radius:10px;overflow:hidden}.model-stage model-viewer{width:100%;height:100%;--poster-color:transparent}.viewer-help{color:var(--muted);font-size:13px;margin:8px 0}.progress-box{padding:24px;text-align:center}.spinner{width:38px;height:38px;border:4px solid #dce8f1;border-top-color:var(--blue);border-radius:50%;animation:spin 1s linear infinite;margin:10px auto}@keyframes spin{to{transform:rotate(360deg)}}
.tabs{display:flex;gap:4px;overflow:auto;margin:0 0 16px;border-bottom:1px solid var(--line)}.tab{border-radius:8px 8px 0 0;background:#e8f0f6;color:#234b6a;white-space:nowrap}.tab.active{background:var(--blue);color:white}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:0 18px}.action-bar{margin-top:18px}.danger{background:#fee4e2;color:#a11b12}.small{padding:6px 9px;font-size:13px}.check{display:flex;align-items:center;gap:8px}.check input{width:auto}.toolbar select{min-width:240px}@media(max-width:650px){.form-grid{grid-template-columns:1fr}.content{padding:12px}.toolbar>*{flex:1 1 100%}.page-heading h1{font-size:24px}}

.build-photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:18px;margin-top:20px}.build-photo-card{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}.build-photo-card>div{padding:14px}.build-photo-card p{margin:8px 0;font-size:14px}.photo-open{width:100%;border-radius:0;display:grid;gap:8px;padding:10px}.photo-open img{width:100%;height:210px;object-fit:contain;background:#edf4f8}.photo-open span{font-size:13px}.photo-pass{color:var(--ok);font-weight:700}.photo-blocked{color:var(--danger);font-weight:700}button:disabled{cursor:not-allowed;opacity:.5}.muted{color:var(--muted)}
