:root {
  --navy-950:#07162b; --navy-900:#0b1f3a; --navy-800:#12345b;
  --blue-700:#1557b0; --blue-600:#1d6bd1; --blue-100:#e8f1ff;
  --teal-700:#08776d; --teal-100:#dcf7f2; --amber-700:#9a5b05; --amber-100:#fff2d8;
  --red-700:#b4232c; --red-100:#ffe8e9; --green-700:#147a46; --green-100:#e4f7ec;
  --ink:#162437; --muted:#617086; --line:#d9e1eb; --surface:#fff; --canvas:#f4f7fb;
  --shadow:0 10px 30px rgba(19,43,76,.08); --radius:14px; --radius-sm:9px;
  --font:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
*{box-sizing:border-box} html{font-size:16px} body{margin:0;min-height:100vh;background:var(--canvas);color:var(--ink);font-family:var(--font);line-height:1.45}
button,input,select{font:inherit} a{color:var(--blue-700)} .hidden{display:none!important}.muted{color:var(--muted)}
.icon{width:1.15rem;height:1.15rem;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;vertical-align:-.2em;flex:none}
.brand{display:inline-flex;align-items:center;gap:11px;color:var(--navy-900);font-weight:760;letter-spacing:-.02em}.brand-mark{display:grid;place-items:center;width:39px;height:39px;border-radius:11px;background:var(--navy-900);color:#fff}.brand-mark .icon{width:23px;height:23px}.brand small{display:block;color:var(--muted);font-size:.68rem;font-weight:650;letter-spacing:.08em;text-transform:uppercase}
.topbar{height:68px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 clamp(18px,4vw,48px)}
.page{width:min(1220px,calc(100% - 32px));margin:28px auto 64px}.page-narrow{width:min(520px,calc(100% - 28px));margin:38px auto 64px}
.page-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:22px}.eyebrow{margin:0 0 5px;color:var(--blue-700);font-size:.76rem;font-weight:750;text-transform:uppercase;letter-spacing:.09em}h1{font-size:clamp(1.65rem,3vw,2.25rem);line-height:1.12;letter-spacing:-.035em;margin:0}h2{font-size:1.05rem;letter-spacing:-.015em;margin:0}p{margin:0}
.grid{display:grid;gap:18px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.span-2{grid-column:span 2}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px;margin-bottom:18px}.card-flat{box-shadow:none}.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:18px}.card-title{display:flex;align-items:center;gap:10px}.card-title .icon{color:var(--blue-700)}.card-sub{color:var(--muted);font-size:.87rem;margin-top:4px}
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.cluster{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.session{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:.88rem}.session strong{color:var(--ink)}
label{display:block;margin:0 0 6px;color:#34445a;font-size:.79rem;font-weight:700}input,select{width:100%;min-height:44px;border:1px solid #c8d3df;background:#fff;color:var(--ink);border-radius:var(--radius-sm);padding:10px 12px;outline:none;transition:border-color .15s,box-shadow .15s}input:focus,select:focus{border-color:var(--blue-600);box-shadow:0 0 0 3px rgba(29,107,209,.12)}input::placeholder{color:#91a0b2}.field{min-width:0}.row{display:flex;gap:12px;align-items:end}.row>.field,.row>div{flex:1}.form-stack{display:grid;gap:14px}.check{display:flex;align-items:flex-start;gap:10px;cursor:pointer}.check input{width:18px;min-height:18px;margin-top:1px}.check span{font-size:.9rem}.check small{display:block;color:var(--muted);font-weight:400;margin-top:2px}.form-stack+button{margin-top:16px}.section-label{font-size:.9rem;margin:22px 0 10px;color:#405168;text-transform:uppercase;letter-spacing:.05em}
button,.btn{min-height:42px;border:0;border-radius:var(--radius-sm);padding:10px 15px;background:var(--blue-700);color:#fff;font-weight:720;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;transition:background .15s,transform .1s,box-shadow .15s}button:hover,.btn:hover{background:var(--navy-800)}button:active,.btn:active{transform:translateY(1px)}button:disabled{opacity:.45;cursor:not-allowed}.secondary{background:#fff;color:var(--navy-900);border:1px solid #becbd9}.secondary:hover{background:#f3f6fa}.ghost{background:transparent;color:var(--blue-700);border:1px solid transparent}.ghost:hover{background:var(--blue-100)}.danger{color:var(--red-700)}.block{width:100%}.compact{min-height:34px;padding:6px 10px;font-size:.79rem}.icon-btn{width:36px;height:36px;min-height:36px;padding:0;background:#fff;color:var(--navy-900);border:1px solid var(--line)}
.msg{border:1px solid transparent;border-radius:10px;padding:11px 13px;margin-top:12px;font-size:.88rem}.msg.info{background:var(--blue-100);border-color:#cbdfff;color:#164b8d}.msg.ok{background:var(--green-100);border-color:#bde7ce;color:var(--green-700)}.msg.err{background:var(--red-100);border-color:#fac5c8;color:var(--red-700)}.msg.warn{background:var(--amber-100);border-color:#f5d799;color:var(--amber-700)}
.badge,.tag{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:4px 9px;font-size:.72rem;font-weight:750;white-space:nowrap}.badge.blue{background:var(--blue-100);color:var(--blue-700)}.badge.green,.tag.in{background:var(--green-100);color:var(--green-700)}.badge.red,.tag.out{background:var(--red-100);color:var(--red-700)}.badge.neutral{background:#edf1f5;color:#53647a}
.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:11px}table{width:100%;border-collapse:collapse;min-width:680px}th{text-align:left;color:#5b6b80;background:#f7f9fc;font-size:.7rem;text-transform:uppercase;letter-spacing:.055em;padding:10px 12px;border-bottom:1px solid var(--line)}td{padding:11px 12px;border-bottom:1px solid #e8edf3;font-size:.83rem;vertical-align:middle}tr:last-child td{border-bottom:0}tbody tr:hover{background:#fbfcfe}.empty{border:1px dashed #cbd5e1;border-radius:10px;padding:18px;text-align:center;color:var(--muted);font-size:.87rem}
.auth-shell{min-height:100vh;display:grid;grid-template-columns:minmax(300px,42%) 1fr}.auth-side{background:var(--navy-950);color:#fff;padding:clamp(32px,6vw,80px);display:flex;flex-direction:column;justify-content:space-between}.auth-side .brand{color:#fff}.auth-side .brand small{color:#9db1ca}.auth-promise{max-width:520px}.auth-promise h1{font-size:clamp(2.2rem,5vw,4rem);margin-bottom:18px}.auth-promise p{color:#b8c6d8;max-width:42ch}.trust-list{display:grid;gap:13px;margin-top:30px}.trust-item{display:flex;gap:11px;align-items:center;color:#dfe8f3;font-size:.9rem}.trust-item .icon{color:#66d6c8}.auth-main{display:grid;place-items:center;padding:28px}.auth-card{width:min(430px,100%);background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow);padding:30px}.auth-card h1{font-size:1.65rem}.auth-card .lead{color:var(--muted);margin:8px 0 24px}
.worker-shell{min-height:100vh;background:#edf2f7}.worker-top{height:68px;background:var(--navy-950);color:#fff;display:flex;align-items:center;justify-content:center}.worker-top .brand{color:#fff}.worker-top .brand small{color:#9db1ca}.worker-main{width:min(500px,calc(100% - 28px));margin:26px auto 60px}.tenant-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:15px}.tenant-name{font-weight:760}.secure-label{display:flex;align-items:center;gap:6px;color:var(--teal-700);font-size:.75rem;font-weight:730}
.status{border-radius:14px;border:1px solid var(--line);padding:18px;display:flex;gap:14px;align-items:flex-start;margin:18px 0}.status .status-icon{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;flex:none}.status.searching .status-icon{background:var(--blue-100);color:var(--blue-700)}.status.inside{border-color:#9ed8b6;background:#f3fcf7}.status.inside .status-icon{background:var(--green-100);color:var(--green-700)}.status.outside{border-color:#efc2c5;background:#fff8f8}.status.outside .status-icon{background:var(--red-100);color:var(--red-700)}.st-main{font-weight:780}.st-sub{color:var(--muted);font-size:.84rem;margin-top:3px}.worker-card{overflow:hidden}.access-view{text-align:center;padding:8px 0 2px}.access-view h2{font-size:1.2rem;margin:0 0 7px}.access-view>p:not(.helper){color:var(--muted);font-size:.89rem;max-width:36ch;margin:0 auto 18px}.access-symbol{width:54px;height:54px;border-radius:15px;display:grid;place-items:center;margin:0 auto 15px;background:#eef2f6;color:var(--navy-900)}.access-symbol .icon{width:27px;height:27px}.worker-session-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 13px;border:1px solid var(--line);border-radius:11px;background:#f8fafc}.worker-session-bar strong{display:block;font-size:.91rem}.worker-session-label{display:block;color:var(--muted);font-size:.68rem;text-transform:uppercase;letter-spacing:.07em;font-weight:750}.flow{position:relative;margin:24px 0 18px;padding-top:1px}.flow-track{position:absolute;left:12.5%;right:12.5%;top:15px;height:2px;background:#dce3ea;overflow:hidden}.flow-track span{display:block;width:0;height:100%;background:var(--green-700);transition:width .34s ease-out}.flow-steps{position:relative;list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(4,1fr)}.flow-steps li{display:grid;justify-items:center;gap:7px;color:#7b899b;font-size:.67rem;text-align:center;font-weight:680}.flow-dot{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#fff;border:2px solid #cdd6e0;color:transparent;transition:background .22s ease-out,border-color .22s ease-out,color .22s ease-out,box-shadow .22s ease-out}.flow-dot .icon{width:15px;height:15px}.flow-steps li.active{color:var(--navy-900)}.flow-steps li.active .flow-dot{border-color:var(--blue-700);box-shadow:0 0 0 4px rgba(21,87,176,.10)}.flow-steps li.done{color:var(--green-700)}.flow-steps li.done .flow-dot{background:var(--green-700);border-color:var(--green-700);color:#fff;animation:step-complete .28s ease-out}.permission-help{display:grid;gap:4px;border-left:3px solid var(--amber-700);background:var(--amber-100);color:#70460d;border-radius:8px;padding:12px 13px;margin:12px 0;font-size:.82rem}.permission-help span{color:#765a34}.big-result{font-size:1.55rem;font-weight:800;letter-spacing:-.03em;margin-bottom:8px}.result-box{text-align:center;padding:24px 0 0}.result-mark{width:64px;height:64px;border-radius:50%;display:grid;place-items:center;margin:0 auto 14px;background:var(--green-100);color:var(--green-700)}.result-mark .icon{width:34px;height:34px;stroke-width:2.2}#reader{overflow:hidden;border-radius:12px}.helper{text-align:center;margin-top:18px;font-size:.85rem}@keyframes step-complete{0%{transform:scale(.82)}70%{transform:scale(1.08)}100%{transform:scale(1)}}
.qr-page{min-height:100vh;background:var(--navy-950);color:#fff;display:grid;place-items:center;padding:28px}.qr-panel{text-align:center}.qr-panel .brand{color:#fff;margin-bottom:22px}.qr-frame{background:#fff;border-radius:20px;padding:22px;display:inline-grid;place-items:center;box-shadow:0 22px 70px rgba(0,0,0,.3)}.qr-frame img{display:block;width:min(360px,70vw);height:auto}.countdown{margin-top:18px;color:#aebfd4;font-size:.9rem}.qr-site{font-size:clamp(1.7rem,4vw,2.7rem);margin-bottom:20px}.qr-hint{color:#b7c5d6;margin-top:16px}
.poster{background:#fff;color:var(--navy-950);text-align:center;padding:34px;min-height:100vh}.poster-inner{max-width:720px;margin:auto;border:1px solid var(--line);padding:42px;border-radius:18px}.poster .brand{justify-content:center;margin-bottom:26px}.poster h1{font-size:2.4rem}.poster .sub{color:var(--muted);font-size:1.12rem;margin:8px 0 24px}.poster .qr-frame{box-shadow:none;border:2px solid var(--navy-900)}.poster-steps{display:flex;justify-content:center;gap:24px;flex-wrap:wrap;margin-top:24px}.poster-step{display:flex;align-items:center;gap:7px;font-weight:700;font-size:.88rem}.poster .foot{max-width:540px;color:var(--muted);margin:22px auto 0}.poster-actions{margin-top:28px}
dialog{border:0;border-radius:16px;padding:0;box-shadow:0 30px 90px rgba(4,19,39,.25);width:min(480px,calc(100% - 28px))}dialog::backdrop{background:rgba(4,19,39,.58)}.dialog-body{padding:25px}.dialog-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.credential-box{border:1px solid #abd9bf;background:#f2fbf6;border-radius:12px;padding:16px;margin-top:14px}.credential-row{display:grid;grid-template-columns:90px 1fr;gap:8px;margin-top:7px;font-size:.88rem}.credential-value{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:750;word-break:break-all}.callout{border-left:3px solid var(--blue-600);padding:11px 13px;background:#f4f8ff;color:#3f536b;font-size:.84rem}
.site-map{height:310px;border:1px solid var(--line);border-radius:12px;margin-bottom:7px;background:#e8edf2;overflow:hidden}.map-hint,.field-help{display:block;color:var(--muted);font-size:.75rem;margin:0 0 15px}.radius-control{display:grid;grid-template-columns:1fr 108px;gap:14px;align-items:end}.radius-control input[type=range]{padding:0;border:0;box-shadow:none;accent-color:var(--green-700)}.radius-value{display:flex;align-items:center;gap:7px}.radius-value input{text-align:right}.radius-value span{font-weight:750;color:var(--muted)}select[multiple]{min-height:104px;padding:6px}select[multiple] option{padding:7px 8px;border-radius:5px}.action-menu{position:relative;display:inline-block}.action-menu summary{list-style:none;min-height:36px;border:1px solid var(--line);border-radius:8px;padding:7px 11px;background:#fff;color:var(--navy-900);font-size:.78rem;font-weight:730;cursor:pointer}.action-menu summary::-webkit-details-marker{display:none}.action-menu summary::after{content:'›';display:inline-block;margin-left:8px;transform:rotate(90deg)}.action-menu[open] summary{border-color:var(--blue-600);box-shadow:0 0 0 3px rgba(29,107,209,.1)}.action-menu-panel{position:absolute;right:0;top:calc(100% + 6px);z-index:500;width:220px;padding:6px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 36px rgba(19,43,76,.18)}.action-menu-panel a,.action-menu-panel button{width:100%;min-height:36px;justify-content:flex-start;padding:8px 9px;border:0;background:#fff;color:var(--ink);font-size:.78rem;font-weight:650;text-align:left}.action-menu-panel a:hover,.action-menu-panel button:hover{background:#f2f5f8}.action-menu-panel .danger{color:var(--red-700)}.leaflet-control-attribution{font-size:10px!important}
@media(max-width:860px){.auth-shell{grid-template-columns:1fr}.auth-side{display:none}.grid-2,.grid-3{grid-template-columns:1fr}.span-2{grid-column:auto}.page-heading{align-items:flex-start;flex-direction:column}.row{flex-direction:column;align-items:stretch}.page{width:min(100% - 22px,760px);margin-top:18px}.card{padding:17px}.topbar{padding:0 14px}.topbar .session span{display:none}}
@media(max-width:520px){.auth-main{padding:14px}.auth-card{padding:22px}.worker-main{margin-top:15px}.poster{padding:0}.poster-inner{border:0;border-radius:0;padding:28px 18px}.poster h1{font-size:1.9rem}.poster-steps{gap:12px}.site-map{height:260px}.radius-control{grid-template-columns:1fr}.action-menu-panel{position:fixed;left:14px;right:14px;bottom:14px;top:auto;width:auto}}
@media print{.poster{padding:0}.poster-inner{border:0;padding:10px}.poster-actions{display:none}.poster .qr-frame img{width:320px}.topbar{display:none}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
