:root{--bg:#06101d;--panel:#0a1726;--panel2:#0d1c2d;--line:#20344a;--text:#eef6ff;--muted:#8599ad;--cyan:#55d8ff;--green:#39e28b;--amber:#ffcc66;--red:#ff5f6d;--shadow:0 22px 80px rgba(0,0,0,.32)}*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:Inter,"Noto Sans JP",system-ui,-apple-system,"Segoe UI",sans-serif}button,input,textarea,select{font:inherit}button{cursor:pointer}.eyebrow{font-size:10px;letter-spacing:.18em;font-weight:800;color:#6c849b}.live-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 15px var(--green);margin-right:7px}.topbar{height:70px;display:flex;align-items:center;justify-content:space-between;padding:0 22px;border-bottom:1px solid var(--line);background:rgba(6,16,29,.96);position:sticky;top:0;z-index:1000}.logo{display:flex;gap:11px;align-items:center}.logo-box,.brand-mark{display:grid;place-items:center;background:linear-gradient(135deg,#64e9ff,#37e387);color:#05111b;font-weight:1000}.logo-box{width:36px;height:36px;border-radius:11px}.logo strong{display:block;font-size:15px;letter-spacing:.05em}.logo small{display:block;color:#60798f;font-size:8px;letter-spacing:.17em;margin-top:2px}.top-status{display:flex;align-items:center;gap:10px;color:#8195a7;font-size:12px}.net-badge{border:1px solid #264459;border-radius:999px;padding:7px 10px;font-size:10px;font-weight:900;letter-spacing:.08em}.net-badge i{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--green);margin-right:5px}.net-badge.offline{color:#ff9ba4;border-color:#59303a}.net-badge.offline i{background:var(--red)}.icon-btn,.ghost{color:#a9bed0;background:#0c1c2c;border:1px solid #243a50;border-radius:10px;padding:8px 10px;text-decoration:none;font-size:11px}.workspace{height:calc(100vh - 70px);display:grid;grid-template-columns:minmax(210px,260px) minmax(400px,1fr) minmax(330px,430px);gap:1px;background:var(--line)}.panel{background:var(--panel);min-width:0;overflow:hidden}.channels-panel,.map-panel{padding:18px}.panel-head,.chat-head,.map-toolbar,.weather-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.panel h2,.panel h3{margin:4px 0}.panel h2{font-size:21px}.round-btn{border:1px solid #2d485f;background:#10243a;color:#c9efff;border-radius:12px;width:38px;height:38px;font-size:20px}.channel-list{margin-top:18px;display:flex;flex-direction:column;gap:8px;max-height:calc(100vh - 270px);overflow:auto}.channel-item{display:flex;gap:11px;padding:13px;border:1px solid transparent;border-radius:14px;background:#091523;color:var(--text);text-align:left;width:100%}.channel-item:hover,.channel-item.active{background:#10233a;border-color:#294763}.channel-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:#142a3e;color:var(--cyan);font-size:14px}.channel-meta{min-width:0;flex:1}.channel-meta b{display:block;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.channel-meta small{display:block;color:#6d8498;margin-top:4px;font-size:10px}.side-note{position:absolute;bottom:18px;left:18px;width:calc(min(260px,calc(100vw)) - 36px);max-width:224px;background:#0e2032;border:1px solid #203b51;padding:12px;border-radius:13px;color:#7690a4;font-size:10px}.channels-panel{position:relative}.side-note strong,.side-note span{display:block}.side-note strong{color:#b8cedd;margin-bottom:5px}.chat-panel{display:flex;flex-direction:column;background:#071421}.chat-head{padding:18px 20px;border-bottom:1px solid var(--line);min-height:83px}.chat-head h2{font-size:18px;margin:4px 0}.chat-head p{font-size:11px;color:#70889c;margin:0}.safety-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;padding:9px 12px;border-bottom:1px solid var(--line);background:#081728}.safety-strip button{background:#0d2032;border:1px solid #213b51;color:#b9cddd;border-radius:12px;padding:9px 6px;font-size:15px}.safety-strip span{font-size:10px;margin-left:4px}.messages{flex:1;overflow:auto;padding:20px}.msg{display:flex;gap:10px;margin:0 0 15px}.msg.me{flex-direction:row-reverse}.avatar{width:34px;height:34px;flex:0 0 auto;border-radius:11px;background:#132b40;display:grid;place-items:center;font-weight:900;color:#8fdfff}.bubble-wrap{max-width:78%}.msg-meta{color:#688197;font-size:9px;margin-bottom:4px}.msg.me .msg-meta{text-align:right}.bubble{background:#102439;border:1px solid #203c52;border-radius:5px 16px 16px 16px;padding:10px 12px;font-size:13px;line-height:1.65;white-space:pre-wrap;word-break:break-word}.msg.me .bubble{background:#123429;border-color:#245845;border-radius:16px 5px 16px 16px}.bubble.safety{background:#142438}.safety-badge{font-size:18px;margin-right:5px}.composer{display:grid;grid-template-columns:1fr auto;gap:8px;padding:12px;border-top:1px solid var(--line);background:#081523}.composer textarea{resize:none;max-height:130px;border:1px solid #254056;border-radius:13px;background:#0c1c2c;color:white;padding:12px 13px;outline:none}.composer textarea:focus{border-color:#4b92af}.send-btn,.primary{border:0;border-radius:12px;background:linear-gradient(135deg,#5ce5ff,#37e18a);color:#04121b;font-weight:900;padding:0 18px}.wide{width:100%;min-height:46px}.map-panel{overflow:auto}.map-toolbar{margin-bottom:12px}.map-toolbar h2{font-size:18px}#map{height:43vh;min-height:300px;border-radius:17px;background:#07111e;border:1px solid #20374a;overflow:hidden}.leaflet-container{font-family:inherit}.quake-marker{border-radius:50%;display:grid;place-items:center;background:rgba(255,83,99,.2);border:2px solid #ff6775;box-shadow:0 0 0 8px rgba(255,80,95,.08),0 0 22px rgba(255,80,95,.38);color:white;font-size:9px;font-weight:900}.map-legend{display:flex;justify-content:space-between;color:#70869a;font-size:9px;padding:8px 3px}.quake-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#ff6675;margin-right:5px}.weather-card{background:#0d1f30;border:1px solid #203a50;border-radius:17px;padding:14px;margin-top:8px}.weather-head h3{font-size:15px}.weather-head select{max-width:145px;background:#071522;color:#a9c1d3;border:1px solid #294156;border-radius:9px;padding:6px}.weather-content{margin-top:11px}.weather-days{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.weather-day{background:#091725;border-radius:11px;padding:9px}.weather-day strong{font-size:11px}.weather-icon{font-size:23px;margin:5px 0}.weather-text{font-size:9px;color:#91a7b8;line-height:1.5}.weather-warning{margin-top:9px;border-left:3px solid var(--amber);background:#2a2414;color:#f5d990;padding:9px;font-size:10px;border-radius:5px 10px 10px 5px}.official-note{color:#60768a;font-size:9px;line-height:1.6;margin:10px 3px}.empty-state{height:100%;display:grid;place-content:center;text-align:center;color:#587085}.empty-state b{font-size:16px;color:#8ba2b5;margin-bottom:5px}.empty-state span{font-size:11px}.mobile-tabs{display:none}dialog{width:min(480px,calc(100% - 28px));border:1px solid #2d465c;border-radius:20px;background:#0b1929;color:white;padding:24px;box-shadow:var(--shadow)}dialog::backdrop{background:rgba(1,7,12,.78);backdrop-filter:blur(4px)}dialog label,.auth-card label{display:block;color:#8da2b4;font-size:11px;margin:14px 0}dialog input,.auth-card input{width:100%;background:#071420;border:1px solid #294156;color:white;border-radius:11px;padding:12px;margin-top:6px;outline:none}.dialog-close{float:right;border:0;background:#15283a;color:#9ab1c3;width:32px;height:32px;border-radius:10px}.copy-row{display:grid;grid-template-columns:1fr auto;gap:8px}.copy-row .primary{padding:0 14px}.auth-page{min-height:100vh;background:radial-gradient(circle at 15% 20%,#12324a 0,transparent 30%),radial-gradient(circle at 80% 80%,#0d3a2d 0,transparent 28%),#06101d}.auth-shell{min-height:100vh;max-width:1100px;margin:auto;display:grid;grid-template-columns:1.1fr .9fr;align-items:center;gap:70px;padding:40px}.auth-shell.single{grid-template-columns:minmax(0,540px);justify-content:center}.brand-panel{padding:25px}.brand-mark{width:62px;height:62px;border-radius:20px;font-size:30px;margin-bottom:30px}.brand-panel h1{font-size:clamp(36px,5vw,62px);line-height:1.12;letter-spacing:-.05em;margin:8px 0 20px}.brand-panel>p:not(.eyebrow){color:#91a8ba;line-height:1.8}.mini-status{margin-top:40px;font-size:11px;color:#7c94a7}.auth-card{background:rgba(10,25,41,.86);border:1px solid #294056;border-radius:26px;padding:32px;box-shadow:var(--shadow);backdrop-filter:blur(8px)}.auth-card h2{font-size:30px;margin:5px 0 25px}.auth-foot{color:#637d91;font-size:10px;margin-top:18px}.alert{padding:11px;border-radius:10px;font-size:11px}.alert.error{background:#3b1821;color:#ffadb6;border:1px solid #6b2a36}.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:3000;background:#102337;border:1px solid #36546a;color:#d8e8f3;padding:10px 14px;border-radius:999px;font-size:11px;box-shadow:var(--shadow)}
@media(max-width:1050px){.workspace{grid-template-columns:220px minmax(380px,1fr) 350px}.map-panel{padding:12px}.channels-panel{padding:12px}.side-note{display:none}}
@media(max-width:820px){.topbar{height:60px;padding:0 12px}.logo small,#clock,.top-status .icon-btn:first-of-type{display:none}.workspace{height:calc(100dvh - 108px);display:block;background:var(--bg)}.mobile-tabs{height:48px;display:grid;grid-template-columns:repeat(3,1fr);background:#071421;border-bottom:1px solid var(--line)}.mobile-tabs button{border:0;border-bottom:2px solid transparent;background:transparent;color:#688399;font-size:11px;font-weight:800}.mobile-tabs button.active{color:#bceeff;border-bottom-color:#54d8ff}.panel{display:none;height:100%;padding:13px}.panel.mobile-active{display:flex}.channels-panel.mobile-active,.map-panel.mobile-active{display:block;overflow:auto}.chat-panel.mobile-active{display:flex}.channel-list{max-height:none}.channels-panel{position:static}#map{height:45vh;min-height:280px}.chat-head{padding:13px 14px;min-height:70px}.safety-strip{padding:7px;gap:5px}.safety-strip button{padding:8px 2px}.safety-strip span{display:block;margin:3px 0 0}.messages{padding:14px 10px}.bubble-wrap{max-width:86%}.composer{padding:8px}.weather-card{margin-bottom:18px}.auth-shell{display:block;padding:18px}.brand-panel{padding:18px 5px 30px}.brand-panel h1{font-size:38px}.auth-card{padding:23px}.auth-shell:not(.single) .brand-panel>p:not(.eyebrow),.auth-shell:not(.single) .mini-status{display:none}}
/* v0.1.1 JMA High-resolution Precipitation Nowcast */
.radar-console{margin-top:9px;background:#0a1a29;border:1px solid #203a50;border-radius:15px;padding:10px 11px}.radar-top{display:grid;grid-template-columns:auto auto auto 1fr;gap:6px;align-items:center}.radar-chip{border:1px solid #29465d;background:#0d2234;color:#9eb5c7;border-radius:9px;padding:7px 9px;font-size:10px;font-weight:800;white-space:nowrap}.radar-chip.active{border-color:#4cb8d7;background:#103349;color:#d8f7ff;box-shadow:inset 0 0 0 1px rgba(85,216,255,.08)}.radar-time{min-width:0;text-align:right}.radar-time strong,.radar-time small{display:block}.radar-time strong{font-size:11px;color:#e4f5ff}.radar-time small{font-size:8px;color:#6e879a;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.radar-slider{width:100%;accent-color:#55d8ff;margin:9px 0 3px}.radar-foot{display:flex;align-items:center;gap:10px;color:#637d91;font-size:8px}.radar-foot a{margin-left:auto;color:#79bdd6;text-decoration:none}.rain-dot{display:inline-block;width:9px;height:9px;border-radius:3px;margin:0 4px 0 8px;background:linear-gradient(135deg,#55d8ff,#ffd75c,#ff5268)}.radar-console.is-disabled{opacity:.62}.radar-console.is-error{border-color:#67404a}.radar-console.is-error .radar-time strong{color:#ffadb6}
@media(max-width:430px){.radar-top{grid-template-columns:repeat(3,auto);align-items:center}.radar-time{grid-column:1/-1;text-align:left;margin-top:3px}.radar-chip{padding:7px 8px}.radar-foot{gap:7px}}
/* v0.2.2 reveldraw target / public-private channels / local map / admin */
.channel-actions{display:grid;grid-template-columns:1fr;gap:7px;margin:10px 0 12px}.channel-actions .wide{width:100%}.empty-mini{padding:18px 12px;color:#71899b;font-size:12px;text-align:center;border:1px dashed #25394b;border-radius:12px}.chat-head small{display:block;color:#6d8ca1;font-size:9px;margin-top:5px;letter-spacing:.05em}.map-mode{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin:8px 0}.map-mode button{border:1px solid #29465d;background:#0b1a28;color:#8199aa;padding:7px 4px;border-radius:8px;font-size:9px;font-weight:800}.map-mode button.active{background:#15344a;color:#d8f8ff;border-color:#4abbd9}.opacity-row{display:grid;grid-template-columns:auto 1fr auto;gap:9px;align-items:center;color:#7891a4;font-size:9px;margin-top:5px}.opacity-row input{width:100%;accent-color:#55d8ff}.opacity-row b{color:#c8eafa}.area-select-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:7px;margin:6px 0 13px}.area-select-grid select,.public-search-grid select,.public-search-grid input{min-width:0}.public-search-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto;gap:7px;margin:12px 0}.public-results{display:grid;gap:8px;max-height:55vh;overflow:auto}.public-card{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;border:1px solid #20384b;background:#091827;border-radius:14px;padding:13px}.public-card h3{margin:3px 0 4px;color:#e5f4ff}.public-card p{margin:0 0 5px;color:#91a5b4;font-size:11px}.public-card small{color:#607d91;font-size:9px}.public-card button:disabled{opacity:.45}.dialog-note{font-size:10px;color:#748da0;line-height:1.6}dialog{max-width:min(720px,calc(100vw - 28px));width:620px}dialog select{width:100%;box-sizing:border-box;background:#071420;color:#dcecf8;border:1px solid #2a4053;border-radius:10px;padding:11px}dialog[open]{max-height:90vh;overflow:auto}
.admin-page{background:#06101c;color:#e5f2fb;min-height:100vh}.admin-wrap{max-width:1280px;margin:auto;padding:24px}.admin-hero{padding:12px 2px 20px}.admin-hero h1{font-size:30px;margin:5px 0}.admin-hero p{color:#7690a3}.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}.metric-grid article{background:#0b1928;border:1px solid #20374a;border-radius:16px;padding:17px}.metric-grid span,.metric-grid small{display:block;color:#718b9e;font-size:10px}.metric-grid strong{display:block;font-size:34px;margin:6px 0;color:#e4f7ff}.admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.admin-card{background:#0b1928;border:1px solid #20374a;border-radius:16px;padding:17px}.admin-card-head{display:flex;align-items:center;justify-content:space-between}.admin-card-head h2{font-size:16px}.admin-card-head span{font-size:10px;color:#6d8799}.admin-table{display:grid;gap:5px;margin-top:10px}.admin-table .tr{display:grid;grid-template-columns:minmax(0,1.7fr) auto auto;gap:12px;align-items:center;border-top:1px solid #162c3d;padding:10px 4px;font-size:10px}.admin-table .tr b,.admin-table .tr small{display:block;overflow:hidden;text-overflow:ellipsis}.admin-table .tr small{color:#657f91;margin-top:3px}.presence.on{color:#54e6a4}.presence.off{color:#6f8797}.area-import{max-width:800px}.area-import form{margin:14px 0}.area-import hr{border:0;border-top:1px solid #20374a;margin:24px 0}.metric-inline{display:flex;align-items:baseline;gap:10px;margin:14px 0;padding:12px;background:#071421;border-radius:12px}.metric-inline b{font-size:28px}.metric-inline span{margin-left:auto;color:#6f899b;font-size:10px}.alert.success{background:#143929;color:#9af0bd}
@media(max-width:820px){.map-mode{grid-template-columns:repeat(4,1fr);position:sticky;top:0;z-index:500;background:#071421;padding:5px 0}.area-select-grid,.public-search-grid{grid-template-columns:1fr}.public-card{grid-template-columns:1fr}.metric-grid{grid-template-columns:1fr 1fr}.admin-grid{grid-template-columns:1fr}.admin-wrap{padding:13px}.admin-table .tr{grid-template-columns:1fr auto}.admin-table .tr>span:last-child{display:none}}
@media(max-width:460px){.metric-grid{grid-template-columns:1fr 1fr}.metric-grid strong{font-size:27px}.radar-top{grid-template-columns:repeat(3,auto)}.radar-time{grid-column:1/-1}}

/* v0.2.2 SONAQIA admin / progress refinements */
.admin-hero-row{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.admin-live{display:flex;align-items:center;gap:8px;border:1px solid #21445a;background:#091827;border-radius:999px;padding:8px 12px;color:#82a0b4;font-size:10px}.admin-live b{color:#cceefe}.metric-primary{box-shadow:inset 0 0 0 1px rgba(85,216,255,.10)}.metric-primary strong{color:#7de7ff!important}.metric-danger strong{color:#ff8a94!important}.admin-summary-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}.safety-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:12px}.safety-summary>div,.ops-summary>div{background:#071421;border:1px solid #173047;border-radius:12px;padding:12px}.safety-summary b,.safety-summary strong{display:block}.safety-summary b{font-size:10px;color:#8099aa;margin-top:7px}.safety-summary strong{font-size:24px;margin-top:3px}.safety-pill{display:block;width:22px;height:5px;border-radius:999px}.safety-pill.safe{background:#39e28b}.safety-pill.evacuating{background:#ffcc66}.safety-pill.sos{background:#ff5f6d}.safety-pill.unknown{background:#71879a}.ops-summary{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.ops-summary span{display:block;color:#718b9e;font-size:9px;margin-bottom:6px}.ops-summary b{display:block;color:#dff4ff;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-admin{color:#6e8698;font-size:11px}.import-progress{position:fixed;inset:0;z-index:5000;background:rgba(3,10,18,.82);backdrop-filter:blur(8px);display:grid;place-items:center;padding:20px}.import-progress[hidden]{display:none}.import-progress-card{width:min(580px,100%);background:#0b1928;border:1px solid #2b4a60;border-radius:22px;padding:28px;box-shadow:0 28px 90px #0009}.import-progress-card h2{margin:8px 0;font-size:25px}.import-progress-card p,.import-progress-card small{color:#8197a8;line-height:1.7}.import-spinner{width:44px;height:44px;border-radius:50%;border:4px solid #173147;border-top-color:#48e4bd;animation:sona-spin .8s linear infinite;margin-bottom:18px}.import-running{display:flex;align-items:center;gap:10px;background:#071421;border:1px solid #1c384d;border-radius:12px;padding:13px;margin:18px 0}.pulse-dot{width:9px;height:9px;border-radius:50%;background:#45e4aa;box-shadow:0 0 0 0 rgba(69,228,170,.55);animation:sona-pulse 1.4s infinite}.import-steps{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-bottom:16px}.import-steps span{border:1px solid #183147;background:#081725;color:#91a9ba;border-radius:10px;padding:9px;font-size:10px}@keyframes sona-spin{to{transform:rotate(360deg)}}@keyframes sona-pulse{70%{box-shadow:0 0 0 10px rgba(69,228,170,0)}100%{box-shadow:0 0 0 0 rgba(69,228,170,0)}}
@media(max-width:820px){.admin-hero-row{align-items:flex-start;flex-direction:column}.admin-summary-grid{grid-template-columns:1fr}.safety-summary{grid-template-columns:1fr 1fr}.ops-summary{grid-template-columns:1fr 1fr}.import-steps{grid-template-columns:1fr}}

/* SONAQIA v0.2.3 logo patch */
.brand-logo-mark{width:38px;height:46px;object-fit:contain;display:block;flex:0 0 auto}.auth-brand-logo{width:88px;height:auto;display:block;margin:0 0 26px}.topbar .brand-logo-mark{filter:none}.logo{min-width:0}.logo>div{min-width:0}@media(max-width:820px){.brand-logo-mark{width:33px;height:40px}.auth-brand-logo{width:76px;margin-bottom:20px}}

/* SONAQIA v0.2.4 responsive UI optimization
   - PC: chat is intentionally compact; map receives the flexible width.
   - SP: compact brand/header and tighter controls.
*/
@media (min-width:821px){
  .workspace{
    grid-template-columns:minmax(200px,238px) minmax(310px,360px) minmax(520px,1fr);
  }
  .channels-panel{padding:15px 14px}
  .chat-head{padding:14px 16px;min-height:76px}
  .chat-head h2{font-size:16px}
  .chat-head p{font-size:10px}
  .safety-strip{padding:8px 9px;gap:5px}
  .safety-strip button{padding:8px 4px}
  .messages{padding:15px 12px}
  .bubble-wrap{max-width:84%}
  .bubble{font-size:12px;padding:9px 10px;line-height:1.58}
  .composer{padding:9px}
  .composer textarea{padding:10px 11px}
  .map-panel{padding:14px 15px}
  .map-toolbar{margin-bottom:8px}
  #map{height:50vh;min-height:380px;border-radius:15px}
  .radar-console{margin-top:7px;padding:9px 10px}
  .weather-card{padding:11px;margin-top:7px}
  .weather-day{padding:7px}
}
@media (min-width:1450px){
  .workspace{
    grid-template-columns:238px 350px minmax(760px,1fr);
  }
  #map{height:53vh;min-height:430px}
}
@media (min-width:821px) and (max-width:1180px){
  .workspace{
    grid-template-columns:200px 320px minmax(430px,1fr);
  }
  .channels-panel{padding:12px 10px}
  .map-panel{padding:11px}
  #map{height:47vh;min-height:330px}
}

@media (max-width:820px){
  .topbar{height:52px;padding:0 10px}
  .logo{gap:7px;max-width:54vw}
  .brand-logo-mark{width:24px!important;height:30px!important}
  .logo strong{font-size:12px;letter-spacing:.035em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .logo small{display:none!important}
  .top-status{gap:5px;font-size:10px}
  .net-badge{padding:5px 7px;font-size:8px}
  .top-status .icon-btn{padding:6px 7px;font-size:9px}
  .top-status .icon-btn:first-of-type{display:none}
  #clock{display:none}
  .mobile-tabs{height:44px}
  .workspace{height:calc(100dvh - 96px)}
  .panel{padding:10px}
  .chat-head{padding:10px 11px;min-height:62px}
  .chat-head h2{font-size:15px}
  .chat-head p{font-size:9px}
  .chat-head .ghost{padding:6px 8px;font-size:9px}
  .safety-strip{padding:6px;gap:4px}
  .safety-strip button{padding:7px 2px;font-size:13px;border-radius:9px}
  .safety-strip span{font-size:9px}
  .messages{padding:10px 8px}
  .msg{gap:7px;margin-bottom:11px}
  .avatar{width:29px;height:29px;border-radius:9px;font-size:11px}
  .bubble-wrap{max-width:88%}
  .bubble{font-size:12px;line-height:1.55;padding:8px 9px}
  .composer{padding:7px;gap:6px}
  .composer textarea{padding:10px;border-radius:10px}
  .send-btn{padding:0 13px;border-radius:10px}
  .map-toolbar{margin-bottom:7px}
  .map-toolbar h2{font-size:16px}
  .map-mode{gap:4px;margin:6px 0;padding:3px 0}
  .map-mode button{font-size:8px;padding:7px 2px}
  #map{height:50vh;min-height:310px;border-radius:13px}
  .radar-console{padding:8px;margin-top:7px;border-radius:12px}
  .weather-card{padding:10px;border-radius:13px}
  .weather-days{gap:5px}
  .weather-day{padding:7px 6px}
  .auth-shell{padding:14px}
  .brand-panel{padding:8px 4px 18px;text-align:center}
  .auth-brand-logo{width:50px!important;margin:0 auto 12px!important}
  .brand-panel .eyebrow{font-size:8px}
  .brand-panel h1{font-size:29px!important;line-height:1.18;margin:6px 0 12px}
  .auth-card{padding:20px;border-radius:20px}
  .auth-card h2{font-size:25px;margin-bottom:18px}
}
@media (max-width:430px){
  .logo{max-width:48vw}
  .brand-logo-mark{width:22px!important;height:27px!important}
  .logo strong{font-size:11px}
  .net-badge{display:none}
  .top-status .icon-btn{padding:5px 6px;font-size:8px}
  #map{height:48vh;min-height:285px}
  .radar-chip{font-size:9px;padding:6px 7px}
  .radar-time strong{font-size:10px}
  .auth-brand-logo{width:44px!important}
  .brand-panel h1{font-size:27px!important}
}


/* SONAQIA v0.2.5 location consent + radar deep-zoom guidance */
#shareLocationBtn.has-location{border-color:#41cfa1;background:#103a31;color:#d8fff0;box-shadow:inset 0 0 0 1px rgba(65,207,161,.12)}
.location-dialog{width:min(620px,calc(100vw - 28px))!important}.location-consent-banner{display:flex;flex-direction:column;gap:4px;background:#081827;border:1px solid #244159;border-radius:13px;padding:12px 14px;margin:12px 0}.location-consent-banner b{color:#dff5ff;font-size:13px}.location-consent-banner span{color:#7f9aab;font-size:10px}.location-lead{color:#8aa2b4;font-size:11px;line-height:1.75}.location-precision{border:0;padding:0;margin:14px 0;display:grid;gap:8px}.location-precision legend{color:#718ca0;font-size:10px;font-weight:900;letter-spacing:.08em;margin-bottom:7px}.location-precision label{position:relative;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;margin:0;padding:12px 13px;background:#071522;border:1px solid #213a4e;border-radius:13px;cursor:pointer}.location-precision label:has(input:checked){border-color:#51cfe7;background:#0c2738;box-shadow:inset 0 0 0 1px rgba(81,207,231,.12)}.location-precision input{width:17px;height:17px;margin:0;accent-color:#55d8ff}.location-precision span b,.location-precision span small{display:block}.location-precision span b{color:#ddecf5;font-size:12px}.location-precision span small{color:#748b9c;font-size:9px;line-height:1.55;margin-top:3px}.location-precision em{font-style:normal;font-size:8px;font-weight:900;color:#08211a;background:#58e0a5;padding:4px 6px;border-radius:999px}.location-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:13px}.location-actions button{min-height:46px}.location-warning{color:#ad8d6b;background:#2a2117;border:1px solid #4a3826;border-radius:11px;padding:10px 12px;font-size:9px;line-height:1.65;margin:12px 0 0}.location-card{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:9px;padding:9px 10px;border-radius:11px;background:rgba(5,18,29,.45);border:1px solid rgba(89,173,211,.24)}.location-card>div{display:flex;align-items:center;gap:8px;min-width:0}.location-card>div>span{font-size:16px}.location-card p{margin:0;min-width:0}.location-card p b,.location-card p small{display:block}.location-card p b{font-size:10px;color:#d9f4ff}.location-card p small{font-size:8px;color:#7f9bad;margin-top:2px}.show-location{border:1px solid #31566e;background:#0d2a3d;color:#b9edff;border-radius:8px;padding:6px 8px;font-size:8px;font-weight:900;white-space:nowrap}.radar-resolution-note{display:flex;align-items:flex-start;gap:8px;margin-top:8px;background:#2b2315;border:1px solid #594623;border-radius:10px;padding:8px 10px;color:#e9cc8b}.radar-resolution-note[hidden]{display:none}.radar-resolution-note b{font-size:9px;white-space:nowrap}.radar-resolution-note span{font-size:8px;line-height:1.55;color:#bca36f}
@media(max-width:820px){.location-actions{grid-template-columns:1fr}.location-dialog{width:calc(100vw - 20px)!important}.location-precision label{padding:10px}.location-card{gap:7px;padding:8px}.show-location{padding:6px}.radar-resolution-note{flex-direction:column;gap:3px}}


/* SONAQIA v0.2.6 live emergency location */
.location-toggle-btn.has-location{border-color:#42dca6!important;background:#0e3a2e!important;color:#e1fff4!important;box-shadow:inset 0 0 0 1px rgba(66,220,166,.16)}
.location-live-bar{display:grid;grid-template-columns:8px 1fr;align-items:center;gap:9px;padding:7px 12px;border-bottom:1px solid var(--line);background:#071521;min-height:42px}.location-live-bar>i{width:8px;height:8px;border-radius:50%;background:#708395;box-shadow:0 0 0 4px rgba(112,131,149,.08)}.location-live-bar.on>i{background:#48dda8;box-shadow:0 0 0 4px rgba(72,221,168,.10),0 0 12px rgba(72,221,168,.25)}.location-live-bar b,.location-live-bar small{display:block}.location-live-bar b{font-size:10px;color:#b9cfdd}.location-live-bar.on b{color:#cffff0}.location-live-bar small{font-size:8px;color:#647d90;margin-top:2px;line-height:1.35}
.location-live-explain{display:grid;gap:5px;background:#081826;border:1px solid #203c50;border-radius:12px;padding:11px 12px;margin:10px 0;color:#7f98aa}.location-live-explain b{color:#bfdce9;font-size:10px}.location-live-explain span{font-size:9px;line-height:1.55}.danger-ghost{border:1px solid #75404b;background:#2d161d;color:#ffb8c0;border-radius:12px;font-weight:800}.location-actions{grid-template-columns:1fr 1fr 1fr!important}.location-precision #precisionCityRow em,.location-precision #precisionApproxRow em{white-space:nowrap}.leaflet-tooltip{background:#0b1b29!important;color:#dcecf6!important;border:1px solid #2a4558!important;box-shadow:none!important;font-size:10px!important}.leaflet-tooltip:before{border-top-color:#2a4558!important}
@media(max-width:820px){.location-live-bar{padding:6px 9px;min-height:37px}.location-live-bar b{font-size:9px}.location-live-bar small{font-size:7.5px}.location-actions{grid-template-columns:1fr!important}.location-live-explain{padding:9px}.location-precision em{font-size:7px}}


/* v0.2.8 invite onboarding / hybrid location */
.location-source-note{display:grid;gap:4px;margin:10px 0 12px;padding:10px 12px;border:1px solid #285269;border-radius:12px;background:#092132;color:#8fb1c4}.location-source-note b{font-size:10px;color:#ccefff}.location-source-note span{font-size:9px;line-height:1.6}.location-manual-fallback{display:grid;gap:6px;margin:10px 0;padding:10px 12px;border:1px solid #3c4650;border-radius:12px;background:#111a21;color:#8395a3}.location-manual-fallback>b{font-size:10px;color:#d4e1e9}.location-manual-fallback>span{font-size:9px;line-height:1.55}.manual-location-row{display:grid;grid-template-columns:1fr auto;gap:7px}.manual-location-row input{min-width:0;background:#071420;color:#dcecf8;border:1px solid #2a4053;border-radius:10px;padding:10px}.manual-location-row button{white-space:nowrap}
.invite-manage-dialog{width:min(680px,calc(100vw - 28px))!important}.invite-create-grid{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:end;margin:14px 0}.invite-create-grid label{margin:0}.invite-create-grid input,.invite-create-grid select{width:100%;box-sizing:border-box}.invite-create-grid .primary{min-height:42px;white-space:nowrap}.invite-generated{margin:12px 0;padding:12px;border:1px solid #2b6174;border-radius:13px;background:#092232}.invite-generated>b{display:block;margin-bottom:8px;color:#d9f7ff;font-size:11px}.invite-generated small{display:block;margin-top:7px;color:#7999aa;font-size:9px}.invite-list-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin:18px 0 8px}.invite-list-head b{font-size:11px;color:#dbeef7}.invite-list-head small{font-size:8px;color:#70889a;text-align:right}.invite-list{display:grid;gap:7px;max-height:260px;overflow:auto}.invite-list-card{display:grid;grid-template-columns:1fr auto;align-items:center;gap:10px;padding:10px 11px;border:1px solid #243c4e;border-radius:11px;background:#081622}.invite-list-card.inactive{opacity:.56}.invite-list-card b,.invite-list-card small{display:block}.invite-list-card b{font-size:10px;color:#cee6f2}.invite-list-card small{font-size:8px;color:#718b9c;margin-top:3px}.invite-list-card .danger-ghost{padding:7px 10px}
.invite-shell{padding-top:24px;padding-bottom:24px}.invite-card{width:min(100%,560px)}.invite-logo{display:block;width:54px;height:auto;margin:0 auto 14px}.invite-card h1{margin:4px 0 8px;font-size:clamp(24px,5vw,34px);line-height:1.25;text-align:center}.invite-card>.eyebrow{text-align:center}.invite-description{text-align:center;color:#8ba4b4;line-height:1.65;margin:0 0 14px}.invite-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:14px 0}.invite-summary>div{padding:10px;border:1px solid #233d50;border-radius:11px;background:#071724}.invite-summary span,.invite-summary b{display:block}.invite-summary span{font-size:8px;color:#71899a}.invite-summary b{font-size:10px;color:#d7eaf3;margin-top:4px}.invite-security-note{margin:10px 0 14px;padding:10px 11px;border:1px solid #234b3e;border-radius:11px;background:#0a251e;color:#93cdb8;font-size:9px;line-height:1.6}.invite-current-user{padding:12px;background:#0a1c2a;border-radius:11px;color:#9fb7c6;font-size:11px}.invite-tabs{display:grid;grid-template-columns:1fr 1fr;gap:5px;padding:4px;margin:14px 0 16px;border:1px solid #20394a;border-radius:12px;background:#071521}.invite-tabs a{display:block;padding:10px 8px;border-radius:9px;text-align:center;text-decoration:none;color:#718b9d;font-size:10px;font-weight:900}.invite-tabs a.active{background:#103249;color:#d8f6ff;box-shadow:inset 0 0 0 1px #2d647d}.invite-form{display:grid;gap:2px}.invite-consent{display:grid!important;grid-template-columns:auto 1fr;align-items:start;gap:8px!important;margin:8px 0 12px!important;padding:10px 11px;border:1px solid #2b4252;border-radius:11px;background:#081724}.invite-consent input{width:16px!important;height:16px;margin:2px 0 0!important;accent-color:#55d8ff}.invite-consent span{font-size:9px;line-height:1.55;color:#8aa0ae}.invite-foot{text-align:center;line-height:1.55}.invite-help{text-align:center;color:#8399a8;font-size:10px}
@media(max-width:820px){.manual-location-row{grid-template-columns:1fr}.invite-create-grid{grid-template-columns:1fr 1fr}.invite-create-grid .primary{grid-column:1/-1}.invite-list-head{display:block}.invite-list-head small{display:block;text-align:left;margin-top:3px}.invite-summary{grid-template-columns:1fr}.invite-card{padding:20px}.invite-logo{width:44px}.invite-tabs a{font-size:9px;padding:9px 5px}}

/* SONAQIA v0.3.4 Store Readiness */
.sos-action span{display:grid;gap:1px}.sos-action span small{font-size:7px;font-weight:800;opacity:.72;line-height:1.1}.emergency-service-note{display:flex;align-items:flex-start;gap:8px;padding:7px 12px;border-bottom:1px solid var(--line);background:#251519;color:#d9aab0;font-size:8px;line-height:1.5}.emergency-service-note b{color:#ffd1d6;white-space:nowrap}.emergency-mini{margin-top:12px;padding:9px 10px;border:1px solid #5c3540;border-radius:10px;background:#24151a;color:#e9afb8;font-size:9px;line-height:1.55}.auth-legal-links{display:flex;flex-wrap:wrap;gap:8px 12px;justify-content:center;margin-top:14px}.auth-legal-links a{font-size:9px;color:#7fa6ba;text-decoration:none}.auth-legal-links a:hover{text-decoration:underline}
.msg-actions{display:flex;gap:8px;margin:4px 2px 0;opacity:.48;transition:opacity .15s}.msg:hover .msg-actions,.msg:focus-within .msg-actions{opacity:1}.msg-actions button{appearance:none;border:0;background:transparent;color:#7893a4;font-size:8px;padding:2px 3px;cursor:pointer}.msg-actions button:hover{color:#c8e8f5;text-decoration:underline}.msg.me .msg-actions{justify-content:flex-end}
.policy-dialog,.report-dialog{width:min(560px,calc(100vw - 28px))!important}.policy-dialog p,.report-dialog p{color:#8ca4b4;line-height:1.65}.policy-links{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:13px 0}.policy-links a{display:block;text-align:center;padding:10px 7px;border:1px solid #29475a;border-radius:10px;background:#0a1b29;color:#bde9fa;text-decoration:none;font-size:9px;font-weight:900}.policy-check{display:grid!important;grid-template-columns:auto 1fr;gap:9px!important;align-items:start;margin:12px 0!important;padding:11px;border:1px solid #315367;border-radius:12px;background:#0a1d2b}.policy-check input{width:18px!important;height:18px;margin:1px 0 0!important;accent-color:#53d5ff}.policy-check span{font-size:9px;line-height:1.6;color:#a7c0cf}.policy-actions{display:grid;grid-template-columns:.7fr 1.3fr;gap:8px}.legal-callout{display:grid;gap:5px;margin:14px 0;padding:12px 13px;border:1px solid #2b5769;border-radius:12px;background:#0a2230;color:#97bed0}.legal-callout b{font-size:11px;color:#dcf7ff}.legal-callout span{font-size:9px;line-height:1.65}.legal-callout.emergency{border-color:#6d3d46;background:#29171d;color:#d8a6ae}.legal-callout.emergency b{color:#ffd2d7}.legal-callout.success{border-color:#2c6654;background:#102b23;color:#a7d8c7}.legal-callout.success b{color:#d9ffef}
.legal-page{min-height:100vh;background:#06111d;color:#d9e8f1}.legal-top{min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 22px;border-bottom:1px solid #1e3546;background:#07131f;position:sticky;top:0;z-index:20}.legal-brand{display:flex;align-items:center;gap:9px;color:#e6f4fb;text-decoration:none}.legal-brand img{width:30px;height:30px;object-fit:contain}.legal-brand b{font-size:14px;letter-spacing:.08em}.legal-top nav{display:flex;gap:8px}.legal-top nav a{color:#8fb0c0;text-decoration:none;font-size:10px;padding:7px 9px;border:1px solid #294255;border-radius:9px}.legal-wrap{width:min(920px,calc(100% - 28px));margin:24px auto 50px}.legal-card{padding:clamp(20px,4vw,40px);border:1px solid #223b4d;border-radius:18px;background:#081723;box-shadow:0 18px 60px rgba(0,0,0,.22)}.legal-card h1{margin:3px 0 10px;font-size:clamp(26px,5vw,42px)}.legal-card h2{margin:28px 0 8px;font-size:15px;color:#dcecf4}.legal-card p,.legal-card li{font-size:11px;line-height:1.9;color:#9eb3bf}.legal-card ul{padding-left:1.4em}.legal-card a{color:#67d9ff}.legal-updated{font-size:9px!important;color:#6e8797!important}.legal-footer{display:flex;flex-wrap:wrap;gap:10px 16px;justify-content:center;padding:18px}.legal-footer a{color:#718b9c;text-decoration:none;font-size:9px}.legal-form{display:grid;gap:10px;margin-top:18px}.legal-form label{display:grid;gap:6px;font-size:10px;color:#9fb4c0}.legal-form input,.legal-form select,.legal-form textarea{width:100%;box-sizing:border-box;background:#06131e;color:#e1edf3;border:1px solid #2c4658;border-radius:10px;padding:11px;font:inherit}.legal-form textarea{resize:vertical}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.settings-section{padding:16px;border:1px solid #21394b;border-radius:14px;background:#07141f}.settings-section h2{margin:0 0 9px!important}.settings-section p{margin:7px 0}.settings-dl{display:grid;gap:6px}.settings-dl>div{display:grid;grid-template-columns:90px 1fr;gap:10px;border-bottom:1px solid #172d3d;padding:7px 0}.settings-dl dt{font-size:9px;color:#6f8999}.settings-dl dd{margin:0;font-size:10px;color:#d6e6ee;word-break:break-all}.ghost-link,.danger-link{display:inline-block;padding:8px 10px;border:1px solid #2b4658;border-radius:9px;text-decoration:none!important;font-size:9px!important}.danger-link{border-color:#6d3e48!important;color:#ffb8c2!important;background:#25151a}.danger-zone{border-color:#59353e!important}.danger-button{border:1px solid #864653;background:#401e27;color:#ffd7dd;border-radius:10px;padding:11px 13px;font-weight:900;cursor:pointer}.legal-link-row{display:flex;flex-wrap:wrap;gap:7px}.legal-link-row a{padding:7px 9px;border:1px solid #2a4456;border-radius:8px;text-decoration:none;font-size:9px}.policy-status{padding:8px 10px;border-radius:9px}.policy-status.ok{background:#0d2c23;color:#bce8d7}.policy-status.warn{background:#302619;color:#e7c487}.blocked-list{display:grid;gap:7px}.blocked-list article{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px;border:1px solid #20384a;border-radius:10px}.blocked-list b,.blocked-list small{display:block}.blocked-list b{font-size:10px}.blocked-list small{font-size:8px;color:#6f8999;margin-top:2px}.muted{color:#718896!important}.alert.success{background:#102b23;border-color:#2d6554;color:#c3eadc}
.moderation-list{display:grid;gap:9px}.moderation-item{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:12px;border:1px solid #263e50;border-radius:12px;background:#081722}.moderation-item.closed{opacity:.58}.moderation-main{min-width:0}.moderation-title{display:flex;justify-content:space-between;gap:10px}.moderation-title b{font-size:11px}.moderation-title small,.moderation-main>small{font-size:8px;color:#718b9d}.moderation-main p{font-size:10px;color:#b7c9d4;line-height:1.55;white-space:pre-wrap;word-break:break-word}.moderation-detail{padding:7px 9px;border-radius:8px;background:#102534;color:#8fb4c7;font-size:9px}.moderation-actions{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}.moderation-done{font-size:9px;color:#7f9c8f}.review-credentials code{user-select:all}.review-credentials dl{display:grid;gap:8px}.review-credentials dl>div{display:grid;grid-template-columns:100px 1fr;gap:10px;padding:8px;border-bottom:1px solid #203647}.review-credentials dt{color:#70899a}.review-credentials dd{margin:0;color:#d7edf7}
.metric-grid{grid-template-columns:repeat(6,minmax(0,1fr))}
@media(max-width:1200px){.metric-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.settings-grid{grid-template-columns:1fr}}
@media(max-width:820px){.emergency-service-note{display:grid;gap:2px;padding:6px 9px}.emergency-service-note b{white-space:normal}.msg-actions{opacity:.78}.policy-links{grid-template-columns:1fr}.policy-actions{grid-template-columns:1fr}.legal-top{padding:0 12px}.legal-top nav a:first-child{display:none}.legal-wrap{width:calc(100% - 18px);margin-top:10px}.legal-card{padding:18px 14px;border-radius:14px}.settings-grid{grid-template-columns:1fr}.moderation-item{grid-template-columns:1fr}.moderation-actions{justify-content:flex-start}.metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.settings-dl>div{grid-template-columns:74px 1fr}}

/* SONAQIA v0.3.6 weather dashboard + 12h rain timeline */
.weather-tabs{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin:9px 0 10px;padding:3px;background:#061421;border:1px solid #1b3347;border-radius:11px}
.weather-tabs button{border:0;border-radius:8px;background:transparent;color:#7890a2;padding:8px 10px;font-size:10px;font-weight:900;letter-spacing:.04em}
.weather-tabs button.active{background:#123047;color:#dff6ff;box-shadow:inset 0 0 0 1px rgba(85,216,255,.18)}
.weather-panel[hidden]{display:none!important}.weather-panel.active{display:block}
.weather-current-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-bottom:8px}.weather-current-actions button{min-height:36px;padding:8px 9px;font-size:9px}
.weather-current-meta{min-height:31px;padding:7px 9px;border-radius:9px;background:#071521;border:1px solid #183249;color:#7893a5;font-size:8px;line-height:1.55;margin-bottom:8px}.weather-current-meta b{color:#ccecff}.weather-current-meta span{color:#5f7c91}.weather-inline-error{color:#ff9fa8!important}
.weather-current-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.weather-metric{min-width:0;padding:9px 8px;border:1px solid #1b354a;background:#081827;border-radius:11px}.weather-metric>span{display:block;color:#7891a4;font-size:8px;white-space:nowrap}.weather-metric strong{display:inline-block;margin-top:5px;color:#edf8ff;font-size:22px;line-height:1;font-variant-numeric:tabular-nums}.weather-metric small{margin-left:3px;color:#7190a5;font-size:8px;line-height:1.3}
.weather-content{overflow-x:auto;scrollbar-width:thin}.weather-week-grid{display:grid;grid-template-columns:repeat(7,minmax(92px,1fr));gap:6px;min-width:658px}.weather-week-day{min-width:0;padding:8px 7px;border-radius:10px;border:1px solid #193349;background:#081827;text-align:center}.weather-week-day>strong{display:block;color:#a9c1d0;font-size:8px;white-space:nowrap}.weather-week-day .weather-icon{font-size:21px;margin:5px 0 3px}.weather-week-day .weather-text{height:29px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#d9e9f3;font-size:8px;line-height:1.45}.weather-temp{display:flex;align-items:center;justify-content:center;gap:3px;margin-top:6px;font-size:11px}.weather-temp .max{color:#ff9d83}.weather-temp .min{color:#77d9ff}.weather-temp span{color:#466277}.weather-week-day>small{display:block;margin-top:4px;color:#6f899b;font-size:7px;white-space:nowrap}
.radar-horizon-scale{display:grid;grid-template-columns:repeat(4,1fr);margin:4px 2px 0;color:#647f94;font-size:7px;font-weight:800}.radar-horizon-scale span:nth-child(2),.radar-horizon-scale span:nth-child(3){text-align:center}.radar-horizon-scale span:last-child{text-align:right}.radar-forecast-note{display:flex;gap:8px;align-items:flex-start;margin-top:7px;padding:7px 9px;border-radius:9px;border:1px solid #1d3b50;background:#071725;color:#708ca0}.radar-forecast-note b{color:#a9cbd9;font-size:8px;white-space:nowrap}.radar-forecast-note span{font-size:7.5px;line-height:1.5}
@media(max-width:820px){.weather-current-actions{grid-template-columns:1fr 1fr}.weather-current-grid{grid-template-columns:1fr 1fr}.weather-metric{padding:8px}.weather-metric strong{font-size:20px}.weather-week-grid{grid-template-columns:repeat(7,88px);min-width:max-content}.weather-week-day{padding:7px 6px}.radar-forecast-note{flex-direction:column;gap:3px}}
@media(max-width:390px){.weather-current-actions{grid-template-columns:1fr}.weather-current-actions button{min-height:34px}.weather-current-grid{gap:5px}.weather-metric>span{font-size:7.5px}.weather-metric strong{font-size:19px}.weather-metric small{font-size:7px}}

/* v0.3.6 — member weather / pink location markers / traffic layer */
.map-layer-switches{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 0 8px}.layer-chip{border:1px solid #29465d;background:#0b1a28;color:#8199aa;padding:7px 9px;border-radius:999px;font-size:9px;font-weight:900}.layer-chip.active{background:#15344a;color:#e2f8ff;border-color:#4abbd9;box-shadow:inset 0 0 0 1px rgba(85,216,255,.1)}.layer-updated{margin-left:auto;color:#657f92;font-size:8px}.traffic-legend-line{display:inline-block;width:18px;height:4px;border-radius:99px;margin:0 4px 2px 8px;background:linear-gradient(90deg,#2eab30,#f1bf40,#e70704)}.member-legend-dot{display:inline-grid;place-items:center;width:16px;height:16px;margin:0 3px 0 8px;border-radius:50%;background:#ff4fa0;color:#fff;font-size:9px;box-shadow:0 0 0 2px #fff,0 0 10px rgba(255,79,160,.45)}
.member-location-icon{background:transparent!important;border:0!important}.member-location-pin{position:relative;width:34px;height:34px;border-radius:50% 50% 50% 4px;transform:rotate(-45deg);background:linear-gradient(145deg,#ff72b8,#ee2c8b);border:3px solid #fff;box-shadow:0 4px 12px rgba(0,0,0,.42),0 0 0 2px rgba(255,79,160,.26),0 0 18px rgba(255,79,160,.38);display:grid;place-items:center}.member-location-pin.stale{filter:saturate(.72)}.member-person-glyph{width:21px;height:21px;display:grid;place-items:center;transform:rotate(45deg)}.member-person-glyph svg{width:19px;height:19px;fill:#fff;display:block}.member-status-dot{position:absolute;right:-4px;top:-4px;width:11px;height:11px;border-radius:50%;border:2px solid #fff;transform:rotate(45deg);box-shadow:0 1px 4px rgba(0,0,0,.4)}.member-status-dot.safe{background:#39e28b}.member-status-dot.evacuating{background:#ffcc66}.member-status-dot.sos{background:#ff4a59;box-shadow:0 0 0 3px rgba(255,74,89,.22),0 1px 4px rgba(0,0,0,.4)}.member-status-dot.unknown{background:#7e94a8}.member-name-tooltip{background:#0b1d2d!important;color:#fff!important;border:1px solid #3d5970!important;border-radius:8px!important;box-shadow:0 6px 18px rgba(0,0,0,.28)!important;font-weight:800!important}.member-name-tooltip:before{border-top-color:#3d5970!important}
.weather-self-btn{white-space:nowrap}.weather-member-row,.weather-region-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:end;margin-top:9px}.weather-member-row label,.weather-region-row label{display:grid;gap:5px;margin:0;color:#70899c;font-size:8px;font-weight:800}.weather-member-row select,.weather-region-row select{width:100%;min-width:0;background:#071522;color:#c7dce9;border:1px solid #294156;border-radius:9px;padding:8px 9px;font-size:10px}.weather-target-meta{align-self:stretch;display:flex;align-items:center;justify-content:flex-end;min-width:140px;padding:7px 9px;border-radius:9px;background:#071521;border:1px solid #183249;color:#7893a5;font-size:8px;line-height:1.45;text-align:right}.weather-target-meta[data-state="live"]{border-color:#2c6a56;color:#9be7c5}.weather-target-meta[data-state="area"]{border-color:#335d77;color:#9fd6ef}.weather-target-meta[data-state="missing"],.weather-target-meta[data-state="error"]{border-color:#65404a;color:#ffabb4}.weather-region-row button{min-height:34px;max-width:180px;font-size:8px;line-height:1.35}.weather-share-note{margin-top:7px;color:#607b90;font-size:7.5px;line-height:1.55}.weather-head select{max-width:none}
@media(max-width:820px){.map-layer-switches{position:relative;z-index:499}.layer-updated{width:100%;margin-left:0}.weather-member-row,.weather-region-row{grid-template-columns:1fr}.weather-target-meta{min-width:0;justify-content:flex-start;text-align:left}.weather-region-row button{max-width:none;width:100%}.member-location-pin{width:36px;height:36px}.member-person-glyph svg{width:20px;height:20px}}
@media(max-width:390px){.weather-head{align-items:flex-start}.weather-self-btn{font-size:8px;padding:7px}.map-layer-switches{gap:5px}.layer-chip{flex:1;padding:7px 5px}}


/* SONAQIA v0.3.9 — TomTom Orbis v2 traffic flow + incidents */
.incident-chip.active{border-color:#ff9c5b;background:#3a2417;color:#ffe3d0;box-shadow:inset 0 0 0 1px rgba(255,156,91,.16)}
.incident-legend-dot{display:inline-grid;place-items:center;width:16px;height:16px;margin:0 3px 0 8px;border-radius:50%;background:#ff8b3d;color:#fff;font-size:9px;box-shadow:0 0 0 2px rgba(255,255,255,.9)}
.traffic-incident-popup{min-width:220px;color:#17202a;font-size:12px;line-height:1.5}.traffic-incident-popup>b{display:block;font-size:14px;margin-bottom:4px}.traffic-severity{display:inline-block;background:#f3f4f6;border-radius:999px;padding:2px 7px;font-size:10px;margin-bottom:6px}.traffic-incident-popup p{margin:6px 0}.traffic-incident-popup dl{display:grid;grid-template-columns:58px 1fr;gap:3px 7px;margin:7px 0}.traffic-incident-popup dt{color:#667085}.traffic-incident-popup dd{margin:0;font-weight:600}.traffic-incident-popup small{color:#777}
@media(max-width:820px){.map-layer-switches .layer-updated{width:auto;flex:1 1 45%;min-width:120px}.traffic-incident-popup{min-width:190px}}
@media(max-width:390px){.map-layer-switches .layer-updated{flex-basis:100%}}

/* v0.3.10 weather registration / radar all-zoom UX */
.map-mode{grid-template-columns:repeat(3,1fr)}
.radar-top{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.radar-time{margin-left:auto;min-width:180px;text-align:right}
#radarVisualMode{min-width:78px}
#radarVisualMode.active{border-color:#ffd75c;background:#3a3215;color:#fff1b1;box-shadow:inset 0 0 0 1px rgba(255,215,92,.12)}
.weather-area-status{margin-top:6px;padding:7px 9px;border:1px solid #21394d;border-radius:9px;background:#071521;color:#718da0;font-size:8px;line-height:1.5}
.weather-area-status[data-state="saved"]{border-color:#2f6757;color:#9de4c7;background:#092219}
.weather-area-status[data-state="unsaved"]{border-color:#5f5129;color:#e8cd83;background:#251f0f}
.weather-area-status[data-state="warning"]{border-color:#675323;color:#e4c274;background:#2a2212}
.weather-area-status[data-state="error"]{border-color:#67404a;color:#ffabb4;background:#29131a}
.weather-share-note b{color:#b6d8ea;font-weight:900}
.weather-region-row select{max-height:44px}
@media(max-width:820px){
  .map-mode{grid-template-columns:repeat(3,1fr)}
  .radar-top{display:flex;gap:5px}
  .radar-chip{flex:1 1 calc(50% - 5px);text-align:center;min-height:34px}
  .radar-time{flex:1 0 100%;min-width:0;margin-left:0;text-align:left;margin-top:2px}
  #radarVisualMode{min-width:0}
  .weather-area-status{font-size:8px}
}

/* v0.3.11 point weather + account access */
.account-tier-badge{display:inline-flex;align-items:center;border-radius:999px;padding:5px 9px;font-size:10px;font-weight:800;letter-spacing:.08em;background:#17263a;color:#cbd8e7;border:1px solid #2d4057}.account-tier-badge.premium{background:#362b08;color:#ffe68b;border-color:#806a1c}.account-tier-badge.admin{background:#18382e;color:#8df4c9;border-color:#2c735c}.premium-locked{opacity:.78;border-style:dashed!important}.premium-locked::after{content:'有料';font-size:9px;margin-left:4px;padding:1px 4px;border-radius:999px;background:#ffe58a;color:#352800}.weather-register-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}.weather-provider-note{margin-top:10px;padding:8px 10px;border-radius:10px;background:#f3f7fb;color:#587086;font-size:11px}.access-user-list{display:grid;gap:12px}.access-user-card{display:grid;grid-template-columns:minmax(190px,.8fr) minmax(0,2fr);gap:16px;padding:14px;border:1px solid #dce5ef;border-radius:14px;background:#fff}.access-user-main{display:flex;flex-direction:column;gap:5px}.access-user-main small{color:#68798c;word-break:break-all}.access-badge{display:inline-flex;width:max-content;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:800;background:#edf1f5}.access-badge.premium{background:#fff4bd;color:#6f5700}.access-badge.admin{background:#dff8ed;color:#12684c}.access-fields{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr)) auto;gap:8px;align-items:end}.access-fields label{display:grid;gap:5px;font-size:11px;color:#536578}.access-fields select,.access-fields input{min-height:42px;border:1px solid #d6dee8;border-radius:10px;padding:7px;background:#fff}.access-fields small{font-size:9px;color:#8391a0}@media(max-width:900px){.access-user-card{grid-template-columns:1fr}.access-fields{grid-template-columns:1fr 1fr}.access-fields .u-save{grid-column:1/-1}.weather-register-actions{width:100%}.weather-register-actions button{flex:1 1 160px}}

/* v0.3.12 admin floating menu */
.has-admin-float-menu .topbar .top-status{display:none!important}
.admin-float-menu{position:relative;z-index:9000}
.admin-float-trigger{position:fixed;top:72px;right:18px;z-index:9002;display:inline-flex;align-items:center;gap:9px;min-height:46px;padding:0 15px;border:1px solid rgba(100,211,255,.34);border-radius:999px;background:rgba(7,20,33,.94);color:#e8f7ff;box-shadow:0 14px 38px rgba(0,0,0,.34);backdrop-filter:blur(12px);font:inherit;font-size:12px;font-weight:800;cursor:pointer;transition:transform .18s ease,background .18s ease,border-color .18s ease}
.admin-float-trigger:hover,.admin-float-trigger:focus-visible{background:#0d2639;border-color:#61dfff;transform:translateY(-1px);outline:none}
.admin-float-trigger-icon{display:grid;place-items:center;width:24px;height:24px;border-radius:8px;background:#12344a;color:#7ee8ff;font-size:16px;line-height:1}
.admin-float-backdrop{position:fixed;inset:0;z-index:9003;border:0;background:rgba(2,8,14,.66);backdrop-filter:blur(3px);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .22s ease,visibility .22s ease}
.admin-float-panel{position:fixed;top:0;right:0;z-index:9004;width:min(390px,calc(100vw - 24px));height:100dvh;display:flex;flex-direction:column;background:#071522;border-left:1px solid #244154;box-shadow:-24px 0 70px rgba(0,0,0,.5);transform:translateX(104%);visibility:hidden;transition:transform .24s ease,visibility .24s ease;color:#e7f4fc;overflow:hidden}
.admin-float-menu.is-open .admin-float-backdrop{opacity:1;visibility:visible;pointer-events:auto}
.admin-float-menu.is-open .admin-float-panel{transform:translateX(0);visibility:visible}
.admin-menu-open{overflow:hidden}
.admin-float-panel-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:22px 18px 16px;border-bottom:1px solid #173044;background:linear-gradient(180deg,#0a1d2d,#071522)}
.admin-float-panel-head strong{display:block;margin-top:3px;font-size:20px;letter-spacing:-.02em}
.admin-float-kicker{color:#64dbff;font-size:9px;font-weight:900;letter-spacing:.16em}
.admin-float-close{width:42px;height:42px;border-radius:13px;border:1px solid #29475b;background:#0b2132;color:#dff5ff;font-size:26px;line-height:1;cursor:pointer}
.admin-float-close:hover,.admin-float-close:focus-visible{border-color:#62ddff;background:#103148;outline:none}
.admin-float-nav{display:grid;gap:7px;padding:14px;overflow-y:auto;overscroll-behavior:contain}
.admin-float-link{display:grid;grid-template-columns:42px minmax(0,1fr) 18px;align-items:center;gap:11px;min-height:64px;padding:9px 10px;border:1px solid #183247;border-radius:14px;background:#091a29;color:#dcebf5;text-decoration:none;transition:background .16s ease,border-color .16s ease,transform .16s ease}
.admin-float-link:hover,.admin-float-link:focus-visible{background:#0d2638;border-color:#32637b;transform:translateX(-2px);outline:none}
.admin-float-link.is-active{background:#0d2b3d;border-color:#3ca9c7;box-shadow:inset 3px 0 0 #64e1ff}
.admin-float-link-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;background:#102c40;color:#8aebff;font-size:18px}
.admin-float-link b,.admin-float-link small{display:block}
.admin-float-link b{font-size:13px;color:#f1f9fd}
.admin-float-link small{margin-top:4px;color:#7895a7;font-size:10px;line-height:1.35}
.admin-float-chevron{color:#62849a;font-size:24px}
.admin-float-panel-foot{margin-top:auto;padding:14px;border-top:1px solid #173044;background:#06111c}
.admin-float-app{display:flex;align-items:center;gap:12px;min-height:58px;padding:10px 13px;border:1px solid #25465a;border-radius:14px;background:#0a1c2a;color:#dff5ff;text-decoration:none}
.admin-float-app>span:first-child{font-size:20px;color:#66dfff}.admin-float-app b,.admin-float-app small{display:block}.admin-float-app b{font-size:12px}.admin-float-app small{margin-top:3px;color:#7895a7;font-size:9px}
@media(max-width:820px){
  .has-admin-float-menu .topbar{padding-right:68px}
  .admin-float-trigger{top:66px;right:10px;width:52px;height:52px;min-height:52px;padding:0;border-radius:17px;justify-content:center}
  .admin-float-trigger-label{display:none}
  .admin-float-trigger-icon{width:30px;height:30px;background:transparent;font-size:21px}
  .admin-float-panel{width:min(356px,calc(100vw - 16px))}
  .admin-float-panel-head{padding-top:max(18px,env(safe-area-inset-top))}
}
@media(prefers-reduced-motion:reduce){.admin-float-trigger,.admin-float-backdrop,.admin-float-panel,.admin-float-link{transition:none}}


/* v0.3.14 channel members / invite flow */
.chat-head-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.chat-head-actions .ghost{white-space:nowrap}.members-dialog{width:min(760px,calc(100vw - 28px));max-height:min(82vh,820px);overflow:auto}.members-dialog-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.members-dialog-head h2{margin:0 0 4px}.member-privacy-note{margin:14px 0;padding:12px 14px;border:1px solid rgba(90,211,255,.22);background:rgba(47,160,190,.08);border-radius:14px;color:#7f9aae;font-size:12px;line-height:1.65}.channel-members-list{display:grid;gap:10px}.channel-member-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;padding:14px;border:1px solid rgba(87,168,206,.22);border-radius:16px;background:rgba(10,28,43,.8)}.channel-member-card.online{border-color:rgba(74,222,128,.28)}.channel-member-avatar{position:relative;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:linear-gradient(145deg,#17384e,#0d2031);border:1px solid rgba(113,208,244,.25);font-weight:800;font-size:17px}.channel-member-avatar i{position:absolute;right:0;bottom:1px;width:11px;height:11px;border-radius:50%;border:2px solid #0b1723;background:#687b89}.channel-member-avatar i.on{background:#42df83}.channel-member-info{min-width:0}.channel-member-name{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.channel-member-name b{font-size:14px}.member-self,.member-tier{display:inline-flex;align-items:center;border-radius:999px;padding:2px 7px;font-size:9px;font-weight:800;letter-spacing:.05em}.member-self{background:rgba(104,216,255,.12);color:#75dfff}.member-tier.premium{background:rgba(255,205,83,.14);color:#ffd66d}.member-tier.admin{background:rgba(216,126,255,.14);color:#e0a3ff}.channel-member-meta{display:flex;flex-wrap:wrap;gap:5px 10px;margin-top:5px;color:#8fa9bb;font-size:11px}.channel-member-info>small{display:block;margin-top:5px;color:#667f91;font-size:10px}.channel-member-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.channel-member-actions select{min-width:132px}.channel-member-actions button{padding:8px 10px;font-size:11px}
@media(max-width:820px){.chat-head{align-items:flex-start}.chat-head-actions{max-width:46%;gap:6px}.chat-head-actions .ghost{padding:8px 9px;font-size:10px}.members-dialog{width:calc(100vw - 18px);max-height:86dvh;padding:18px}.channel-member-card{grid-template-columns:auto minmax(0,1fr);align-items:start}.channel-member-actions{grid-column:1/-1;justify-content:stretch;padding-left:56px}.channel-member-actions select{flex:1;min-width:0}.channel-member-actions button{flex:1}.member-privacy-note{font-size:11px}} 
@media(max-width:420px){.chat-head-actions{max-width:none;width:100%;justify-content:flex-start}.chat-head{flex-wrap:wrap}.channel-member-actions{padding-left:0}.channel-member-meta{gap:4px 8px}}

/* v0.3.15 SONAQIA brand tagline */
.logo .brand-tagline{max-width:390px;color:#7891a6;font-size:8px;letter-spacing:.025em;line-height:1.35;white-space:normal;margin-top:2px}
@media(max-width:1100px) and (min-width:821px){.logo .brand-tagline{max-width:280px;font-size:7px}}
@media(max-width:820px){.logo .brand-tagline{display:block!important;max-width:156px;font-size:5.5px;letter-spacing:0;line-height:1.18;margin-top:1px;color:#70889c}}

/* SONAQIA v0.3.16 — rich admin console visual system */
.admin-page{
  --admin-glass:rgba(6,23,39,.78);
  --admin-glass-strong:rgba(7,27,45,.90);
  --admin-border:rgba(84,193,235,.24);
  --admin-border-strong:rgba(75,218,255,.44);
  --admin-muted:#86a2b4;
  --admin-cyan:#54e5ff;
  position:relative;
  isolation:isolate;
  overflow-x:hidden;
  background:
    radial-gradient(circle at 86% 13%,rgba(17,123,222,.19),transparent 31%),
    radial-gradient(circle at 11% 84%,rgba(0,162,255,.11),transparent 34%),
    radial-gradient(circle at 52% 47%,rgba(0,80,145,.10),transparent 40%),
    linear-gradient(180deg,#020a15 0%,#031322 46%,#020a13 100%);
  color:#e9f5fc;
}
.admin-page::before{
  content:"";
  position:fixed;
  inset:0;
  z-index:0;
  pointer-events:none;
  background:url('../admin/admin-rich-bg.svg?v=0.3.16') center top/cover no-repeat;
  opacity:.82;
}
.admin-page::after{
  content:"";
  position:fixed;
  inset:0;
  z-index:0;
  pointer-events:none;
  background:
    linear-gradient(180deg,rgba(1,7,14,.18),rgba(1,7,14,.02) 36%,rgba(1,7,14,.32)),
    radial-gradient(circle at 78% 18%,rgba(41,220,255,.07),transparent 22%);
}
.admin-page>.topbar,.admin-page>.admin-wrap,.admin-page>.traffic-admin-wrap,.admin-page>.admin-float-menu{position:relative;z-index:1}
.admin-page .topbar{
  border-bottom:1px solid rgba(83,177,214,.22);
  background:linear-gradient(180deg,rgba(3,13,25,.92),rgba(3,16,28,.80));
  box-shadow:0 8px 34px rgba(0,0,0,.18),inset 0 -1px 0 rgba(75,218,255,.025);
  backdrop-filter:blur(18px) saturate(1.15);
}
.admin-page .logo strong{color:#f4fbff;text-shadow:0 0 22px rgba(63,219,255,.07)}
.admin-page .logo small{color:#7291a5}
.admin-page .admin-wrap{max-width:1320px;padding:clamp(18px,2.7vw,34px)}
.admin-page .admin-hero{position:relative;padding:clamp(22px,4vw,42px) 4px clamp(24px,4vw,38px)}
.admin-page .admin-hero::after{content:"";position:absolute;left:3px;bottom:12px;width:min(360px,54vw);height:1px;background:linear-gradient(90deg,rgba(74,226,255,.65),rgba(74,226,255,0));box-shadow:0 0 16px rgba(46,208,255,.12)}
.admin-page .admin-hero .eyebrow{color:#7399b2;letter-spacing:.24em;font-size:10px}
.admin-page .admin-hero h1{font-size:clamp(31px,4.6vw,50px);line-height:1.15;letter-spacing:-.035em;margin:8px 0 16px;color:#f6fbff;text-shadow:0 0 38px rgba(77,220,255,.08)}
.admin-page .admin-hero p{max-width:860px;color:#89a6b8;font-size:clamp(12px,1.35vw,15px);line-height:1.82;margin:7px 0}
.admin-page .admin-card,
.admin-page .metric-grid article,
.admin-page .safety-summary>div,
.admin-page .ops-summary>div,
.admin-page .area-import,
.admin-page .moderation-item,
.admin-page .access-user-card{
  border-color:var(--admin-border);
  background:linear-gradient(145deg,rgba(8,28,47,.86),rgba(4,18,32,.70));
  color:#e9f6fd;
  box-shadow:0 22px 70px rgba(0,0,0,.24),inset 0 1px 0 rgba(255,255,255,.025);
  backdrop-filter:blur(16px) saturate(1.08);
}
.admin-page .admin-card{border-radius:20px;padding:clamp(16px,2.3vw,22px)}
.admin-page .admin-card:hover,.admin-page .metric-grid article:hover{border-color:rgba(79,210,248,.34)}
.admin-page .metric-grid{gap:14px;margin-bottom:18px}
.admin-page .metric-grid article{border-radius:19px;position:relative;overflow:hidden}
.admin-page .metric-grid article::after{content:"";position:absolute;inset:auto -30% -55% 45%;height:110px;background:radial-gradient(circle,rgba(62,215,255,.10),transparent 68%);pointer-events:none}
.admin-page .metric-grid span,.admin-page .metric-grid small,.admin-page .admin-card-head span{color:#7897aa}
.admin-page .metric-grid strong{color:#f0fbff;text-shadow:0 0 26px rgba(78,224,255,.08)}
.admin-page .metric-primary{border-color:rgba(77,216,255,.36);box-shadow:0 22px 70px rgba(0,0,0,.24),inset 3px 0 0 rgba(74,226,255,.62)}
.admin-page .metric-danger{border-color:rgba(255,101,126,.26)}
.admin-page .admin-card-head{gap:15px}
.admin-page .admin-card-head h2{color:#f0f8fd;font-size:17px}
.admin-page .admin-table .tr{border-top-color:rgba(87,155,189,.17)}
.admin-page .admin-table .tr small,.admin-page .empty-admin{color:#718ea1}
.admin-page .safety-summary>div,.admin-page .ops-summary>div{border-radius:14px;background:rgba(3,17,30,.55)}
.admin-page .admin-live{border-color:rgba(74,226,255,.28);background:rgba(5,24,39,.72);box-shadow:0 0 25px rgba(46,207,255,.06);backdrop-filter:blur(12px)}
.admin-page .metric-inline{background:rgba(3,17,30,.62);border:1px solid rgba(83,161,198,.17)}
.admin-page .alert{border:1px solid rgba(90,166,202,.22);background:rgba(8,29,46,.76);color:#d7eaf4;backdrop-filter:blur(12px)}
.admin-page .alert.success{background:rgba(10,67,51,.54);border-color:rgba(76,223,170,.26);color:#bff4dc}
.admin-page .alert.error{background:rgba(88,22,36,.58);border-color:rgba(255,98,124,.34);color:#ffc1cc}
.admin-page .primary{background:linear-gradient(135deg,#58e8ff 0%,#27bbff 50%,#2b78ff 100%);color:#02111d;box-shadow:0 10px 30px rgba(39,181,255,.16);min-height:42px}
.admin-page .primary:hover{filter:brightness(1.06)}
.admin-page .ghost,.admin-page .icon-btn{background:rgba(7,28,45,.72);border-color:rgba(87,164,199,.27);color:#bfe3f2;backdrop-filter:blur(10px)}
.admin-page .ghost:hover,.admin-page .icon-btn:hover{border-color:rgba(82,218,255,.50);color:#e9fbff}
.admin-page .access-user-card{grid-template-columns:minmax(190px,.8fr) minmax(0,2fr);border-radius:17px}
.admin-page .access-user-main small{color:#7895a8}
.admin-page .access-badge{background:rgba(104,137,162,.14);border:1px solid rgba(134,176,207,.17);color:#d4e8f4}
.admin-page .access-badge.premium{background:rgba(255,211,76,.11);border-color:rgba(255,211,76,.24);color:#ffe58b}
.admin-page .access-badge.admin{background:rgba(68,225,171,.11);border-color:rgba(68,225,171,.25);color:#9df1d2}
.admin-page .access-fields label{color:#7e9bad}
.admin-page .access-fields select,.admin-page .access-fields input{background:rgba(3,16,29,.74);border-color:rgba(84,160,197,.28);color:#edf9ff}
.admin-page .access-fields select:focus,.admin-page .access-fields input:focus{outline:none;border-color:#50d9ff;box-shadow:0 0 0 3px rgba(80,217,255,.08)}
.admin-page .access-fields small{color:#657f91}
.admin-page .moderation-item{border-radius:15px}
.admin-page .moderation-detail{background:rgba(13,52,76,.58);color:#9fcadd}
.admin-page .review-credentials dl>div{border-bottom-color:rgba(82,157,191,.18)}
.admin-page .danger-zone{border-color:rgba(255,99,124,.28)!important;background:linear-gradient(145deg,rgba(64,17,29,.50),rgba(21,13,25,.72))}
.admin-page .danger-button{background:rgba(105,31,48,.72);border-color:rgba(255,112,134,.34);color:#ffd4dc}
.admin-page .import-progress{background:rgba(1,7,14,.82)}
.admin-page .import-progress-card{background:linear-gradient(145deg,rgba(8,28,47,.97),rgba(3,16,29,.96));border-color:rgba(77,210,248,.30);box-shadow:0 28px 90px rgba(0,0,0,.55)}
.admin-page .import-running,.admin-page .import-steps span{background:rgba(3,17,30,.62);border-color:rgba(86,160,193,.20)}
.admin-page .admin-float-trigger{border-color:rgba(77,219,255,.46);background:linear-gradient(145deg,rgba(7,29,47,.95),rgba(4,18,32,.94));box-shadow:0 16px 45px rgba(0,0,0,.38),0 0 32px rgba(43,196,255,.08);backdrop-filter:blur(16px)}
.admin-page .admin-float-trigger-icon{background:rgba(22,65,91,.55);color:#75ebff;text-shadow:0 0 16px rgba(90,231,255,.34)}
.admin-page .admin-float-panel{background:linear-gradient(180deg,rgba(5,22,37,.98),rgba(3,14,25,.98));border-left-color:rgba(75,191,230,.25)}
.admin-page .admin-float-panel-head{background:linear-gradient(180deg,rgba(9,35,55,.96),rgba(5,22,37,.92));border-bottom-color:rgba(85,167,203,.20)}
.admin-page .admin-float-link{background:rgba(7,26,42,.78);border-color:rgba(78,147,181,.20)}
.admin-page .admin-float-link:hover,.admin-page .admin-float-link:focus-visible{background:rgba(11,45,66,.88);border-color:rgba(72,214,250,.38)}
.admin-page .admin-float-link.is-active{background:linear-gradient(90deg,rgba(18,67,91,.82),rgba(8,35,53,.82));border-color:rgba(72,216,252,.50);box-shadow:inset 3px 0 0 #58e8ff,0 0 28px rgba(46,207,255,.04)}
.admin-page .admin-float-link-icon{background:rgba(17,57,79,.72);color:#8aefff}
.admin-page .admin-float-app{background:rgba(7,27,44,.86);border-color:rgba(83,161,196,.25)}

@media(max-width:820px){
  .admin-page::before{background-position:59% top;opacity:.72}
  .admin-page .topbar{background:rgba(3,15,27,.88)}
  .admin-page .admin-wrap{padding:15px 12px 54px}
  .admin-page .admin-hero{padding:30px 4px 34px}
  .admin-page .admin-hero h1{font-size:clamp(34px,10.5vw,48px);margin-top:10px}
  .admin-page .admin-hero p{font-size:13px;line-height:1.82}
  .admin-page .admin-card{border-radius:18px}
  .admin-page .metric-grid{gap:9px}
  .admin-page .metric-grid article{padding:15px;border-radius:16px}
  .admin-page .access-user-card{grid-template-columns:1fr}
  .admin-page .admin-float-trigger{border-radius:18px;box-shadow:0 14px 36px rgba(0,0,0,.38),0 0 28px rgba(44,204,255,.10)}
}
@media(max-width:430px){
  .admin-page::before{background-position:62% top;background-size:auto 100%;opacity:.68}
  .admin-page .admin-hero .eyebrow{font-size:9px}
  .admin-page .admin-hero h1{font-size:38px}
  .admin-page .admin-card-head{align-items:flex-start;flex-direction:column;gap:4px}
  .admin-page .admin-card-head h2{margin-bottom:0}
}
@media(prefers-reduced-motion:reduce){.admin-page *{scroll-behavior:auto!important}}
/* preserve admin stacking above decorative fixed background */
.admin-page>.topbar{z-index:1000}
.admin-page>.admin-float-menu{z-index:9000}

/* SONAQIA v0.3.17 — rich main application visual system */
.app-page{
  --app-glass:rgba(6,22,37,.78);
  --app-glass-soft:rgba(8,27,44,.68);
  --app-glass-strong:rgba(6,20,35,.92);
  --app-cyan:#58e5ff;
  --app-blue:#2497ff;
  --app-border:rgba(91,205,245,.22);
  --app-border-strong:rgba(86,225,255,.42);
  --app-shadow:0 20px 52px rgba(0,0,0,.28);
  position:relative;
  background:
    radial-gradient(circle at 12% 10%,rgba(24,117,183,.16),transparent 29%),
    radial-gradient(circle at 86% 17%,rgba(43,220,255,.08),transparent 24%),
    radial-gradient(circle at 74% 88%,rgba(20,105,255,.10),transparent 31%),
    linear-gradient(160deg,#06111f 0%,#061522 44%,#07111d 100%);
  overflow-x:hidden;
}
.app-page::before{
  content:"";position:fixed;inset:0;z-index:-2;pointer-events:none;
  background:url('../app/app-rich-bg.svg?v=0.3.18') center top/cover no-repeat;
  opacity:.62;
}
.app-page::after{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(180deg,rgba(3,11,20,.10),rgba(3,10,18,.38));
}
.app-page .topbar{
  background:linear-gradient(180deg,rgba(7,22,37,.95),rgba(5,17,30,.89));
  border-bottom-color:rgba(92,212,250,.20);
  box-shadow:0 12px 34px rgba(0,0,0,.18);
  backdrop-filter:blur(18px) saturate(125%);
}
.app-page .brand-logo-mark{filter:drop-shadow(0 0 14px rgba(78,224,255,.18))}
.app-page .logo strong{color:#f4fbff;text-shadow:0 0 20px rgba(87,222,255,.10)}
.app-page .workspace{background:rgba(44,107,143,.14);gap:1px}
.app-page .panel{
  background:linear-gradient(160deg,rgba(8,26,43,.88),rgba(5,18,31,.84));
  border-color:var(--app-border);
  backdrop-filter:blur(15px) saturate(115%);
}
.app-page .channels-panel,.app-page .map-panel{position:relative}
.app-page .channels-panel::before,.app-page .map-panel::before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
  background:radial-gradient(circle at 100% 0%,rgba(73,222,255,.07),transparent 30%);
}
.app-page .channels-panel>* ,.app-page .map-panel>*{position:relative;z-index:1}
.app-page .chat-panel{
  background:linear-gradient(180deg,rgba(6,20,34,.90),rgba(5,17,30,.88));
  box-shadow:inset 1px 0 0 rgba(87,202,242,.08),inset -1px 0 0 rgba(87,202,242,.08);
}
.app-page .panel-head,.app-page .chat-head,.app-page .map-toolbar{
  text-shadow:0 1px 16px rgba(65,206,255,.05)
}
.app-page .eyebrow{color:#6faac0}
.app-page .channel-item{
  background:linear-gradient(145deg,rgba(10,32,51,.82),rgba(8,24,39,.82));
  border:1px solid rgba(90,190,230,.11);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.015);
  transition:transform .17s ease,border-color .17s ease,background .17s ease,box-shadow .17s ease;
}
.app-page .channel-item:hover,.app-page .channel-item.active{
  background:linear-gradient(145deg,rgba(14,47,72,.96),rgba(10,34,56,.94));
  border-color:rgba(83,222,255,.35);
  box-shadow:0 12px 28px rgba(0,0,0,.14),inset 3px 0 0 rgba(83,226,255,.68);
  transform:translateY(-1px);
}
.app-page .channel-icon{
  background:linear-gradient(145deg,rgba(23,72,99,.92),rgba(12,44,66,.94));
  border:1px solid rgba(97,221,255,.18);
  box-shadow:0 8px 18px rgba(0,0,0,.14);
}
.app-page .side-note,.app-page .location-live-bar,.app-page .emergency-service-note{
  background:linear-gradient(145deg,rgba(10,35,55,.84),rgba(7,25,42,.78));
  border-color:rgba(82,187,225,.20);
  box-shadow:0 14px 34px rgba(0,0,0,.12);
  backdrop-filter:blur(12px);
}
.app-page .chat-head{
  background:linear-gradient(180deg,rgba(8,28,47,.76),rgba(6,21,36,.66));
  border-bottom-color:rgba(80,181,222,.16);
}
.app-page .safety-strip{
  background:rgba(6,23,39,.74);border-bottom-color:rgba(86,194,232,.16)
}
.app-page .safety-strip button{
  background:linear-gradient(145deg,rgba(14,44,67,.92),rgba(8,28,46,.92));
  border-color:rgba(82,180,220,.22);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.025),0 8px 18px rgba(0,0,0,.08);
}
.app-page .safety-strip button:hover{border-color:rgba(89,225,255,.38);background:rgba(15,51,75,.94)}
.app-page .messages{
  background:
    linear-gradient(180deg,rgba(5,17,30,.30),rgba(5,17,30,.58)),
    radial-gradient(circle at 85% 20%,rgba(42,173,222,.05),transparent 28%);
}
.app-page .bubble{
  background:linear-gradient(145deg,rgba(15,48,72,.93),rgba(10,34,54,.94));
  border-color:rgba(88,184,224,.20);
  box-shadow:0 9px 22px rgba(0,0,0,.13),inset 0 1px 0 rgba(255,255,255,.018);
}
.app-page .msg.me .bubble{
  background:linear-gradient(145deg,rgba(16,63,53,.93),rgba(10,44,38,.94));
  border-color:rgba(69,204,150,.28)
}
.app-page .composer{
  background:linear-gradient(180deg,rgba(6,21,36,.90),rgba(5,17,30,.96));
  border-top-color:rgba(81,183,225,.18);
  backdrop-filter:blur(14px);
}
.app-page .composer textarea{
  background:rgba(7,25,42,.90);border-color:rgba(91,185,225,.24);
  box-shadow:inset 0 1px 12px rgba(0,0,0,.14)
}
.app-page .composer textarea:focus{border-color:rgba(85,225,255,.62);box-shadow:0 0 0 3px rgba(62,199,236,.08)}
.app-page .send-btn,.app-page .primary{
  background:linear-gradient(135deg,#64e9ff 0%,#3cc7f6 48%,#38e08a 100%);
  box-shadow:0 10px 24px rgba(43,205,221,.16),inset 0 1px 0 rgba(255,255,255,.24);
}
.app-page .ghost,.app-page .icon-btn,.app-page .round-btn,.app-page .layer-chip,.app-page .radar-chip{
  background:linear-gradient(145deg,rgba(12,39,60,.88),rgba(8,28,46,.88));
  border-color:rgba(88,186,226,.23);color:#bcd5e4;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.02);
}
.app-page .ghost:hover,.app-page .icon-btn:hover,.app-page .round-btn:hover,.app-page .layer-chip:hover,.app-page .radar-chip:hover{
  border-color:rgba(89,224,255,.44);background:rgba(15,49,72,.94);color:#e8f9ff
}
.app-page #map{
  border-color:rgba(85,199,240,.26);
  box-shadow:0 20px 48px rgba(0,0,0,.24),0 0 0 1px rgba(60,184,231,.04);
}
.app-page .map-mode,.app-page .map-layer-switches,.app-page .radar-console,.app-page .weather-card{
  border-color:rgba(90,191,230,.19)
}
.app-page .radar-console,.app-page .weather-card{
  background:linear-gradient(145deg,rgba(8,31,50,.84),rgba(6,23,39,.80));
  box-shadow:0 15px 36px rgba(0,0,0,.15),inset 0 1px 0 rgba(255,255,255,.018);
  backdrop-filter:blur(13px);
}
.app-page .weather-day,.app-page .weather-metric,.app-page .weather-target-meta,.app-page .weather-area-status{
  background:linear-gradient(145deg,rgba(7,28,46,.90),rgba(5,21,36,.90));
  border-color:rgba(80,177,216,.18)
}
.app-page .map-legend,.app-page .official-note{color:#7591a5}
.app-page dialog{
  background:linear-gradient(155deg,rgba(8,31,50,.97),rgba(5,20,35,.98));
  border-color:rgba(92,211,247,.32);
  box-shadow:0 32px 90px rgba(0,0,0,.50),0 0 42px rgba(53,183,235,.06);
  backdrop-filter:blur(20px);
}
.app-page .mobile-tabs{
  background:rgba(5,19,33,.92);border-bottom-color:rgba(85,192,232,.19);
  backdrop-filter:blur(18px);box-shadow:0 10px 26px rgba(0,0,0,.12)
}
.app-page .mobile-tabs button.active{color:#dcf8ff;border-bottom-color:#58e5ff;text-shadow:0 0 16px rgba(88,229,255,.22)}
.app-page .account-tier-badge{box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.app-page .premium-locked{background:linear-gradient(145deg,rgba(44,36,13,.86),rgba(29,27,16,.90));border-color:rgba(228,193,76,.28)!important;color:#e7d694}

@media(max-width:820px){
  .app-page::before{background-size:auto 100%;opacity:.46}
  .app-page .topbar{background:rgba(5,19,33,.94)}
  .app-page .workspace{background:transparent}
  .app-page .panel{background:linear-gradient(180deg,rgba(7,24,40,.90),rgba(5,18,31,.91))}
  .app-page .channels-panel,.app-page .map-panel{padding:13px}
  .app-page .channel-item{box-shadow:0 8px 20px rgba(0,0,0,.10)}
  .app-page .chat-head{background:rgba(7,25,42,.76)}
  .app-page .messages{background:rgba(5,18,31,.45)}
  .app-page .composer{padding-bottom:max(12px,env(safe-area-inset-bottom))}
  .app-page .weather-card,.app-page .radar-console{backdrop-filter:blur(9px)}
}
@media(prefers-reduced-motion:reduce){
  .app-page .channel-item,.app-page .ghost,.app-page .icon-btn,.app-page .round-btn,.app-page .layer-chip,.app-page .radar-chip{transition:none}
}

/* SONAQIA v0.3.18 — unified rich UI for PC/SP */
.app-page{
  --app-panel-deep:rgba(4,17,30,.84);
  --app-panel-mid:rgba(7,27,45,.78);
  --app-panel-lite:rgba(11,39,61,.62);
  --app-cyan-soft:rgba(82,227,255,.22);
  --app-cyan-line:rgba(87,218,255,.26);
}
.app-page .workspace{
  background:rgba(58,135,175,.13);
}
.app-page .panel{
  box-shadow:inset 0 1px 0 rgba(255,255,255,.015);
}
.app-page .panel-head,
.app-page .chat-head,
.app-page .map-toolbar{
  position:relative;
}
.app-page .panel-head::after,
.app-page .chat-head::after,
.app-page .map-toolbar::after{
  content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;
  background:linear-gradient(90deg,transparent,rgba(76,223,255,.34),transparent);
  pointer-events:none;
}
.app-page .channel-actions{
  display:grid;gap:8px;
}
.app-page .channel-actions .ghost{
  background:linear-gradient(145deg,rgba(10,36,57,.84),rgba(6,24,40,.86));
}
.app-page .channel-list{
  scrollbar-color:rgba(68,209,246,.28) transparent;
  scrollbar-width:thin;
}
.app-page .channel-item{
  position:relative;overflow:hidden;
}
.app-page .channel-item::after{
  content:"";position:absolute;inset:auto -18% -68% 46%;height:100px;pointer-events:none;
  background:radial-gradient(circle,rgba(54,217,255,.09),transparent 68%);
}
.app-page .chat-panel{
  position:relative;isolation:isolate;
}
.app-page .chat-panel::before{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(circle at 82% 24%,rgba(54,207,255,.08),transparent 20%),
    radial-gradient(circle at 18% 76%,rgba(32,113,255,.06),transparent 24%);
}
.app-page .messages{
  position:relative;isolation:isolate;
  background:
    linear-gradient(180deg,rgba(3,14,26,.17),rgba(4,16,28,.44)),
    radial-gradient(circle at 88% 22%,rgba(54,214,255,.065),transparent 25%),
    radial-gradient(circle at 21% 86%,rgba(30,99,255,.055),transparent 27%);
}
.app-page .messages::before{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.48;
  background-image:
    radial-gradient(circle at 82% 24%,transparent 0 43px,rgba(70,218,255,.055) 44px 45px,transparent 46px 74px,rgba(70,218,255,.038) 75px 76px,transparent 77px),
    linear-gradient(121deg,transparent 0 22%,rgba(64,188,232,.035) 22.2% 22.45%,transparent 22.7% 100%);
}
.app-page .empty-state{
  min-height:180px;
  color:#658499;
}
.app-page .empty-state b{
  color:#9fc6d8;text-shadow:0 0 20px rgba(74,218,255,.08)
}
.app-page .bubble{
  backdrop-filter:blur(8px);
}
.app-page .bubble-wrap{
  filter:drop-shadow(0 8px 18px rgba(0,0,0,.10));
}
.app-page .emergency-service-note{
  border-left:2px solid rgba(255,93,111,.48);
  background:linear-gradient(90deg,rgba(62,18,31,.34),rgba(9,29,46,.70));
}
.app-page .location-live-bar{
  background:linear-gradient(145deg,rgba(8,31,49,.84),rgba(5,22,37,.80));
}
.app-page .composer{
  box-shadow:0 -14px 32px rgba(0,0,0,.14),inset 0 1px 0 rgba(88,213,250,.10);
}
.app-page .composer textarea{
  transition:border-color .18s ease,box-shadow .18s ease,background .18s ease;
}
.app-page .send-btn{
  position:relative;overflow:hidden;
}
.app-page .send-btn::after{
  content:"";position:absolute;inset:-45% auto -45% -52%;width:44%;transform:skewX(-18deg);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.34),transparent);
  transition:left .35s ease;
}
.app-page .send-btn:hover::after{left:118%}
.app-page .map-mode{
  padding:4px;border:1px solid rgba(81,190,230,.17);border-radius:13px;
  background:rgba(4,18,31,.54);backdrop-filter:blur(10px);
}
.app-page .map-mode button{
  border-radius:9px;
}
.app-page .map-mode button.active{
  background:linear-gradient(135deg,rgba(22,98,132,.92),rgba(12,55,79,.94));
  box-shadow:inset 0 0 0 1px rgba(82,224,255,.30),0 6px 18px rgba(0,0,0,.12);
}
.app-page .map-layer-switches{
  border-radius:13px;background:rgba(4,18,31,.45);backdrop-filter:blur(9px)
}
.app-page .radar-console,
.app-page .weather-card{
  border-radius:18px;
}
.app-page .weather-tabs{
  background:rgba(3,17,29,.58);border:1px solid rgba(79,175,214,.15);border-radius:11px;padding:3px;
}
.app-page .weather-tabs button{
  border-radius:8px;
}
.app-page .weather-tabs button.active{
  background:linear-gradient(135deg,rgba(20,89,122,.90),rgba(10,48,72,.94));
  box-shadow:inset 0 0 0 1px rgba(78,219,255,.24);
}
.app-page dialog::backdrop{
  background:rgba(1,7,13,.72);
}
.app-page dialog{
  overflow:hidden;
}
.app-page dialog::before{
  content:"";position:absolute;inset:-80px -90px auto auto;width:190px;height:190px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,rgba(61,220,255,.11),transparent 67%);
}
.app-page .toast{
  background:rgba(7,28,46,.94);border-color:rgba(91,208,247,.28);backdrop-filter:blur(14px)
}

@media(min-width:821px){
  .app-page .channels-panel{
    background:
      radial-gradient(circle at 100% 12%,rgba(70,218,255,.055),transparent 28%),
      linear-gradient(160deg,rgba(7,25,42,.89),rgba(4,17,30,.88));
  }
  .app-page .chat-panel{
    background:linear-gradient(180deg,rgba(5,19,33,.88),rgba(3,15,27,.86));
  }
  .app-page .map-panel{
    background:
      radial-gradient(circle at 82% 8%,rgba(54,203,255,.045),transparent 22%),
      linear-gradient(160deg,rgba(7,25,42,.88),rgba(4,17,30,.87));
  }
}

@media(max-width:820px){
  .app-page{
    background:
      radial-gradient(circle at 16% 5%,rgba(19,116,180,.18),transparent 26%),
      radial-gradient(circle at 88% 45%,rgba(43,214,255,.08),transparent 24%),
      linear-gradient(165deg,#04111e 0%,#061826 47%,#04111d 100%);
  }
  .app-page::before{
    background-image:url('../app/app-rich-bg-mobile.svg?v=0.3.18');
    background-size:cover;background-position:center top;opacity:.78;
  }
  .app-page::after{
    background:linear-gradient(180deg,rgba(2,9,16,.02),rgba(2,9,16,.28));
  }
  .app-page .topbar{
    height:62px;
    background:linear-gradient(180deg,rgba(4,17,30,.94),rgba(4,15,27,.89));
    border-bottom-color:rgba(81,212,249,.20);
    box-shadow:0 10px 30px rgba(0,0,0,.22);
  }
  .app-page .top-status{gap:5px}
  .app-page .account-tier-badge{
    padding:5px 8px;font-size:9px;
  }
  .app-page .top-status .icon-btn{
    border-radius:9px;padding:7px 8px;
  }

  .app-page .mobile-tabs{
    height:50px;
    padding:5px 8px 4px;
    gap:5px;
    border-bottom:1px solid rgba(81,194,234,.14);
    background:linear-gradient(180deg,rgba(5,20,34,.94),rgba(4,16,29,.90));
    box-shadow:0 11px 25px rgba(0,0,0,.14);
  }
  .app-page .mobile-tabs button{
    position:relative;border:1px solid transparent!important;border-radius:11px!important;
    color:#68879b;background:transparent;
    transition:color .18s ease,background .18s ease,border-color .18s ease,box-shadow .18s ease;
  }
  .app-page .mobile-tabs button.active{
    color:#e7fbff!important;
    border-color:rgba(75,214,250,.24)!important;
    background:linear-gradient(145deg,rgba(14,54,78,.88),rgba(8,34,53,.88))!important;
    box-shadow:inset 0 0 0 1px rgba(71,220,255,.08),0 7px 18px rgba(0,0,0,.11);
  }
  .app-page .mobile-tabs button.active::after{
    content:"";position:absolute;left:28%;right:28%;bottom:2px;height:2px;border-radius:999px;
    background:#58e8ff;box-shadow:0 0 12px rgba(88,232,255,.68);
  }

  .app-page .workspace{
    height:calc(100dvh - 112px);
    background:transparent;
  }
  .app-page .panel{
    padding:10px;
    background:linear-gradient(180deg,rgba(5,21,36,.74),rgba(3,16,29,.70));
    backdrop-filter:blur(8px) saturate(112%);
  }
  .app-page .channels-panel.mobile-active,
  .app-page .map-panel.mobile-active{
    background:
      linear-gradient(180deg,rgba(5,21,36,.72),rgba(3,16,29,.66));
  }
  .app-page .chat-panel.mobile-active{
    padding:0 9px 8px;
    background:linear-gradient(180deg,rgba(5,21,36,.66),rgba(3,15,27,.58));
  }
  .app-page .chat-panel::before{
    inset:0 9px 8px;
    border-left:1px solid rgba(77,185,225,.07);
    border-right:1px solid rgba(77,185,225,.07);
    background:
      radial-gradient(circle at 90% 18%,rgba(57,211,255,.075),transparent 22%),
      radial-gradient(circle at 16% 78%,rgba(31,112,255,.065),transparent 27%);
  }

  .app-page .panel-head{
    margin-bottom:10px;padding:4px 3px 8px;
  }
  .app-page .panel h2{letter-spacing:-.015em}
  .app-page .channel-actions{
    grid-template-columns:1fr 1fr;gap:7px;margin-bottom:9px;
  }
  .app-page .channel-actions .ghost{
    min-height:42px;font-size:10px;
  }
  .app-page .channel-list{
    margin-top:8px;gap:8px;padding-bottom:14px;
  }
  .app-page .channel-item{
    border-radius:15px;padding:12px;
    background:linear-gradient(145deg,rgba(10,37,58,.87),rgba(6,24,40,.84));
    border-color:rgba(86,186,225,.15);
    box-shadow:0 10px 24px rgba(0,0,0,.11),inset 0 1px 0 rgba(255,255,255,.018);
  }
  .app-page .channel-item.active{
    background:linear-gradient(145deg,rgba(15,54,78,.95),rgba(8,34,54,.93));
    box-shadow:0 11px 28px rgba(0,0,0,.14),inset 3px 0 0 #58e5ff,0 0 28px rgba(50,207,255,.045);
  }

  .app-page .chat-head{
    margin-top:8px;
    padding:14px 12px 12px;
    min-height:82px;
    border:1px solid rgba(83,185,224,.18);
    border-radius:16px 16px 12px 12px;
    background:
      radial-gradient(circle at 100% 0%,rgba(64,218,255,.08),transparent 32%),
      linear-gradient(145deg,rgba(9,34,54,.82),rgba(5,23,39,.78));
    box-shadow:0 12px 28px rgba(0,0,0,.10),inset 0 1px 0 rgba(255,255,255,.02);
  }
  .app-page .chat-head h2{font-size:19px}
  .app-page .chat-head p{line-height:1.55}
  .app-page .chat-head-actions{
    align-self:flex-start;
  }
  .app-page .chat-head-actions .ghost{
    background:rgba(7,30,48,.78);
  }

  .app-page .safety-strip{
    margin-top:7px;
    padding:0;
    gap:6px;
    border:0;
    background:transparent;
  }
  .app-page .safety-strip button{
    min-height:58px;padding:8px 3px;
    border-radius:13px;
    background:
      radial-gradient(circle at 50% 4%,rgba(76,220,255,.07),transparent 42%),
      linear-gradient(145deg,rgba(11,40,61,.88),rgba(6,26,43,.88));
    border-color:rgba(83,185,224,.20);
    box-shadow:0 8px 18px rgba(0,0,0,.10),inset 0 1px 0 rgba(255,255,255,.018);
  }
  .app-page .safety-strip button:active{
    transform:translateY(1px);
  }
  .app-page .safety-strip span{font-size:9.5px;font-weight:800;color:#c4d9e6}
  .app-page .safety-strip small{color:#748ea1}
  .app-page .emergency-service-note{
    margin-top:7px;border-radius:11px;
    padding:7px 9px;
  }
  .app-page .location-live-bar{
    margin-top:6px;border-radius:11px;
  }

  .app-page .messages{
    margin-top:6px;
    padding:14px 10px 18px;
    border:1px solid rgba(76,174,214,.09);
    border-radius:12px;
    background:
      linear-gradient(180deg,rgba(3,15,27,.21),rgba(3,14,25,.42)),
      radial-gradient(circle at 86% 24%,rgba(50,207,255,.06),transparent 26%);
  }
  .app-page .messages::before{
    opacity:.78;
    background-image:
      url('../app/app-rich-bg-mobile.svg?v=0.3.18'),
      radial-gradient(circle at 87% 18%,transparent 0 42px,rgba(73,220,255,.05) 43px 44px,transparent 45px 78px,rgba(73,220,255,.032) 79px 80px,transparent 81px);
    background-size:cover,auto;
    background-position:center center,center;
  }
  .app-page .msg{gap:8px;margin-bottom:12px}
  .app-page .avatar{
    background:linear-gradient(145deg,rgba(21,67,92,.92),rgba(9,39,60,.94));
    border:1px solid rgba(86,205,242,.15);
    box-shadow:0 7px 18px rgba(0,0,0,.12);
  }
  .app-page .bubble-wrap{max-width:88%}
  .app-page .bubble{
    border-radius:7px 16px 16px 16px;
    padding:10px 11px;
    background:linear-gradient(145deg,rgba(13,47,70,.92),rgba(7,30,49,.94));
    border-color:rgba(84,184,223,.18);
  }
  .app-page .msg.me .bubble{
    background:linear-gradient(145deg,rgba(13,62,50,.92),rgba(7,41,35,.94));
    border-color:rgba(66,203,150,.24);
    border-radius:16px 7px 16px 16px;
  }

  .app-page .composer{
    margin-top:7px;
    padding:7px 0 max(4px,env(safe-area-inset-bottom));
    border-top:1px solid rgba(81,190,229,.15);
    background:linear-gradient(180deg,rgba(4,18,31,.50),rgba(3,14,25,.82));
    box-shadow:0 -13px 30px rgba(0,0,0,.12);
  }
  .app-page .composer textarea{
    min-height:47px;
    border-radius:13px;
    background:rgba(5,23,39,.92);
    border-color:rgba(82,185,225,.25);
    font-size:15px;
  }
  .app-page .send-btn{
    min-width:66px;border-radius:13px;
    font-size:14px;
    box-shadow:0 9px 22px rgba(38,198,217,.17),0 0 22px rgba(70,223,255,.05);
  }

  .app-page .map-toolbar{
    padding:5px 3px 10px;
  }
  .app-page .map-mode{
    position:sticky;top:0;z-index:500;
    margin-bottom:6px;padding:4px;
    background:rgba(4,19,32,.88);
    box-shadow:0 8px 22px rgba(0,0,0,.13);
  }
  .app-page .map-layer-switches{
    margin-bottom:7px;padding:6px;
    background:rgba(4,18,31,.64);
  }
  .app-page #map{
    border-radius:16px;
    box-shadow:0 15px 36px rgba(0,0,0,.23),0 0 0 1px rgba(70,215,255,.045);
  }
  .app-page .radar-console,
  .app-page .weather-card{
    margin-top:8px;
    border-radius:16px;
    background:
      radial-gradient(circle at 100% 0%,rgba(66,221,255,.06),transparent 28%),
      linear-gradient(145deg,rgba(8,31,50,.82),rgba(4,20,34,.82));
  }
  .app-page .radar-console{padding:10px}
  .app-page .weather-card{padding:12px}
  .app-page .official-note{
    padding:8px 4px 16px;
  }

  .app-page dialog{
    width:calc(100vw - 18px);
    max-height:88dvh;
    border-radius:20px;
    background:
      radial-gradient(circle at 100% 0%,rgba(64,220,255,.09),transparent 26%),
      linear-gradient(155deg,rgba(7,30,49,.98),rgba(3,17,30,.98));
  }
}

@media(max-width:430px){
  .app-page .logo{gap:7px}
  .app-page .brand-logo-mark{width:29px;height:36px}
  .app-page .logo strong{font-size:13px}
  .app-page .logo .brand-tagline{max-width:145px!important;font-size:5.1px!important}
  .app-page .topbar{padding:0 9px}
  .app-page .top-status{gap:4px}
  .app-page .top-status .icon-btn{padding:6px 7px;font-size:9px}
  .app-page .account-tier-badge{font-size:8.5px;padding:5px 7px}
  .app-page .mobile-tabs{padding-left:6px;padding-right:6px}
  .app-page .mobile-tabs button{font-size:10.5px}
  .app-page .chat-panel.mobile-active{padding-left:8px;padding-right:8px}
  .app-page .chat-head{padding:13px 11px}
  .app-page .chat-head h2{font-size:18px}
  .app-page .chat-head-actions{max-width:44%}
  .app-page .safety-strip{gap:5px}
  .app-page .safety-strip button{min-height:56px;border-radius:12px}
  .app-page .safety-strip span{font-size:9px}
  .app-page .messages{padding-left:8px;padding-right:8px}
  .app-page .composer textarea{font-size:14px}
  .app-page .send-btn{min-width:62px;padding:0 13px}
}

/* SONAQIA v0.3.20 — private-channel notice must never cover channel cards */
@media (min-width:1051px){
  .app-page .channels-panel{
    display:flex;
    flex-direction:column;
    overflow:hidden;
  }
  .app-page .channels-panel .panel-head,
  .app-page .channels-panel .channel-actions,
  .app-page .channels-panel .side-note{
    flex:0 0 auto;
  }
  .app-page .channels-panel .channel-list{
    flex:1 1 auto;
    min-height:0;
    max-height:none;
    overflow-y:auto;
    overflow-x:hidden;
    margin-top:10px;
    padding:0 2px 8px 0;
  }
  .app-page .channels-panel .side-note{
    position:static;
    inset:auto;
    width:100%;
    max-width:none;
    margin-top:9px;
    padding:9px 10px;
    border-radius:10px;
    font-size:9px;
    line-height:1.55;
    box-shadow:0 -8px 22px rgba(0,0,0,.10);
  }
  .app-page .channels-panel .side-note strong,
  .app-page .channels-panel .side-note span{
    display:inline;
  }
  .app-page .channels-panel .side-note strong{
    margin:0 6px 0 0;
    white-space:nowrap;
  }
}

/* SONAQIA v0.3.21 — SP scrolling + chat viewport correction
   - Mobile app panes use document scrolling instead of a hard viewport lock.
   - Chat history receives a practical minimum viewport so controls do not crush it.
   - Native dialogs regain vertical scrolling on small screens.
*/
@media (max-width:820px){
  /* The old 100dvh lock made every pane compete for one fixed height. */
  .app-page{
    min-height:100dvh;
    height:auto!important;
    overflow-x:hidden!important;
    overflow-y:auto!important;
    -webkit-overflow-scrolling:touch;
  }
  .app-page .topbar{
    position:sticky;
    top:0;
    z-index:1000;
  }
  .app-page .mobile-tabs{
    position:sticky;
    top:62px;
    z-index:940;
  }
  .app-page .workspace{
    height:auto!important;
    min-height:calc(100dvh - 112px);
    overflow:visible!important;
  }
  .app-page .panel,
  .app-page .panel.mobile-active,
  .app-page .channels-panel.mobile-active,
  .app-page .map-panel.mobile-active,
  .app-page .chat-panel.mobile-active{
    height:auto!important;
    max-height:none!important;
  }
  .app-page .channels-panel.mobile-active,
  .app-page .map-panel.mobile-active{
    min-height:calc(100dvh - 112px);
    overflow:visible!important;
    touch-action:pan-y;
  }
  .app-page .chat-panel.mobile-active{
    min-height:calc(100dvh - 112px);
    overflow:visible!important;
    display:flex;
    flex-direction:column;
    touch-action:pan-y;
  }

  /* Give the actual disaster-message history useful space on SP.
     It keeps its own scroll, while the page itself can also move vertically. */
  .app-page .chat-panel.mobile-active .messages{
    flex:0 0 auto!important;
    width:100%;
    height:clamp(330px,46dvh,520px)!important;
    min-height:clamp(330px,46dvh,520px)!important;
    max-height:clamp(330px,46dvh,520px)!important;
    overflow-y:auto!important;
    overflow-x:hidden!important;
    overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
    touch-action:pan-y;
  }
  .app-page .chat-panel.mobile-active .composer{
    position:sticky;
    bottom:0;
    z-index:80;
    flex:0 0 auto;
    padding-bottom:max(8px,env(safe-area-inset-bottom));
  }

  /* v0.3.18 rich-UI rule used overflow:hidden and blocked long dialogs. */
  .app-page dialog,
  .app-page dialog[open],
  .app-page .location-dialog,
  .app-page .members-dialog,
  .app-page .invite-manage-dialog,
  .app-page .policy-dialog,
  .app-page .report-dialog{
    overflow-x:hidden!important;
    overflow-y:auto!important;
    max-height:calc(100dvh - 20px)!important;
    overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch;
    touch-action:pan-y;
    scrollbar-gutter:stable;
  }
  .app-page dialog[open]{
    padding-bottom:calc(24px + env(safe-area-inset-bottom));
  }
}

@media (max-width:430px){
  .app-page .chat-panel.mobile-active .messages{
    height:clamp(320px,44dvh,470px)!important;
    min-height:clamp(320px,44dvh,470px)!important;
    max-height:clamp(320px,44dvh,470px)!important;
  }
}

/* ========================================================================
   SONAQIA v0.3.22 — SP Smart Collapse / Floating Chat Context
   Integrates v0.3.21 document/dialog scrolling and larger chat history.
   ======================================================================== */
.chat-compact-bar{display:none}

@media (max-width:820px){
  .app-page .chat-compact-bar{
    display:none;
    grid-template-columns:minmax(0,1fr) auto;
    align-items:center;
    gap:8px;
    min-height:54px;
    margin:6px 0 7px;
    padding:7px 8px;
    border:1px solid rgba(84,210,247,.28);
    border-radius:15px;
    background:
      radial-gradient(circle at 92% 12%,rgba(69,225,255,.11),transparent 36%),
      linear-gradient(145deg,rgba(7,35,55,.96),rgba(4,23,39,.96));
    box-shadow:0 12px 28px rgba(0,0,0,.22),inset 0 1px 0 rgba(255,255,255,.025);
    backdrop-filter:blur(16px) saturate(120%);
    -webkit-backdrop-filter:blur(16px) saturate(120%);
  }
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .chat-compact-bar{
    display:grid;
    position:sticky;
    top:112px;
    z-index:930;
    animation:sonaqiaCompactIn .18s ease-out both;
  }
  @keyframes sonaqiaCompactIn{
    from{opacity:0;transform:translateY(-7px) scale(.985)}
    to{opacity:1;transform:none}
  }
  .app-page .chat-compact-main,
  .app-page .chat-compact-pill,
  .app-page .chat-compact-expand{
    appearance:none;
    -webkit-appearance:none;
    border:0;
    color:inherit;
    font:inherit;
  }
  .app-page .chat-compact-main{
    display:grid;
    grid-template-columns:auto minmax(0,1fr);
    align-items:center;
    gap:8px;
    min-width:0;
    padding:4px 5px;
    text-align:left;
    background:transparent;
  }
  .app-page .chat-compact-lock{font-size:15px;opacity:.82}
  .app-page .chat-compact-copy{min-width:0;display:grid;gap:1px}
  .app-page .chat-compact-copy b{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    color:#e7fbff;
    font-size:13px;
    letter-spacing:.01em;
  }
  .app-page .chat-compact-copy small{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    color:#7f9caf;
    font-size:8.5px;
  }
  .app-page .chat-compact-actions{display:flex;align-items:center;gap:4px}
  .app-page .chat-compact-pill,
  .app-page .chat-compact-expand{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:3px;
    min-height:34px;
    padding:5px 7px;
    border:1px solid rgba(81,190,229,.20);
    border-radius:10px;
    background:rgba(6,29,47,.78);
    color:#b9d8e7;
    font-size:9px;
    font-weight:800;
    white-space:nowrap;
  }
  .app-page .chat-compact-pill:active,
  .app-page .chat-compact-expand:active{transform:translateY(1px);background:rgba(11,49,72,.90)}
  .app-page .chat-compact-expand{width:34px;padding:0;font-size:17px;color:#7eeaff}
  .app-page .chat-compact-bar.location-on .chat-compact-pill[data-compact-action="location"]{
    border-color:rgba(71,225,164,.35);
    background:rgba(8,58,45,.78);
    color:#caffed;
  }

  /* Once the user starts reading messages, replace the large pre-chat stack
     with the compact floating context bar. */
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .chat-head,
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .safety-strip,
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .emergency-service-note,
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .location-live-bar{
    display:none!important;
  }
  .app-page.sp-chat-compact-active .chat-panel.mobile-active{
    padding-top:0;
  }
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .messages{
    height:clamp(455px,64dvh,720px)!important;
    min-height:clamp(455px,64dvh,720px)!important;
    max-height:clamp(455px,64dvh,720px)!important;
    margin-top:0;
  }
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .composer{
    box-shadow:0 -16px 34px rgba(0,0,0,.18);
  }

  /* Prevent a floating bar from sitting above a native dialog. */
  .app-page:has(dialog[open]) .chat-compact-bar{display:none!important}
}

@media (max-width:430px){
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .chat-compact-bar{
    top:112px;
    grid-template-columns:minmax(0,1fr) auto;
    gap:5px;
    padding:6px;
  }
  .app-page .chat-compact-pill{padding:5px 6px}
  .app-page .chat-compact-pill span:last-child{font-size:8.5px}
  .app-page .chat-compact-copy small{font-size:8px}
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .messages{
    height:clamp(430px,62dvh,650px)!important;
    min-height:clamp(430px,62dvh,650px)!important;
    max-height:clamp(430px,62dvh,650px)!important;
  }
}

@media (prefers-reduced-motion:reduce){
  .app-page .chat-compact-bar{animation:none!important}
  .app-page .chat-compact-pill,
  .app-page .chat-compact-expand{transition:none!important}
}

/* ========================================================================
   SONAQIA v0.3.23 — SP floating trigger correction
   #messages is an independent scroller since v0.3.21; compact mode now
   reacts to it and renders as a real fixed floating control below SP tabs.
   ======================================================================== */
@media (max-width:820px){
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .chat-compact-bar{
    position:fixed!important;
    top:calc(108px + env(safe-area-inset-top, 0px))!important;
    left:8px!important;
    right:8px!important;
    width:auto!important;
    margin:0!important;
    z-index:1200!important;
    box-shadow:0 16px 38px rgba(0,0,0,.42),0 0 0 1px rgba(78,217,255,.06),inset 0 1px 0 rgba(255,255,255,.035)!important;
  }
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .messages{
    margin-top:66px!important;
  }
}
@media (max-width:430px){
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .chat-compact-bar{
    top:calc(108px + env(safe-area-inset-top, 0px))!important;
    left:6px!important;
    right:6px!important;
  }
}


/* ==========================================================================
   SONAQIA v0.3.24 - explicit current-state toggle UI
   ON/OFF buttons show the CURRENT state, not the action label.
   ========================================================================== */
.app-page .sonaqia-state-toggle{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:7px;
  min-height:34px;
  white-space:nowrap;
}
.app-page .sonaqia-state-toggle .feature-toggle-icon{
  flex:0 0 auto;
  line-height:1;
}
.app-page .sonaqia-state-toggle .feature-toggle-name{
  min-width:0;
  font-weight:900;
  line-height:1.1;
}
.app-page .sonaqia-state-toggle .feature-toggle-state{
  display:inline-flex;
  align-items:center;
  gap:4px;
  flex:0 0 auto;
  min-height:23px;
  padding:3px 6px 3px 5px;
  border-radius:999px;
  border:1px solid rgba(115,142,161,.42);
  background:rgba(5,15,24,.58);
  color:#8ca2b2;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.015);
}
.app-page .sonaqia-state-toggle .feature-toggle-current{
  font-size:7px;
  font-weight:800;
  letter-spacing:.04em;
  color:#6f8798;
}
.app-page .sonaqia-state-toggle .feature-toggle-track{
  position:relative;
  display:inline-block;
  width:28px;
  height:16px;
  border-radius:999px;
  background:#243746;
  border:1px solid #405465;
  box-shadow:inset 0 1px 2px rgba(0,0,0,.32);
  transition:background .18s ease,border-color .18s ease;
}
.app-page .sonaqia-state-toggle .feature-toggle-knob{
  position:absolute;
  left:2px;
  top:2px;
  width:10px;
  height:10px;
  border-radius:50%;
  background:#91a4b1;
  box-shadow:0 1px 3px rgba(0,0,0,.45);
  transition:transform .18s ease,background .18s ease;
}
.app-page .sonaqia-state-toggle .feature-toggle-word{
  min-width:21px;
  text-align:center;
  font-size:8px;
  font-weight:1000;
  letter-spacing:.04em;
  color:#8ea2b0;
}
.app-page .sonaqia-state-toggle.is-on{
  border-color:rgba(62,217,166,.62)!important;
  background:linear-gradient(180deg,rgba(13,57,45,.96),rgba(9,43,36,.96))!important;
  color:#e2fff5!important;
  box-shadow:inset 0 0 0 1px rgba(70,232,177,.10),0 0 0 1px rgba(40,174,132,.04)!important;
}
.app-page .sonaqia-state-toggle.is-on .feature-toggle-state{
  border-color:rgba(75,225,177,.55);
  background:rgba(8,35,29,.78);
  color:#dffff4;
}
.app-page .sonaqia-state-toggle.is-on .feature-toggle-current{
  color:#81d9bb;
}
.app-page .sonaqia-state-toggle.is-on .feature-toggle-track{
  background:#26b884;
  border-color:#54dbaa;
}
.app-page .sonaqia-state-toggle.is-on .feature-toggle-knob{
  background:#f3fffb;
  transform:translateX(12px);
}
.app-page .sonaqia-state-toggle.is-on .feature-toggle-word{
  color:#bff7e3;
}
.app-page .sonaqia-state-toggle.is-off{
  border-color:rgba(89,111,128,.50)!important;
  background:rgba(9,23,34,.92)!important;
  color:#95a8b6!important;
  box-shadow:none!important;
}
.app-page .sonaqia-state-toggle.is-off .feature-toggle-state{
  border-color:rgba(102,124,140,.34);
  background:rgba(5,14,22,.60);
}
.app-page .sonaqia-state-toggle.is-locked .feature-toggle-state{
  min-width:auto;
  border-color:rgba(215,178,83,.32);
  background:rgba(44,35,17,.60);
}
.app-page .sonaqia-state-toggle.is-locked .feature-toggle-current,
.app-page .sonaqia-state-toggle.is-locked .feature-toggle-track{display:none}
.app-page .sonaqia-state-toggle.is-locked .feature-toggle-word{
  min-width:auto;
  color:#d8bb71;
}
.app-page .sonaqia-state-toggle.state-just-changed .feature-toggle-state{
  animation:sonaqia-toggle-confirm .38s ease-out;
}
@keyframes sonaqia-toggle-confirm{
  0%{transform:scale(.94)}
  55%{transform:scale(1.08)}
  100%{transform:scale(1)}
}
@media(max-width:820px){
  .app-page .map-layer-switches .sonaqia-state-toggle,
  .app-page .radar-top .sonaqia-state-toggle{
    gap:5px;
    padding-left:7px;
    padding-right:7px;
  }
  .app-page .sonaqia-state-toggle .feature-toggle-state{
    padding:3px 5px;
  }
  .app-page .sonaqia-state-toggle .feature-toggle-current{
    font-size:6.5px;
  }
  .app-page .sonaqia-state-toggle .feature-toggle-track{
    width:26px;
    height:15px;
  }
  .app-page .sonaqia-state-toggle .feature-toggle-knob{
    width:9px;
    height:9px;
  }
  .app-page .sonaqia-state-toggle.is-on .feature-toggle-knob{
    transform:translateX(11px);
  }
  .app-page .sonaqia-state-toggle .feature-toggle-word{font-size:7.5px}
}
@media(max-width:390px){
  .app-page .map-layer-switches .sonaqia-state-toggle{
    flex:1 1 calc(50% - 5px);
  }
}
@media(prefers-reduced-motion:reduce){
  .app-page .sonaqia-state-toggle .feature-toggle-track,
  .app-page .sonaqia-state-toggle .feature-toggle-knob{transition:none}
  .app-page .sonaqia-state-toggle.state-just-changed .feature-toggle-state{animation:none}
}


/* ========================================================================
   SONAQIA v0.3.27 — SP non-overlap compact dock + location source clarity
   ======================================================================== */
@media (max-width:820px){
  /* Keep the compact control visually floating, but reserve its own layout
     row so it never covers message text. */
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .chat-compact-bar{
    position:sticky!important;
    top:calc(108px + env(safe-area-inset-top, 0px))!important;
    left:auto!important;
    right:auto!important;
    width:100%!important;
    margin:4px 0 7px!important;
    min-height:48px!important;
    padding:5px 7px!important;
    border-radius:12px!important;
    z-index:1160!important;
  }
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .messages{
    margin-top:0!important;
    scroll-padding-top:8px;
  }
  .app-page .chat-compact-pill,.app-page .chat-compact-expand{min-height:31px!important}
}
@media (max-width:430px){
  .app-page.sp-chat-compact-active .chat-panel.mobile-active .chat-compact-bar{
    grid-template-columns:minmax(0,1fr) auto!important;
    gap:4px!important;
  }
  .app-page .chat-compact-copy small{display:none}
  .app-page .chat-compact-pill{padding:4px 5px!important}
}
.location-source-note.network-fallback-note{border-color:rgba(255,204,102,.26);background:rgba(255,204,102,.055)}
.weather-share-note .weather-coordinate-note{display:block;margin-top:5px;color:#86a8ba;font-size:10px}

/* ========================================================================
   SONAQIA v0.3.28 — PC location-dialog scroll / persisted map-center feedback
   ======================================================================== */
@media (min-width:821px){
  .app-page .location-dialog,
  .app-page .location-dialog[open]{
    width:min(620px,calc(100vw - 48px))!important;
    max-height:calc(100dvh - 48px)!important;
    overflow-x:hidden!important;
    overflow-y:auto!important;
    overscroll-behavior:contain;
    scrollbar-gutter:stable;
  }
}
.app-page .weather-area-status[data-state="saved"]{font-weight:800}

/* v0.3.29 weather target + 6h past / 12h future timeline */
.weather-tabs{grid-template-columns:repeat(3,minmax(0,1fr))}
.weather-tabs button{min-width:0;white-space:nowrap}
#weatherSelfControls[hidden],#weatherMemberFixed[hidden],.weather-current-actions[hidden]{display:none!important}
.weather-member-fixed{margin-top:9px;padding:10px 12px;border:1px solid #2b5267;border-radius:11px;background:linear-gradient(135deg,#0b2131,#0a1927);display:grid;gap:4px}
.weather-member-fixed b{color:#c8edff;font-size:10px}.weather-member-fixed span{color:#8fb3c6;font-size:9px;line-height:1.55}
.weather-hourly-meta{margin-bottom:8px;padding:8px 10px;border:1px solid #1d3a4f;border-radius:10px;background:#071521;color:#7694a7;font-size:8px;line-height:1.55}
.weather-hourly-meta b{color:#ccecff}.weather-hourly-meta span{color:#607d92}
.weather-hourly-content{overflow:hidden}.weather-hourly-scale{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;margin:0 2px 6px;color:#617e92;font-size:7px}.weather-hourly-scale b{text-align:center;color:#8ff0c2}.weather-hourly-scale span:last-child{text-align:right}
.weather-hourly-strip{display:flex;gap:6px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;padding:2px 2px 7px;scrollbar-width:thin}
.weather-hour-card{flex:0 0 92px;scroll-snap-align:center;border:1px solid #19354a;background:#081827;border-radius:11px;padding:8px 7px;text-align:center;min-height:142px}
.weather-hour-card.past{opacity:.82}.weather-hour-card.now{border-color:#39d99a;background:#0b2a23;box-shadow:0 0 0 1px rgba(57,217,154,.15),0 8px 28px rgba(0,0,0,.16)}.weather-hour-card.future{border-color:#24435a}
.weather-hour-top{display:flex;align-items:center;justify-content:space-between;gap:4px}.weather-hour-top b{font-size:7px;color:#88a9bc}.weather-hour-card.now .weather-hour-top b{color:#7ff0b9}.weather-hour-top time{font-size:7px;color:#668499}
.weather-hour-icon{font-size:22px;margin:6px 0 3px}.weather-hour-card>strong{display:block;color:#f0f9ff;font-size:19px;line-height:1}.weather-hour-card>small{display:block;margin-top:4px;color:#91adbe;font-size:7px}
.weather-hour-detail{display:grid;gap:2px;margin-top:7px;padding-top:6px;border-top:1px solid rgba(100,150,180,.13);color:#7898aa;font-size:6.8px}.weather-hour-detail span{white-space:nowrap}
@media(max-width:820px){.weather-tabs button{padding:8px 4px;font-size:8px}.weather-register-actions{display:grid;grid-template-columns:1fr}.weather-register-actions button{width:100%;font-size:8px}.weather-hour-card{flex-basis:86px;min-height:136px}.weather-member-fixed{padding:9px 10px}}
@media(max-width:390px){.weather-tabs{gap:3px}.weather-tabs button{font-size:7.4px;letter-spacing:0}.weather-hour-card{flex-basis:82px}}


/* v0.3.30 weather registration state + hourly/radar synchronization */
.weather-tabs{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important}
#weatherHourlyTab{display:block!important;visibility:visible!important;opacity:1!important}
.weather-radar-sync-hint{display:flex;gap:8px;align-items:flex-start;margin:0 0 8px;padding:8px 10px;border-radius:10px;border:1px solid #21465e;background:#081b2a;color:#7e9eb2}
.weather-radar-sync-hint b{font-size:8px;color:#bcecff;white-space:nowrap}.weather-radar-sync-hint span{font-size:7.5px;line-height:1.55}
.weather-radar-sync-hint[data-state="ok"]{border-color:#286b57;background:#09251f}.weather-radar-sync-hint[data-state="ok"] b{color:#86efbd}
.weather-radar-sync-hint[data-state="warning"]{border-color:#67522a;background:#261f11}.weather-radar-sync-hint[data-state="warning"] b{color:#f4d58a}
.weather-hour-card{cursor:pointer;position:relative;outline:none}.weather-hour-card:hover,.weather-hour-card:focus-visible{border-color:#56cce9;box-shadow:0 0 0 2px rgba(86,204,233,.12)}
.weather-hour-card.radar-selected{border-color:#73e0ff!important;box-shadow:0 0 0 2px rgba(115,224,255,.18),0 8px 28px rgba(0,0,0,.18)}
.weather-hour-radar{display:inline-flex;align-items:center;justify-content:center;margin-top:5px;padding:2px 5px;border-radius:999px;border:1px solid #24465a;color:#6e8ea2;font-size:6.5px;font-weight:800}
.weather-hour-radar.available{border-color:#2a6e5b;color:#7ee2b7;background:#09241e}.weather-hour-radar.unavailable{border-color:#4b3c2a;color:#a68a62;background:#1a160f}
.radar-horizon-scale-extended{grid-template-columns:repeat(6,1fr)!important}.radar-horizon-scale-extended span{text-align:center!important}.radar-horizon-scale-extended span:first-child{text-align:left!important}.radar-horizon-scale-extended span:last-child{text-align:right!important}
.weather-area-status[data-state="saved"]{border-color:#2d775f!important;background:#0a241d!important;color:#a8f0cf!important}
.weather-member-row select option[data-point="1"]{font-weight:700}
@media(max-width:820px){.weather-radar-sync-hint{flex-direction:column;gap:3px}.weather-tabs button{white-space:normal!important;line-height:1.25;min-height:40px}.radar-horizon-scale-extended{font-size:6.5px}}

/* ========================================================================
   SONAQIA v0.3.31 — time-linear radar gauge + clear point/official region UI
   ======================================================================== */
.radar-time-scale{position:relative;height:18px;margin:2px 9px 6px;color:#6f8ca0;font-size:7px;font-weight:800;line-height:1;pointer-events:none}
.radar-time-scale::before{content:"";position:absolute;left:0;right:0;top:2px;height:1px;background:linear-gradient(90deg,rgba(94,216,255,.16),rgba(94,216,255,.36),rgba(57,226,139,.22))}
.radar-time-scale span{position:absolute;top:7px;transform:translateX(-50%);white-space:nowrap}
.radar-time-scale span.edge-left{transform:translateX(0)}
.radar-time-scale span.edge-right{transform:translateX(-100%)}
.radar-time-scale span[data-minute="0"]{color:#77efb7;text-shadow:0 0 10px rgba(57,226,139,.28)}
.weather-point-primary{margin-top:9px;padding:10px 12px!important;border-radius:11px!important;font-size:9px!important;line-height:1.55}
.weather-register-actions-primary{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
.weather-official-details{margin-top:9px;border:1px solid #203c50;border-radius:11px;background:#071622;overflow:hidden}
.weather-official-details>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;color:#9db7c8;font-size:8.5px;font-weight:800}
.weather-official-details>summary::-webkit-details-marker{display:none}
.weather-official-details>summary::before{content:"▸";color:#55d8ff;margin-right:2px}.weather-official-details[open]>summary::before{content:"▾"}
.weather-official-details>summary span{flex:1}.weather-official-details>summary b{color:#c9ecfa;font-size:8px;text-align:right}
.weather-official-details[open]>summary{border-bottom:1px solid #193447;background:#091b29}
.weather-official-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:10px 11px 6px}
.weather-official-grid label{display:grid;gap:5px;margin:0;color:#7690a3;font-size:7.5px;font-weight:800}
.weather-official-grid select{width:100%;min-width:0;background:#06131f;color:#c7dce9;border:1px solid #294156;border-radius:9px;padding:8px 9px;font-size:9px}
.weather-official-scope{margin:0 11px 7px;padding:7px 9px;border-radius:9px;border:1px solid #1d3b4e;background:#081926;color:#7898aa;font-size:7.5px;line-height:1.5}
.weather-official-scope[data-state="resolved"]{border-color:#28634f;color:#9ee5c4;background:#092119}
.weather-official-note{margin:0;padding:0 11px 10px;color:#607d90;font-size:7px;line-height:1.55}.weather-official-note b{color:#93b5c7}
@media(max-width:820px){.weather-register-actions-primary,.weather-official-grid{grid-template-columns:1fr}.weather-official-details>summary{align-items:flex-start}.weather-official-details>summary b{max-width:48%;white-space:normal}.radar-time-scale{font-size:6.5px;margin-left:7px;margin-right:7px}}
.weather-official-actions{padding:0 11px 8px}.weather-official-actions .ghost{width:100%;min-height:32px;font-size:7.5px}

/* ========================================================================
   SONAQIA v0.3.32 — weather button visual normalization
   Keep v0.3.31 behavior, restore compact app-native button proportions.
   ======================================================================== */
.weather-register-actions-primary{
  display:flex!important;
  align-items:center;
  justify-content:flex-start;
  flex-wrap:wrap;
  gap:7px;
  margin-top:8px;
}
.weather-register-actions-primary button{
  flex:0 1 auto!important;
  width:auto!important;
  min-height:34px!important;
  padding:7px 11px!important;
  border-radius:9px!important;
  font-size:8.5px!important;
  line-height:1.3!important;
  white-space:nowrap;
}
.app-page .weather-register-actions-primary #weatherRegisterCurrent{
  background:linear-gradient(145deg,rgba(11,45,64,.96),rgba(8,35,53,.96))!important;
  border:1px solid rgba(82,205,239,.38)!important;
  color:#bfefff!important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.035),0 5px 14px rgba(0,0,0,.12)!important;
}
.app-page .weather-register-actions-primary #weatherRegisterCurrent:hover{
  background:rgba(14,52,72,.98)!important;
  border-color:rgba(89,224,255,.58)!important;
  color:#ecfbff!important;
}
.app-page .weather-register-actions-primary #weatherSaveArea{
  background:linear-gradient(145deg,rgba(10,34,52,.90),rgba(7,27,43,.92))!important;
  border-color:rgba(88,186,226,.23)!important;
  color:#b7d0df!important;
}
.weather-official-actions{
  display:flex;
  justify-content:flex-end;
  padding:0 11px 9px!important;
}
.weather-official-actions .ghost{
  width:auto!important;
  min-height:30px!important;
  padding:6px 9px!important;
  border-radius:8px!important;
  font-size:7.5px!important;
  line-height:1.3!important;
}
.weather-self-btn{
  min-height:30px;
  padding:6px 9px!important;
  border-radius:9px!important;
  font-size:8px!important;
}
.weather-official-details>summary{
  min-height:34px;
}
@media(max-width:820px){
  .weather-register-actions-primary{
    display:grid!important;
    grid-template-columns:1fr!important;
    gap:6px;
  }
  .weather-register-actions-primary button{
    width:100%!important;
    min-height:36px!important;
    white-space:normal;
  }
  .weather-official-actions{
    justify-content:stretch;
  }
  .weather-official-actions .ghost{
    width:100%!important;
  }
}

/* ========================================================================
   SONAQIA v0.3.34 — saved weather location history / display-point picker
   ======================================================================== */
.weather-location-picker{
  margin-top:8px;
  padding:10px 11px;
  border:1px solid #214257;
  border-radius:11px;
  background:linear-gradient(145deg,rgba(8,28,42,.92),rgba(6,22,34,.94));
}
.weather-location-picker label{display:grid;grid-template-columns:auto minmax(220px,1fr);align-items:center;gap:10px;margin:0;color:#83a2b5;font-size:8px;font-weight:800}
.weather-location-picker label>span{white-space:nowrap;color:#a7c8d9}
.weather-location-picker select{width:100%;min-width:0;min-height:34px;padding:7px 30px 7px 10px;border:1px solid #31556b;border-radius:9px;background:#061520;color:#d7edf7;font-size:9px;font-weight:700}
.weather-location-picker select:focus{outline:2px solid rgba(86,204,233,.22);outline-offset:1px;border-color:#57cbe6}
.weather-location-picker select:disabled{opacity:.58;cursor:not-allowed}
.weather-location-picker small{display:block;margin-top:7px;color:#65859a;font-size:7.2px;line-height:1.55}
.weather-point-primary[data-state="saved"]{margin-bottom:0}
.weather-register-actions-primary{margin-top:7px!important}
@media(max-width:820px){
  .weather-location-picker{padding:9px 10px}
  .weather-location-picker label{grid-template-columns:1fr;gap:5px}
  .weather-location-picker select{min-height:38px;font-size:8.5px}
  .weather-location-picker small{font-size:7px}
}

/* ========================================================================
   SONAQIA v0.3.36 — device Web Push manager + compact cookie consent
   ======================================================================== */
.device-dialog{width:min(620px,calc(100vw - 28px));max-height:min(82vh,760px);overflow:auto}
.device-push-status{display:grid;gap:3px;margin:10px 0;padding:10px 12px;border:1px solid #294156;border-radius:11px;background:#081723;color:#97b1c2}
.device-push-status b{font-size:10px;color:#c6dce8}.device-push-status span{font-size:8px;line-height:1.55}
.device-push-status[data-state="on"]{border-color:#2d745a;background:#09241c}.device-push-status[data-state="on"] b{color:#8ff0be}
.device-push-status[data-state="warning"]{border-color:#6e582d;background:#251f11}.device-push-status[data-state="warning"] b{color:#f0d28b}
.device-current-edit{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:end;margin:10px 0}
.device-current-edit label{display:grid;gap:5px;margin:0;color:#7f9aad;font-size:8px;font-weight:800}
.device-current-edit input{width:100%;min-width:0;background:#06131f;color:#d7e8f2;border:1px solid #294156;border-radius:9px;padding:9px 10px;font-size:9px}
.device-current-edit .ghost{min-height:35px;padding:7px 11px;border-radius:9px;font-size:8px;white-space:nowrap}
.device-platform-help{margin:0 0 9px;color:#648296;font-size:7.5px;line-height:1.55}
.device-push-actions{display:flex;gap:7px;flex-wrap:wrap;margin:8px 0 12px}
.device-push-actions button{min-height:34px;padding:7px 11px;border-radius:9px;font-size:8.5px}
.device-list-head{display:flex;justify-content:space-between;gap:10px;align-items:flex-end;padding:9px 0 6px;border-top:1px solid #173247}
.device-list-head b{font-size:9px;color:#cce6f3}.device-list-head small{font-size:7px;color:#648296}
.push-device-list{display:grid;gap:7px}
.push-device-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:9px 10px;border:1px solid #213e52;border-radius:10px;background:#071722}
.push-device-card.is-on{border-color:#28634f;background:#081f19}.push-device-card.is-current{box-shadow:inset 3px 0 0 #56d9ff}
.push-device-main{display:grid;gap:3px;min-width:0}.push-device-title{display:flex;gap:6px;align-items:center;min-width:0}.push-device-title b{font-size:9px;color:#cce6f3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.push-device-title span{flex:0 0 auto;padding:2px 5px;border:1px solid #276078;border-radius:999px;color:#7fe5ff;font-size:6.5px;font-weight:900}
.push-device-main small{font-size:7px;color:#69869a;line-height:1.45}.push-device-main em{font-style:normal;font-size:7px;font-weight:800;color:#7f99aa}.push-device-card.is-on .push-device-main em{color:#72d9aa}
.push-device-actions{display:flex;gap:5px}.push-device-actions button{min-width:46px;min-height:30px;padding:5px 8px;border-radius:8px;font-size:7.5px}
.device-ios-note{display:flex;gap:8px;align-items:flex-start;margin-top:11px;padding:8px 10px;border-radius:9px;border:1px solid #2a4356;background:#081824;color:#7693a6}.device-ios-note b{font-size:7.5px;color:#b8d8e7;white-space:nowrap}.device-ios-note span{font-size:7px;line-height:1.55}
.chat-notification-toggle.push-active .feature-toggle-icon{filter:drop-shadow(0 0 5px rgba(86,220,255,.55))}

.sonaqia-cookie-float{position:fixed;right:max(12px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));z-index:9998;width:min(355px,calc(100vw - 24px));display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:9px 10px 9px 12px;border:1px solid rgba(96,145,176,.36);border-radius:12px;background:rgba(6,19,31,.96);backdrop-filter:blur(12px);box-shadow:0 14px 36px rgba(0,0,0,.32);color:#a9c0cf}
.sonaqia-cookie-float>div:first-child{display:grid;gap:2px;min-width:0}.sonaqia-cookie-float b{font-size:8px;color:#d7eaf3}.sonaqia-cookie-float span{font-size:6.8px;line-height:1.45;color:#819cab}
.cookie-float-actions{display:flex;gap:5px;align-items:center}.cookie-float-actions button{border-radius:8px;min-height:28px;padding:5px 8px;font:800 7px/1 system-ui,-apple-system,sans-serif;cursor:pointer;white-space:nowrap}
.cookie-float-settings{border:1px solid #2b485b;background:#0a1c29;color:#9db8c8}.cookie-float-accept{border:1px solid #34738b;background:#123c4d;color:#d9f6ff}
.sonaqia-cookie-settings{position:fixed;right:max(12px,env(safe-area-inset-right));bottom:max(78px,calc(12px + env(safe-area-inset-bottom) + 58px));z-index:9999;width:min(390px,calc(100vw - 24px));padding:13px;border:1px solid #2a465a;border-radius:13px;background:#071521;box-shadow:0 18px 44px rgba(0,0,0,.42);color:#9db6c5}
.cookie-settings-close{position:absolute;right:8px;top:7px;width:28px;height:28px;border:0;background:transparent;color:#8ea9b9;font-size:18px;cursor:pointer}.sonaqia-cookie-settings>b{display:block;padding-right:28px;font-size:10px;color:#d2e6f0}.sonaqia-cookie-settings>p{margin:7px 0;font-size:7.3px;line-height:1.55;color:#7f9aaa}
.cookie-setting-row{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-top:7px;padding:8px 9px;border:1px solid #20394b;border-radius:9px;background:#081925}.cookie-setting-row span{display:grid;gap:2px}.cookie-setting-row strong{font-size:8px;color:#bad5e3}.cookie-setting-row small{font-size:6.7px;color:#6f8999;line-height:1.4}.cookie-setting-row em{font-style:normal;white-space:nowrap;padding:3px 6px;border-radius:999px;background:#0a2a21;color:#76d8ab;font-size:6.5px;font-weight:900}
.sonaqia-cookie-settings .cookie-tracking-note{color:#668395}.cookie-settings-actions{display:flex;justify-content:flex-end;gap:7px;align-items:center;margin-top:10px}.cookie-settings-actions a{color:#8edff5;font-size:7.2px;text-decoration:none}.cookie-settings-actions button{border:1px solid #34738b;border-radius:8px;background:#123c4d;color:#d9f6ff;min-height:29px;padding:5px 9px;font-size:7.5px;font-weight:900;cursor:pointer}

@media(max-width:820px){
  .device-dialog{width:min(94vw,580px);max-height:86dvh}
  .device-current-edit{grid-template-columns:1fr}.device-current-edit .ghost{width:100%}
  .device-push-actions{display:grid;grid-template-columns:1fr}.device-push-actions button{width:100%}
  .push-device-card{grid-template-columns:1fr}.push-device-actions{justify-content:flex-end}
  .sonaqia-cookie-float{right:8px;bottom:max(8px,env(safe-area-inset-bottom));width:calc(100vw - 16px);grid-template-columns:1fr;padding:8px 9px;gap:7px}.cookie-float-actions{justify-content:flex-end}
  .sonaqia-cookie-settings{right:8px;width:calc(100vw - 16px);bottom:max(82px,calc(env(safe-area-inset-bottom) + 72px))}
}
