
:root{--bg:#10161c;--panel:#1b242e;--text:#f4f1e7;--muted:#aab5bf;--cream:#efe4c9;--ink:#22313b;--gold:#e4bd58;--red:#d9564e;--yellow:#e0b74b;--teal:#6fa7a2;--marker:18px;--fo:240ms;--fi:420ms}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--text);font-family:Arial,sans-serif}button,input{font:inherit}button{cursor:pointer;border:1px solid #536171;background:#2c3743;color:#fff;border-radius:8px;padding:.52rem .75rem}button:hover{background:#3b4856}.hidden{display:none!important}#app{width:100%;min-height:100vh;margin:0;padding:10px;display:flex;flex-direction:column;align-items:center;background:var(--bg)}
.evCanvas{
  width:min(calc(100vw - 20px), calc((100vh - 150px) * 16 / 9));
  max-width:1600px;
  aspect-ratio:16/9;
  display:grid;
  grid-template-columns:68px minmax(0,1fr) 300px;
  gap:8px;
  padding:8px;
  background:#0d1319;
  border:2px solid #657381;
  border-radius:14px;
  overflow:hidden;
}
.devbar{width:min(calc(100vw - 20px),1600px);display:flex;justify-content:space-between;align-items:center;gap:12px;margin:0 0 8px 0}.eyebrow{font-size:.72rem;letter-spacing:.13em;color:var(--muted);font-weight:700}.title{font-size:1.55rem;font-weight:800}.topBtns{display:flex;gap:6px;flex-wrap:wrap}.rail,.calendar{padding:8px;display:flex;flex-direction:column;gap:6px;min-width:0;min-height:0;overflow:hidden;background:var(--panel);border:1px solid #354351;border-radius:10px}.rail{display:flex;flex-direction:column;gap:6px;padding:7px;min-height:0;overflow:hidden}.tool{height:58px;padding:4px;font-size:1.18rem;flex:0 0 auto}.tool span{display:block;font-size:.62rem;margin-top:3px;color:#cbd3da}.tool.active{border-color:var(--gold);background:#574925}.mapPane{position:relative;overflow:hidden;border-radius:10px;background:#879da7;border:1px solid #354351;min-width:0;min-height:0}.mapPane>img{position:absolute;inset:0;width:100%;height:100%;object-fit:fill}.markers{position:absolute;inset:0;z-index:5;pointer-events:none}.marker{position:absolute;width:var(--marker);height:var(--marker);border-radius:50%;border:2px solid #16202a;transform:translate(-50%,-50%);pointer-events:auto;padding:0}.marker.red{background:var(--red)}.marker.yellow{background:var(--yellow)}.marker.context{background:var(--teal)}.marker.dim{opacity:.24}.marker:hover,.marker.sel{transform:translate(-50%,-50%) scale(1.55);box-shadow:0 0 0 4px rgba(255,255,255,.55)}.tip{display:none;position:absolute;top:135%;left:50%;transform:translateX(-50%);background:#111820;color:#fff;padding:3px 6px;border-radius:4px;white-space:nowrap;font-size:.7rem}.marker:hover .tip,.marker.sel .tip{display:block}.story{position:absolute;left:3%;top:4%;z-index:8;width:min(58%,700px);background:rgba(243,233,207,.96);color:var(--ink);padding:16px 19px;border-radius:13px}.date{font-size:.8rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.story h1{margin:.25rem 0 .35rem;font-size:1.65rem;line-height:1.05}.story p{margin:0;font-size:1rem}.detail{position:absolute;z-index:18;right:2%;top:3%;bottom:3%;width:min(52%,650px);background:rgba(24,32,40,.985);border:1px solid #5c6977;border-radius:13px;padding:14px 15px;opacity:0;transform:translateX(24px);pointer-events:none;transition:.18s;overflow:auto}.detail.open{opacity:1;transform:translateX(0);pointer-events:auto}.x{position:absolute;right:8px;top:7px;border:0;background:transparent;font-size:1.45rem}.dtype{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:#dcc36e;font-weight:800}.detail h2{margin:.25rem 2rem .1rem 0}.coords{font-size:.82rem;color:var(--muted)}.fields{display:grid;grid-template-columns:1fr 1fr;gap:8px 15px;margin-top:12px}.field{border-top:1px solid #4c5967;padding-top:6px}.field b{display:block;font-size:.73rem;color:#aeb8c2}.field span{font-size:.92rem}.comment{margin-top:11px;background:#202a34;padding:10px;border-radius:8px;line-height:1.34}.overlay{position:absolute;inset:0;z-index:30;background:rgba(8,12,17,.78);display:flex;align-items:center;justify-content:center;padding:4%}.modal{position:relative;width:min(850px,92%);background:#202a34;border:1px solid #657281;border-radius:14px;padding:16px}.photoMock{height:330px;background:linear-gradient(145deg,#6e7e68,#29362d);display:flex;align-items:center;justify-content:center;border-radius:9px;font-size:1.2rem;font-weight:800}.iconGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px}.iconGrid>div{background:#27323d;border-radius:9px;padding:14px;text-align:center}.iconGrid b{display:block;font-size:2rem}.iconGrid strong{display:block;margin-top:5px}.iconGrid small{display:block;color:#aeb8c2;margin-top:3px}.flame.red{color:var(--red)}.flame.yellow{color:var(--yellow)}.flame.teal{color:var(--teal)}.iconNote{line-height:1.4}.veil{position:absolute;inset:0;z-index:40;background:#11171d;opacity:0;pointer-events:none}.veil.out{animation:vout var(--fo) ease forwards}.veil.in{animation:vin var(--fi) ease forwards}@keyframes vout{to{opacity:.93}}@keyframes vin{from{opacity:.93}to{opacity:0}}.calendar{padding:12px;display:flex;flex-direction:column;gap:10px}.calHead{display:flex;justify-content:space-between}.calHead small{display:block;color:var(--muted);font-size:.73rem;margin-top:2px}.month{background:#222d37;padding:5px;border-radius:8px}.monthName{font-weight:800;margin-bottom:6px}.week,.days{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.week span{text-align:center;color:#8f9aa4;font-size:.65rem}.day{aspect-ratio:1;border:0;border-radius:4px;background:#2d3844;color:#cbd3d9;padding:0;font-size:.66rem;min-width:0;min-height:0}.day.blank{opacity:0}.day.strike{background:#493e29;font-weight:800}.day.past{box-shadow:inset 0 0 0 2px #8d7541}.day.active{background:var(--gold);color:#18222b;box-shadow:0 0 0 3px rgba(228,189,88,.25);transform:scale(1.08)}.legend{display:flex;gap:10px;flex-wrap:wrap;font-size:.68rem;color:#aeb8c2}.lg{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px}.activeLg{background:var(--gold)}.pastLg{background:#8d7541}.strikeLg{background:#493e29}.progress{margin-top:auto}.progress>div:first-child{display:flex;justify-content:space-between;font-size:.72rem;color:#aeb8c2}.track{height:8px;background:#0e151b;border-radius:99px;overflow:hidden;margin-top:5px}.track i{display:block;height:100%;background:var(--gold);width:0}.transport{width:min(calc(100vw - 20px),1600px);display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;margin-top:8px}.transport input{width:100%}.settingsPanel{width:min(calc(100vw - 20px),1600px);margin-top:9px;background:#222c36;border:1px solid #536170;border-radius:10px;padding:13px}.settingsPanel h2{margin:0 0 10px}.settingsGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.settingsGrid label{font-size:.75rem}.settingsGrid input{display:block;width:100%;margin-top:4px;padding:6px;border-radius:6px;border:1px solid #5e6d7c;background:#151b21;color:#fff}.settingBtns{display:flex;gap:7px;margin-top:10px}footer{width:min(calc(100vw - 20px),1600px);font-size:.72rem;color:#8f9aa5;padding:8px 2px}
.exploreBadge{
 position:absolute;z-index:25;left:50%;bottom:18px;transform:translateX(-50%);
 background:rgba(17,25,32,.94);color:#f1d276;border:1px solid #8a7442;border-radius:999px;
 padding:8px 14px;font-size:.78rem;font-weight:900;letter-spacing:.08em;
 box-shadow:0 7px 20px rgba(0,0,0,.25)
}
@media(max-height:760px){
  .evCanvas{width:min(calc(100vw - 20px), calc((100vh - 125px) * 16 / 9))}
  .title{font-size:1.25rem}.eyebrow{font-size:.62rem}
  .story{padding:11px 14px}.story h1{font-size:1.3rem}.story p{font-size:.86rem}
  .tool{height:48px}.calendar{font-size:.88em}
}
@media(max-width:900px){
  body{overflow:auto}
  .evCanvas{min-width:760px}
  .devbar,.transport,footer,.settingsPanel{min-width:760px}
}

.sitePanelHead{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:start;padding-right:32px}
.siteTabs{display:flex;gap:5px;align-self:start}
.siteTab{border:1px solid #52606e;background:#26313c;color:#dbe2e7;border-radius:7px;padding:6px 9px;font-size:.73rem;font-weight:800}
.siteTab.active{background:#725b29;border-color:#a88943;color:#fff2c9}
.siteView{margin-top:12px}
.validationTitle,.dataTitle{font-size:.72rem;font-weight:900;letter-spacing:.11em;color:#e0c36f;margin-bottom:8px}
.validationSummary{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;background:#202934;border-radius:8px;padding:8px 10px;margin-bottom:9px;font-size:.78rem}
.validationSummary b{font-size:1rem;color:#f1e6c5}
.validationChecklist{display:grid;gap:4px}
.checkGroup{margin-top:6px;font-size:.66rem;font-weight:900;letter-spacing:.10em;color:#97a5b2;text-transform:uppercase}
.checkRow{display:grid;grid-template-columns:21px minmax(0,1fr) auto;gap:7px;align-items:center;padding:5px 7px;border-radius:6px;background:#202934;font-size:.74rem}
.checkState{width:18px;height:18px;display:flex;align-items:center;justify-content:center;border-radius:4px;font-size:.72rem;font-weight:900}
.checkState.pass{background:#31573f;color:#bfe0c7}
.checkState.partial{background:#66542a;color:#f5d685}
.checkState.na{background:#3b444d;color:#b8c0c7}
.checkState.fail{background:#663632;color:#f1b2ad}
.checkNote{font-size:.65rem;color:#9da9b4;text-align:right;max-width:165px}
.validationFoot{display:flex;gap:10px;flex-wrap:wrap;margin-top:8px;font-size:.62rem;color:#9eabb6}
.dataSwitch{margin-top:10px;width:100%;border:1px solid #95793f;background:#6c5729;color:#fff;border-radius:8px;padding:8px;font-weight:800}
.dataSwitch:hover{background:#7d6632}
.dataSwitch.secondary{background:#293440;border-color:#546270}
.fields{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px;margin-top:7px}
.comment{margin-top:12px}

/* ===== v0.46 INTRO / ICON / TABLE DEMONSTRATION FRAMES ===== */
.introScene,.tableScene{
 position:absolute;inset:0;z-index:15;
}
.introArt{
 position:absolute;inset:0;overflow:hidden;
}
.dreamArt{
 background:
 radial-gradient(circle at 18% 22%,rgba(255,255,255,.8) 0 2%,transparent 2.3%),
 radial-gradient(circle at 78% 18%,rgba(255,255,255,.65) 0 1.6%,transparent 1.9%),
 linear-gradient(135deg,#ff4fb2 0%,#d928a1 48%,#8f1b91 100%);
}
.realityArt{
 background:linear-gradient(#67705a 0 42%,#303d31 42% 100%);
}
.introCopy{
 position:absolute;left:7%;top:16%;width:48%;color:#fff;z-index:4;
 text-shadow:0 2px 8px rgba(0,0,0,.22)
}
.introKicker{font-size:.9rem;font-weight:900;letter-spacing:.22em}
.introBig{font-size:3.3rem;font-weight:1000;line-height:.98;margin-top:8px}
.introLine{font-size:1.15rem;line-height:1.3;margin-top:14px;max-width:560px}
.realityCopy{top:12%;width:55%}
.shopGirl{
 position:absolute;right:10%;bottom:4%;width:250px;height:470px;z-index:5;
}
.girlHair{
 position:absolute;left:52px;top:45px;width:145px;height:170px;border-radius:48% 48% 42% 42%;
 background:#40251f;box-shadow:18px 16px 0 #2c1b17
}
.girlFace{
 position:absolute;left:76px;top:68px;width:102px;height:116px;border-radius:48% 48% 45% 45%;
 background:#f2c9a8;color:#ef8f9d;font-size:0;
 border:3px solid rgba(54,35,27,.25)
}
.girlFace:before,.girlFace:after{
 content:"";position:absolute;top:42px;width:8px;height:8px;background:#2b2421;border-radius:50%
}
.girlFace:before{left:26px}.girlFace:after{right:26px}
.girlFace{box-shadow:inset 0 -20px 0 rgba(235,157,151,.08)}
.girlBody{
 position:absolute;left:57px;top:180px;width:140px;height:210px;border-radius:36px 36px 18px 18px;
 background:linear-gradient(#fff,#f7d7ef);border:3px solid rgba(94,32,78,.18)
}
.girlArm{position:absolute;top:210px;width:42px;height:170px;background:#f2c9a8;border-radius:24px;transform-origin:top center}
.armLeft{left:34px;transform:rotate(17deg)}.armRight{right:26px;transform:rotate(-18deg)}
.phone{
 position:absolute;left:4px;top:315px;width:54px;height:88px;border-radius:10px;background:#181b20;color:#fff;
 border:3px solid #f8dbef;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:.84rem;
 transform:rotate(-12deg)
}
.spark{position:absolute;color:#fff8d2;font-size:2.1rem;animation:sparkle 1.6s ease-in-out infinite}
.s1{left:8px;top:80px}.s2{right:0;top:130px;animation-delay:.4s}.s3{right:15px;top:330px;animation-delay:.8s}
@keyframes sparkle{50%{transform:scale(1.35);opacity:.45}}

.forest{position:absolute;inset:0;opacity:.96}
.forest i{position:absolute;bottom:0;width:9%;height:92%;background:#253326;clip-path:polygon(50% 0,100% 42%,72% 42%,100% 72%,64% 72%,64% 100%,36% 100%,36% 72%,0 72%,28% 42%,0 42%)}
.forest i:nth-child(1){left:3%;height:82%}.forest i:nth-child(2){left:20%;height:95%}.forest i:nth-child(3){left:38%;height:74%}.forest i:nth-child(4){left:58%;height:90%}.forest i:nth-child(5){left:76%;height:80%}.forest i:nth-child(6){left:90%;height:96%}
.gearGirl .girlBody{background:#4a5c3d;border-color:#273323}
.gearGirl .vest{position:absolute;left:73px;top:222px;width:110px;height:130px;border-radius:12px;background:#353f31;border:4px solid #222a20;color:#d7dfc8;display:flex;align-items:center;justify-content:center;font-weight:900;letter-spacing:.15em;z-index:3}
.helmet{position:absolute;left:64px;top:47px;width:125px;height:58px;border-radius:65px 65px 18px 18px;background:#59634c;border:4px solid #343b2e;z-index:8}
.drone{position:absolute;right:-68px;top:168px;width:128px;height:62px;color:#151a17;font-size:4.4rem;line-height:1;text-shadow:0 2px 0 #75806c;transform:rotate(-8deg)}
.gearGirl .phone{display:none}

.tableScene{background:rgba(12,18,24,.96);padding:4%}
.tableCard{height:100%;background:#f5f1e6;color:#23313d;border-radius:14px;padding:18px 20px;display:flex;flex-direction:column;box-shadow:0 14px 40px rgba(0,0,0,.3)}
.tableHead{display:flex;justify-content:space-between;gap:20px;align-items:flex-end;border-bottom:3px solid #2f6288;padding-bottom:9px}
.tableHead span{font-size:.72rem;font-weight:900;letter-spacing:.16em;color:#3973a0}
.tableHead h2{margin:3px 0 0;font-size:1.55rem}
.tableHint{font-size:.72rem;color:#66727c;text-align:right}
.closingTable{margin-top:10px;display:grid;grid-template-columns:1.75fr .8fr .8fr .9fr;border:1px solid #c5ccd1;overflow:hidden;flex:1;align-content:start}
.cth,.ctd{padding:5px 7px;border-right:1px solid #d1d6da;border-bottom:1px solid #d1d6da;min-width:0}
.cth{background:#245c82;color:#fff;font-size:.72rem;font-weight:900;letter-spacing:.06em}
.ctd{font-size:.69rem;background:#fff}
.ctd.site{font-weight:800}.ctd.site small{display:block;color:#6f7a83;font-size:.58rem;font-weight:500;margin-top:1px}
.ctd.status-red{color:#a53631;font-weight:900}.ctd.status-yellow{color:#9a6d09;font-weight:900}.ctd.status-context{color:#39766d;font-weight:900}
.tableFoot{font-size:.62rem;color:#6f7880;padding-top:7px}
.iconPage{max-width:850px}
.iconPage h2{margin-top:0;font-size:1.6rem}
.iconGrid{grid-template-columns:repeat(4,1fr)!important}
.iconGrid>div{min-height:126px}
.iconGrid b{font-size:2rem}
.iconGrid strong{font-size:.92rem}
.iconGrid small{line-height:1.25}
@media(max-height:760px){
 .introBig{font-size:2.6rem}.shopGirl{transform:scale(.82);transform-origin:bottom right}
 .cth,.ctd{padding:3px 5px}.ctd{font-size:.62rem}.ctd.site small{font-size:.52rem}
}

/* ===== v0.47 packaged image assets ===== */
.fullFrameAsset{
  width:100%;height:100%;object-fit:cover;display:block;
}
.mediaAsset{
  width:100%;max-height:66vh;object-fit:contain;display:block;border-radius:10px;background:#0f151a;
}
.imagePage{
  width:min(96%,1180px)!important;
  max-width:none!important;
  padding:10px!important;
  background:#0c1014!important;
}
.iconAsset{
  display:block;width:100%;height:auto;max-height:78vh;object-fit:contain;border-radius:8px;
}

/* ===== v0.47 damaged / undamaged pages ===== */
.summaryScene{
  position:absolute;inset:0;z-index:17;background:rgba(11,17,22,.97);padding:3.5%;
}
.summaryCard{
  height:100%;background:#f4f0e4;color:#24323d;border-radius:14px;padding:17px 19px;
  display:flex;flex-direction:column;box-shadow:0 14px 40px rgba(0,0,0,.28);
}
.summaryHead{
  display:flex;justify-content:space-between;align-items:flex-end;gap:18px;
  border-bottom:3px solid #3d6f93;padding-bottom:9px;
}
.summaryHead span{font-size:.7rem;letter-spacing:.15em;font-weight:900;color:#4b7695}
.summaryHead h2{font-size:1.48rem;margin:3px 0 0}
.summaryCount{
  min-width:76px;text-align:center;padding:8px 11px;border-radius:9px;
  background:#243b4d;color:#fff;font-weight:900;font-size:1.1rem
}
.damagedHead{border-bottom-color:#a94c45}.damagedHead .summaryCount{background:#873d38}
.undamagedHead{border-bottom-color:#507b68}.undamagedHead .summaryCount{background:#3f6656}
.summaryTable{
  margin-top:10px;display:grid;grid-template-columns:1.75fr .85fr .85fr 1fr;
  border:1px solid #c6cdd2;overflow:hidden;align-content:start;flex:1
}
.sth,.std{
  padding:5px 7px;border-right:1px solid #d1d6da;border-bottom:1px solid #d1d6da;min-width:0
}
.sth{background:#2c5f82;color:#fff;font-size:.7rem;font-weight:900;letter-spacing:.05em}
.std{background:#fff;font-size:.67rem}
.std.site{font-weight:900}.std.site small{display:block;color:#6e7982;font-size:.56rem;font-weight:500}
.std.major{color:#a23c36;font-weight:900}.std.special{color:#987012;font-weight:900}
.std.clear{color:#3f705e;font-weight:900}.std.review{color:#7a6842;font-weight:900}
.summaryFoot{font-size:.61rem;color:#6f7880;padding-top:7px}
@media(max-height:760px){
 .summaryHead h2{font-size:1.25rem}
 .sth,.std{padding:3px 5px}.std{font-size:.6rem}.std.site small{font-size:.51rem}
}

/* ===== v0.48 launch screen / preload gate ===== */
body{min-height:100vh}
.appPreload{
  visibility:hidden;
}
.launchScreen{
  position:fixed;
  inset:0;
  z-index:99999;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  background:
    radial-gradient(circle at 50% 42%,rgba(171,40,146,.16),transparent 28%),
    linear-gradient(180deg,#111820 0%,#0b1117 100%);
  color:#f5f3eb;
  opacity:1;
  transition:opacity .35s ease;
}
.launchScreen.launchHide{
  opacity:0;
  pointer-events:none;
}
.launchPlay{
  width:126px;
  height:126px;
  border-radius:50%;
  border:3px solid #e1c16a;
  background:#1f2a35;
  color:#f4d477;
  display:flex;
  align-items:center;
  justify-content:center;
  box-shadow:0 12px 34px rgba(0,0,0,.35),0 0 0 10px rgba(225,193,106,.07);
  cursor:pointer;
  transition:transform .16s ease,background .16s ease,box-shadow .16s ease;
}
.launchPlay:hover{
  transform:scale(1.06);
  background:#293746;
  box-shadow:0 14px 38px rgba(0,0,0,.4),0 0 0 13px rgba(225,193,106,.1);
}
.launchPlay:focus-visible{
  outline:4px solid #fff1b0;
  outline-offset:6px;
}
.launchTriangle{
  font-size:3.8rem;
  line-height:1;
  margin-left:8px;
}
.launchTitle{
  margin-top:24px;
  font-size:1.35rem;
  font-weight:900;
  letter-spacing:.04em;
}
.launchSub{
  margin-top:7px;
  font-size:.84rem;
  color:#aeb9c3;
  letter-spacing:.08em;
  text-transform:uppercase;
}

/* ===== v0.49 full-stage intro/decoder/table modes ===== */
.evCanvas.introMode{
  grid-template-columns:1fr;
  padding:0;
}
.evCanvas.introMode .rail,
.evCanvas.introMode .calendar{
  display:none!important;
}
.evCanvas.introMode .mapPane{
  grid-column:1;
  width:100%;
  height:100%;
  border:0;
  border-radius:12px;
}
.evCanvas.introMode #mapImg,
.evCanvas.introMode #markers,
.evCanvas.introMode #story,
.evCanvas.introMode #detail{
  display:none!important;
}

.introScene,
.tableScene,
.summaryScene{
  position:absolute;
  inset:0;
  z-index:60;
  width:100%;
  height:100%;
}

.introArt{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
}
.fullFrameAsset{
  width:100%!important;
  height:100%!important;
  object-fit:cover!important;
}

/* Full-screen decoder page using the final PNG */
.evCanvas.introMode #icons.overlay{
  position:absolute;
  inset:0;
  z-index:65;
  display:flex;
  align-items:center;
  justify-content:center;
  background:#080c10;
  padding:0;
}
.evCanvas.introMode #icons .modal.imagePage{
  width:100%!important;
  height:100%!important;
  max-width:none!important;
  max-height:none!important;
  padding:0!important;
  border-radius:0!important;
  background:#080c10!important;
}
.evCanvas.introMode #icons .iconAsset{
  width:100%!important;
  height:100%!important;
  max-height:none!important;
  object-fit:cover!important;
  border-radius:0!important;
}
.evCanvas.introMode #icons .x{
  display:none;
}

/* Closing table full-page mode */
.tableScene{
  background:#0d1319;
  padding:2.5%;
}
.tableCard{
  height:100%;
}
.closingTable{
  overflow:auto;
}

/* Remove any hidden overlay conflicts while in special frames */
.evCanvas.introMode .exploreBadge{display:none!important}

/* ===== v0.50 daily map presentation ===== */
.story{
  left:auto!important;
  right:4%!important;
  top:5%!important;
  width:min(54%,680px)!important;
  background:transparent!important;
  color:#fff!important;
  padding:0!important;
  border-radius:0!important;
  text-align:right;
  text-shadow:
    0 2px 3px rgba(0,0,0,.95),
    0 0 8px rgba(0,0,0,.75),
    0 0 16px rgba(0,0,0,.45);
  pointer-events:none;
}
.story .date,.story h1,.story p{color:#fff!important}
.story h1{font-size:1.8rem!important}
.story p{font-size:1rem!important}

/* Current-day strike uses a flame; previous strike days revert to dots. */
.marker.currentStrike{
  width:34px!important;
  height:44px!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  overflow:visible;
  z-index:10;
}
.marker.currentStrike svg{
  display:block;
  width:34px;
  height:44px;
  overflow:visible;
  filter:drop-shadow(0 2px 2px rgba(0,0,0,.45));
}
.marker.currentStrike:hover{
  transform:translate(-50%,-50%) scale(1.25)!important;
  box-shadow:none!important;
}
.marker.currentStrike .tip{top:105%}

/* Show that table rows are navigation controls. */
.ctd.clickable,.std.clickable{
  cursor:pointer;
}
.ctd.clickable:hover,.std.clickable:hover{
  background:#fff2c7!important;
}
.tableRowHover{
  outline:2px solid #d2ad4e;
  outline-offset:-2px;
}

/* Brief regional-map cue. */
.regionCue{
  position:absolute;
  z-index:16;
  left:50%;
  top:4%;
  transform:translateX(-50%);
  padding:6px 11px;
  border-radius:999px;
  background:rgba(18,25,32,.9);
  color:#f4d67d;
  border:1px solid rgba(244,214,125,.55);
  font-size:.7rem;
  font-weight:900;
  letter-spacing:.08em;
  pointer-events:none;
}

/* ===== v0.51 hardened calendar state ===== */
.day.strike{
  position:relative;
}
.day.past{
  background:#5a4630!important;
  color:#f3e7c5!important;
  box-shadow:inset 0 0 0 2px #b08d4e!important;
}
.day.active{
  background:#f0c95f!important;
  color:#17212a!important;
  box-shadow:
    0 0 0 3px rgba(240,201,95,.38),
    0 0 18px rgba(240,201,95,.55)!important;
  transform:scale(1.10);
  z-index:3;
  animation:calendarHit .6s ease 1;
}
@keyframes calendarHit{
  0%{transform:scale(.88)}
  55%{transform:scale(1.16)}
  100%{transform:scale(1.10)}
}

/* ===== v0.52 summary-page navigation ===== */
.summaryNav{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding-top:8px;
}
.summaryNav .summaryFoot{
  padding-top:0;
  flex:1;
}
.summaryNavBtn{
  border:1px solid #9b7d3d;
  background:#6d5729;
  color:#fff7dc;
  border-radius:8px;
  padding:7px 11px;
  font-size:.72rem;
  font-weight:900;
  white-space:nowrap;
}
.summaryNavBtn:hover{
  background:#7d6632;
}
.summaryNavBtn.secondary{
  background:#2e3a45;
  border-color:#596977;
  color:#eef2f4;
}
.summaryNavBtn.secondary:hover{
  background:#3a4855;
}

/* ===== v0.53 connector, return navigation, final placeholder ===== */
.returnSummary{
  width:100%;
  margin-top:10px;
  border:1px solid #9a7b3d;
  background:#6b5629;
  color:#fff3cf;
  border-radius:8px;
  padding:8px 10px;
  font-weight:900;
}
.returnSummary:hover{background:#7b6532}

.connectorScene,.finalScene{
  position:absolute;inset:0;z-index:70;
  display:flex;align-items:center;justify-content:center;
  background:#0d1319;
}
.connectorCard{
  width:min(78%,900px);
  text-align:center;
  color:#f2efe6;
  padding:40px 48px;
}
.connectorEyebrow,.finalEyebrow{
  font-size:.8rem;
  font-weight:900;
  letter-spacing:.18em;
  color:#e0c26e;
}
.connectorCard h2{
  font-size:2.5rem;
  margin:12px 0 10px;
}
.connectorCard p{
  font-size:1.15rem;
  line-height:1.45;
  color:#c8d0d6;
}
.connectorArrow{
  font-size:3rem;
  color:#e0c26e;
  margin-top:18px;
  animation:connectorBounce 1.2s ease-in-out infinite;
}
@keyframes connectorBounce{
  50%{transform:translateY(8px);opacity:.6}
}

.finalCard{
  width:min(90%,1080px);
  max-height:90%;
  overflow:auto;
  background:#f3efe4;
  color:#25333e;
  border-radius:16px;
  padding:28px 32px;
  box-shadow:0 14px 42px rgba(0,0,0,.32);
}
.finalCard h2{
  font-size:2.15rem;
  margin:6px 0 8px;
}
.finalLead{
  font-size:1.05rem;
  line-height:1.45;
  max-width:950px;
}
.finalStats{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:10px;
  margin:20px 0;
}
.finalStats>div{
  background:#fff;
  border:1px solid #cfd5d9;
  border-radius:10px;
  padding:12px;
  text-align:center;
}
.finalStats b{
  display:block;
  font-size:1.7rem;
  color:#8e3e38;
}
.finalStats span{
  display:block;
  margin-top:3px;
  font-size:.76rem;
  color:#59656e;
}
.finalCard ul{
  margin:10px 0 0;
  padding-left:22px;
  line-height:1.5;
  font-size:.96rem;
}
@media(max-height:760px){
  .connectorCard h2{font-size:2rem}
  .finalCard{padding:20px 24px}
  .finalCard h2{font-size:1.7rem}
  .finalLead{font-size:.92rem}
  .finalStats b{font-size:1.35rem}
  .finalCard ul{font-size:.84rem}
}

/* ===== v0.54 map restoration state ===== */
.evCanvas.mapMode{
  grid-template-columns:68px minmax(0,1fr) 300px;
  padding:8px;
}
.evCanvas.mapMode .rail,
.evCanvas.mapMode .calendar{
  display:flex!important;
}
.evCanvas.mapMode .mapPane{
  display:block!important;
}
.evCanvas.mapMode #mapImg{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
}
.evCanvas.mapMode #markers{
  display:block!important;
  visibility:visible!important;
}
.evCanvas.mapMode #detail{
  display:block;
}

/* ===== v0.55 refinement pass ===== */
.evCanvas,
.evCanvas.mapMode{
  grid-template-columns:minmax(0,1fr) 330px!important;
  gap:10px;
}
.rail{display:none!important}

/* Floating translucent map navigation */
.floatingNav{
  position:absolute;
  z-index:24;
  left:14px;
  bottom:14px;
  display:flex;
  gap:6px;
  flex-wrap:wrap;
  max-width:74%;
  padding:7px;
  border-radius:12px;
  background:rgba(248,244,232,.78);
  border:1px solid rgba(70,84,95,.32);
  backdrop-filter:blur(5px);
  box-shadow:0 5px 18px rgba(0,0,0,.16);
}
.navBtn{
  border:1px solid rgba(65,80,92,.34);
  background:rgba(255,255,255,.58);
  color:#2d3a44;
  border-radius:8px;
  padding:6px 9px;
  font-size:.72rem;
  font-weight:900;
}
.navBtn:hover,.navBtn.active{
  background:rgba(235,205,120,.88);
  color:#1e2a33;
}

/* CSS map labels */
.mapLabels{
  position:absolute;inset:0;z-index:7;pointer-events:none;
}
.mapLabel{
  position:absolute;
  font-size:.88rem;
  font-weight:900;
  color:#1f2d36;
  text-shadow:0 1px 2px rgba(255,255,255,.95),0 0 5px rgba(255,255,255,.75);
}
.label-spb{left:40.5%;top:14%}
.label-moscow{left:51.5%;top:38%}
.label-kyiv{left:28.2%;top:66%}

/* current strike facility name */
.facilityLabel{
  position:absolute;
  z-index:13;
  font-size:1.35rem;
  font-weight:1000;
  letter-spacing:.03em;
  color:#fff;
  text-shadow:0 2px 3px rgba(0,0,0,.92),0 0 8px rgba(0,0,0,.7);
  transform:translate(-50%,-135%);
  pointer-events:none;
  white-space:nowrap;
}

/* lighter calendar */
.calendar{
  background:#ebe7dc!important;
  color:#26343e!important;
  border:1px solid #c7c2b5!important;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.5);
}
.calHead strong{color:#24343e}
.calHead small{color:#6c747a}
.month{
  background:#f5f1e7!important;
  border:1px solid #d7d1c4;
}
.month strong{color:#34434e}
.weekdays span{color:#777f84!important}
.day{
  background:#ece7dc!important;
  color:#3e4b55!important;
  font-size:.78rem!important;
  border:1px solid #ded8cb!important;
}
.day.strike{
  background:#e8d5a1!important;
  color:#57471f!important;
}
.day.past{
  background:#d9c58f!important;
  color:#4a3d1f!important;
  box-shadow:inset 0 0 0 2px #b99a52!important;
}
.day.active{
  background:#f1c84f!important;
  color:#17212a!important;
  box-shadow:0 0 0 3px rgba(241,200,79,.32),0 0 13px rgba(241,200,79,.45)!important;
}
.legend{color:#5f686f!important}
.progress{margin-top:auto}
.progress>div:first-child{color:#667078!important}
.track{background:#d5d0c4!important}
.track i{background:#bc9440!important}

/* simplify footer feel */
.calendar .legend{font-size:.66rem}
.calendar .progress{padding-top:4px}

/* connector real control */
.connectorContinue{
  margin-top:22px;
  border:1px solid #e0c26e;
  background:#6c5728;
  color:#fff2c9;
  border-radius:10px;
  padding:10px 18px;
  font-size:.95rem;
  font-weight:900;
}
.connectorContinue:hover{background:#816b37}

/* development-only slide indicator */
.slideIndicator{
  position:absolute;
  z-index:90;
  top:10px;
  left:10px;
  padding:4px 7px;
  border-radius:7px;
  background:rgba(15,22,28,.62);
  color:#f5e8bb;
  font-size:.68rem;
  font-weight:900;
  letter-spacing:.08em;
  pointer-events:none;
}

/* improved validation/data visual structure */
.detail{
  width:min(54%,680px)!important;
  background:rgba(248,245,237,.975)!important;
  color:#26343e!important;
  border:1px solid #b9b6ad!important;
}
.detail h2,.detail .dtype,.detail .coords{color:#26343e!important}
.siteTabs{margin-top:3px}
.siteTab{
  background:#e8e4d8!important;
  color:#34434e!important;
  border-color:#bfc3c3!important;
}
.siteTab.active{
  background:#315f82!important;
  color:#fff!important;
  border-color:#315f82!important;
}
.validationTitle,.dataTitle{color:#315f82!important}
.validationSummary,.checkRow,.comment{
  background:#f0ede5!important;
  color:#2e3b44!important;
}
.checkGroup{color:#66727a!important}
.checkNote{color:#778088!important}
.dataSwitch{background:#315f82!important;border-color:#315f82!important}
.dataSwitch.secondary{background:#e5e1d6!important;color:#34434e!important;border-color:#bec2c4!important}
.returnSummary{background:#6f5b2b!important}

/* table refinements */
.summaryCard,.tableCard{
  background:#f7f3e9!important;
}
.summaryTable,.closingTable{
  border-color:#bdc4c7!important;
}
.sth,.cth{
  background:#315f82!important;
  color:#fff!important;
}
.std,.ctd{font-size:.72rem!important}
.std.site,.ctd.site{font-size:.75rem!important}

/* ===== v0.57 full-stage slide fix =====
   Dream, Reality, connector, decoder and other full-stage frames
   must use the entire 16:9 EV composition. No calendar column. */
.evCanvas.introMode{
  display:block!important;
  position:relative!important;
  padding:0!important;
  grid-template-columns:none!important;
}
.evCanvas.introMode .calendar,
.evCanvas.introMode .floatingNav,
.evCanvas.introMode .mapPane{
  display:none!important;
}
.evCanvas.introMode .fullStage,
.evCanvas.introMode .fullStageFrame,
.evCanvas.introMode .frameOverlay{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  max-width:none!important;
  max-height:none!important;
  margin:0!important;
}
.evCanvas.introMode .fullStage img,
.evCanvas.introMode .fullStageFrame img,
.evCanvas.introMode .frameOverlay img{
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  display:block!important;
}

/* ===== v0.58 correction =====
   Full-stage content lives INSIDE .mapPane, so the pane must stay visible.
   Hide only map/navigation/calendar chrome, not the slide host itself. */
.evCanvas.introMode .mapPane{
  display:block!important;
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  border:0!important;
  border-radius:12px!important;
  background:#080c10!important;
  overflow:hidden!important;
}
.evCanvas.introMode .calendar,
.evCanvas.introMode .floatingNav,
.evCanvas.introMode #mapImg,
.evCanvas.introMode #markers,
.evCanvas.introMode .mapLabels,
.evCanvas.introMode #facilityLabel,
.evCanvas.introMode #story,
.evCanvas.introMode #detail{
  display:none!important;
}

/* The actual special scenes fill the pane. */
.evCanvas.introMode .introScene,
.evCanvas.introMode .introArt,
.evCanvas.introMode .connectorScene,
.evCanvas.introMode .tableScene,
.evCanvas.introMode .summaryScene,
.evCanvas.introMode .finalScene{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
}

/* Intro images should fill the complete 16:9 presentation stage. */
.evCanvas.introMode .fullFrameAsset{
  width:100%!important;
  height:100%!important;
  object-fit:cover!important;
  display:block!important;
}

/* ===== v0.59 MAP SYSTEM =====
   Base images contain geography only. All readable labels are HTML/CSS. */
.mapPane{
  background:#b7cfda;
}
#mapImg{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:fill; /* geographic bounds map directly to pane percent coordinates */
}
.mapLabels{
  position:absolute;
  inset:0;
  z-index:7;
  pointer-events:none;
}
.mapLabel{
  position:absolute;
  font-size:.88rem;
  font-weight:900;
  color:#273842;
  letter-spacing:.01em;
  text-shadow:
    0 1px 0 rgba(255,255,255,.95),
    0 0 4px rgba(255,255,255,.88);
  white-space:nowrap;
}
.mapLabel::before{
  content:"";
  position:absolute;
  width:6px;
  height:6px;
  border-radius:50%;
  background:#273842;
  left:-10px;
  top:50%;
  transform:translateY(-50%);
  box-shadow:0 0 0 2px rgba(255,255,255,.5);
}

/* default campaign-map labels */
.label-spb{left:15.1%;top:16.9%}
.label-moscow{left:25.8%;top:37.2%}
.label-kyiv{left:7.9%;top:67.9%}

/* Regional view labels are positioned by JS when the map changes. */
.evCanvas[data-map-view="moscow"] .label-spb,
.evCanvas[data-map-view="moscow"] .label-kyiv{display:none}
.evCanvas[data-map-view="moscow"] .label-moscow{
  display:block; left:41.3%; top:39.3%;
  font-size:1.05rem;
}
.evCanvas[data-map-view="main"] .mapLabel{display:block}

/* map-based scenes must always reveal their geographic substrate */
.evCanvas.mapMode .mapPane,
.evCanvas.mapMode #mapImg{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
}


/* ===== v0.60 MAP + CONTROL REFINEMENT ===== */
:root{
  --reader-action:#c8a54a;
  --reader-action-hover:#dfbd61;
  --reader-action-ink:#1f2a31;
  --reader-action-soft:rgba(248,244,232,.90);
  --reader-action-border:#a98737;
}

/* More accurate CSS city positions from the map bounds. */
.evCanvas[data-map-view="main"] .label-spb{left:8.9%;top:17.2%}
.evCanvas[data-map-view="main"] .label-moscow{left:25.9%;top:35.8%}
.evCanvas[data-map-view="main"] .label-kyiv{left:9.4%;top:59.3%}

.evCanvas[data-map-view="moscow"] .label-moscow{
  left:41.6%!important;
  top:39.1%!important;
}

/* Ural Mountains: base image carries only the ridge cue; text is CSS/HTML. */
.geoLabel{
  position:absolute;
  z-index:7;
  pointer-events:none;
  color:#625b4d;
  font-size:.66rem;
  font-weight:900;
  letter-spacing:.13em;
  text-shadow:0 1px 2px rgba(255,255,255,.85);
  white-space:nowrap;
}
.label-urals{
  left:76.4%;
  top:27%;
  transform:rotate(-83deg);
  transform-origin:left center;
}
.evCanvas[data-map-view="moscow"] .label-urals{display:none}

/* Reader controls use one recognizable warm-gold family.
   Development controls in the browser header remain visually separate. */
.navBtn,
.connectorContinue,
.summaryNavBtn,
.dataSwitch,
.returnSummary,
.siteTab,
#prev,
#next{
  background:var(--reader-action)!important;
  border:1px solid var(--reader-action-border)!important;
  color:var(--reader-action-ink)!important;
  font-weight:900!important;
}
.navBtn:hover,
.connectorContinue:hover,
.summaryNavBtn:hover,
.dataSwitch:hover,
.returnSummary:hover,
.siteTab:hover,
#prev:hover,
#next:hover{
  background:var(--reader-action-hover)!important;
}
.navBtn.active,
.siteTab.active{
  background:var(--reader-action-hover)!important;
  color:#172129!important;
  box-shadow:inset 0 0 0 2px rgba(255,255,255,.35);
}
.summaryNavBtn.secondary,
.dataSwitch.secondary{
  background:var(--reader-action-soft)!important;
  color:#4b4433!important;
}

/* Make the longer campaign-calendar title breathe. */
.calHead strong{
  font-size:.78rem!important;
  line-height:1.1;
  display:block;
  max-width:190px;
}

/* ===== v0.61 ROAD REALISM + URALS LABEL ===== */
.label-urals{
  left:73.8%!important;
  top:31%!important;
  transform:rotate(-18deg)!important;
  transform-origin:left center!important;
  font-size:.82rem!important;
  font-weight:1000!important;
  letter-spacing:.10em!important;
  color:#514b40!important;
  background:rgba(247,242,225,.64);
  padding:3px 7px;
  border-radius:6px;
  text-shadow:0 1px 2px rgba(255,255,255,.95)!important;
  box-shadow:0 1px 5px rgba(0,0,0,.08);
}

/* ===== v0.65 visual polish: connector warehouse backdrop + calendar heading ===== */
.calHead strong{
  display:block;
  font-size:1.02rem;
  line-height:1.08;
  letter-spacing:.01em;
}

.connectorScene{
  position:absolute;
  inset:0;
  overflow:hidden;
  background:#0d141a;
}
.connectorScene::before{
  content:"";
  position:absolute;
  inset:0;
  background-image:
    linear-gradient(rgba(9,16,22,.70),rgba(9,16,22,.82)),
    url('../assets/images/wbinside.png');
  background-size:cover;
  background-position:center 54%;
  filter:grayscale(1) sepia(.16) saturate(.62) contrast(1.06);
  transform:scale(1.015);
  z-index:0;
}
.connectorScene::after{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(90deg,rgba(10,16,21,.34),rgba(10,16,21,.08) 45%,rgba(10,16,21,.24));
  z-index:1;
  pointer-events:none;
}
.connectorCard{
  position:relative;
  z-index:2;
  background:rgba(13,20,26,.64);
  border:1px solid rgba(205,216,225,.18);
  box-shadow:0 18px 48px rgba(0,0,0,.32);
  backdrop-filter:blur(2px);
  -webkit-backdrop-filter:blur(2px);
  padding:30px 38px 32px;
  border-radius:18px;
  max-width:850px;
}
.connectorCard h2{text-shadow:0 2px 10px rgba(0,0,0,.48)}
.connectorCard p{text-shadow:0 1px 6px rgba(0,0,0,.55)}


/* ===== v0.67 consolidation / cleanup pass ===== */

/* S03 accepted full-frame title image; no internal Continue control. */
.connectorScene{
  background:#0c1116!important;
  padding:0!important;
}
.connectorScene::before,.connectorScene::after{display:none!important}
.connectorFullAsset{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
}

/* Stronger active-site names: navy text on a light cool panel, offset from flames. */
.facilityLabel{display:none!important}
.siteCallout{
  position:absolute;
  z-index:15;
  top:50%;
  transform:translateY(calc(-50% + var(--callout-shift,0px)));
  padding:5px 9px 6px;
  min-width:max-content;
  max-width:220px;
  border-radius:7px;
  background:rgba(242,247,248,.94);
  border:1px solid rgba(43,78,101,.48);
  color:#12344a;
  font-size:.92rem;
  line-height:1.05;
  font-weight:1000;
  letter-spacing:.01em;
  text-align:left;
  text-shadow:none;
  box-shadow:0 3px 10px rgba(27,43,54,.24);
  pointer-events:none;
  white-space:nowrap;
}
.siteCallout.calloutRight{left:31px}
.siteCallout.calloutLeft{right:31px}
.siteCallout::before{
  content:"";
  position:absolute;
  top:50%;
  width:17px;
  height:2px;
  background:#426b82;
}
.siteCallout.calloutRight::before{right:100%}
.siteCallout.calloutLeft::before{left:100%}

/* Context pages should not pretend to be strike flames; make their teal locations obvious. */
.marker.contextFocus{
  width:26px;
  height:26px;
  background:#74aaa8!important;
  border:4px solid #f0f5f4!important;
  box-shadow:0 0 0 2px #254b5d,0 4px 12px rgba(0,0,0,.28);
}

/* Method page: message stays primary while the complete strike network is visible underneath. */
.evCanvas.methodFrame #markers .marker{
  opacity:.48;
  filter:saturate(.72);
}
.evCanvas.methodFrame #story{
  width:min(64%,760px);
  background:rgba(244,248,249,.94);
  color:#15364a;
  border:2px solid rgba(56,104,131,.55);
  box-shadow:0 10px 28px rgba(26,44,56,.22);
}
.evCanvas.methodFrame #story h1{font-size:1.9rem}

/* Give calendar panels a little color without returning to brown/red. */
.calendar{
  border:2px solid #6f9bb1!important;
  background:linear-gradient(180deg,#e7eef0 0%,#eee9dc 45%,#ebe7dc 100%)!important;
  box-shadow:
    inset 5px 0 0 #d2ad45,
    inset 0 0 0 1px rgba(255,255,255,.72),
    0 4px 14px rgba(21,47,62,.16)!important;
}
.calHead{
  padding:3px 5px 7px 8px;
  border-bottom:2px solid #8fb3c4;
}
.calHead strong{
  font-size:1.12rem!important;
  line-height:1.02!important;
  color:#163a50!important;
}
.month{
  border:1px solid #91b3c3!important;
  box-shadow:inset 4px 0 0 rgba(210,173,69,.68);
}

/* Media page: use the photo as the main event instead of a small modal image. */
#media{
  padding:1.6%!important;
  background:rgba(6,10,14,.9)!important;
}
#media .modal{
  width:97%!important;
  max-width:none!important;
  height:96%!important;
  padding:10px 12px 11px!important;
  display:grid;
  grid-template-rows:minmax(0,1fr) auto auto;
  gap:5px;
  background:#121a20!important;
}
#media .mediaAsset{
  width:100%!important;
  height:100%!important;
  max-height:none!important;
  object-fit:contain!important;
  background:#0b1116!important;
}
#media .modal h2{
  margin:3px 36px 0 3px;
  font-size:1.25rem;
  color:#f3f1e8;
}
#media .modal p{
  margin:0 3px 2px;
  color:#aebac2;
  font-size:.76rem;
}

/* Filled-out master/explore page legend. */
.mapLegendBox{
  position:absolute;
  z-index:22;
  right:18px;
  bottom:18px;
  width:min(330px,36%);
  padding:11px 13px;
  border-radius:12px;
  background:rgba(244,248,248,.94);
  color:#17384b;
  border:2px solid #759eb2;
  box-shadow:0 8px 24px rgba(18,40,53,.25);
  backdrop-filter:blur(4px);
}
.mapLegendBox>div{
  display:grid;
  grid-template-columns:15px 1fr;
  gap:7px;
  align-items:center;
  margin:5px 0;
  font-size:.76rem;
  line-height:1.22;
}
.legendTitle{
  display:block!important;
  margin:0 0 7px!important;
  color:#17384b;
  font-size:.78rem!important;
  font-weight:1000;
  letter-spacing:.12em;
}
.legendDot{width:12px;height:12px;border-radius:50%;display:block;border:2px solid #17252e}
.legendRed{background:#d9564e}
.legendYellow{background:#e0b74b}
.legendTeal{background:#6fa7a2}
.legendHow{
  display:block!important;
  margin-top:8px!important;
  border-top:1px solid #aabfc8;
  padding-top:7px;
  color:#476775;
  font-weight:800;
}

/* Closing strike-summary boilerplate. */
.finalScene{
  position:absolute;
  inset:0;
  overflow:hidden;
  background:#11191f!important;
}
.finalBackdrop{
  position:absolute;
  inset:0;
  background-image:
    linear-gradient(90deg,rgba(10,17,22,.42),rgba(10,17,22,.62)),
    url('../assets/images/wbinside.png');
  background-size:cover;
  background-position:center;
  filter:grayscale(.72) saturate(.45) contrast(1.35) brightness(.54);
  transform:scale(1.035);
}
.damageBand{
  position:absolute;
  background:rgba(4,8,11,.82);
  border:1px solid rgba(217,227,232,.14);
  box-shadow:0 10px 30px rgba(0,0,0,.5);
}
.damageBandA{
  width:52%;
  height:15%;
  right:-5%;
  top:23%;
  transform:rotate(-7deg);
}
.damageBandB{
  width:42%;
  height:11%;
  right:7%;
  top:45%;
  transform:rotate(8deg);
}
.smoke{
  position:absolute;
  border-radius:50%;
  background:radial-gradient(circle,rgba(120,130,136,.42) 0%,rgba(70,78,83,.26) 38%,transparent 70%);
  filter:blur(18px);
}
.smokeA{width:42%;height:45%;right:3%;top:0}
.smokeB{width:35%;height:40%;right:21%;top:17%}

.finalSummaryCard{
  position:relative;
  z-index:3;
  width:min(72%,920px);
  margin-left:5%;
  padding:32px 34px;
  border-radius:16px;
  background:rgba(239,244,244,.92);
  color:#153447;
  border:2px solid rgba(112,157,178,.72);
  box-shadow:0 20px 54px rgba(0,0,0,.36);
}
.finalSummaryCard .finalEyebrow{color:#b28a21}
.finalSummaryCard h2{
  margin:7px 0 9px;
  font-size:2.5rem;
  line-height:1.02;
  color:#102f42;
}
.finalSummaryCard .finalLead{
  margin:0;
  max-width:760px;
  font-size:1.02rem;
  line-height:1.42;
  color:#355567;
}
.finalSummaryCard .finalStats{
  margin:20px 0 14px;
}
.finalSummaryCard .finalStats>div{
  background:rgba(255,255,255,.86);
  border:1px solid #9db7c3;
}
.finalSummaryCard .finalStats b{
  color:#173f57;
  font-size:1.55rem;
}
.finalTakeaway{
  display:grid;
  grid-template-columns:auto 1fr;
  gap:11px;
  align-items:start;
  margin-top:14px;
  padding:12px 14px;
  background:#dbe9ed;
  border-left:6px solid #d2ad45;
  border-radius:8px;
  color:#234859;
  line-height:1.36;
}
.finalTakeaway strong{
  color:#15384b;
  white-space:nowrap;
}

/* Fix permanent label state after returning from regional maps. */
.evCanvas[data-map-view="main"] .label-spb{
  left:8.87%!important;
  top:16.84%!important;
}
.evCanvas[data-map-view="main"] .label-moscow{
  left:25.77%!important;
  top:35.80%!important;
}
.evCanvas[data-map-view="main"] .label-kyiv{
  left:9.38%!important;
  top:59.30%!important;
}


/* ===== v0.68 cleanup ===== */

/* Move the Urals label farther south so it does not compete with the Yekaterinburg marker/callout. */
.label-urals{
  left:74.6%!important;
  top:42%!important;
  transform:rotate(-18deg)!important;
}

/* Closing page: same visual grammar as the Strike Assessment Criteria slide,
   but statistics replace the icon rows and a separate photo fills the right side. */
.finalScene{
  padding:0!important;
  background:#071017!important;
}
.finalSplit{
  position:absolute;
  inset:0;
  display:grid;
  grid-template-columns:48% 52%;
  background:#071017;
}
.finalStatPanel{
  position:relative;
  z-index:2;
  margin:2.1%;
  margin-right:0;
  padding:2.5% 3.1%;
  border-radius:18px 0 0 18px;
  background:linear-gradient(155deg,#0f5369 0%,#0b3d52 52%,#082f40 100%);
  border:3px solid rgba(235,242,244,.9);
  border-right:0;
  color:#f4f3ec;
  box-shadow:0 18px 46px rgba(0,0,0,.35);
  overflow:hidden;
}
.finalKicker{
  font-size:1.08rem;
  font-weight:1000;
  letter-spacing:.12em;
  color:#f2c24e;
}
.finalStatPanel h2{
  margin:7px 0 14px;
  max-width:92%;
  color:#f8f5ec;
  font-size:2.35rem;
  line-height:1.00;
  letter-spacing:.01em;
}
.finalRule{
  height:2px;
  width:96%;
  margin:14px 0 10px;
  background:rgba(239,245,247,.76);
}
.finalStatRow{
  display:grid;
  grid-template-columns:104px 1fr;
  gap:18px;
  align-items:center;
  min-height:82px;
  border-bottom:1px solid rgba(239,245,247,.42);
}
.finalStatRow b{
  color:#f6c344;
  font-size:3.25rem;
  line-height:.9;
  letter-spacing:-.04em;
}
.finalStatRow span{
  font-size:1.08rem;
  line-height:1.18;
  font-weight:900;
  color:#f5f3ec;
}
.finalBottomNote{
  display:grid;
  gap:5px;
  margin-top:12px;
}
.finalBottomNote strong{
  color:#f5c448;
  font-size:.95rem;
  letter-spacing:.10em;
}
.finalBottomNote span{
  max-width:94%;
  font-size:.90rem;
  line-height:1.32;
  color:#d8e3e7;
  font-weight:700;
}

.finalPhotoPanel{
  position:relative;
  margin:2.1%;
  margin-left:0;
  overflow:hidden;
  border-radius:0 18px 18px 0;
  border:3px solid rgba(235,242,244,.9);
  border-left:0;
  background:#10171c;
  box-shadow:0 18px 46px rgba(0,0,0,.35);
}
.finalPhotoPanel img{
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center;
  filter:saturate(.80) contrast(1.15) brightness(.78);
}
.finalPhotoShade{
  position:absolute;
  inset:0;
  background:
    linear-gradient(90deg,rgba(4,10,14,.45),rgba(4,10,14,.08) 42%,rgba(4,10,14,.20)),
    linear-gradient(0deg,rgba(4,10,14,.55),transparent 38%);
}
.finalPhotoTag{
  position:absolute;
  top:4.5%;
  right:4%;
  min-width:49%;
  padding:10px 15px;
  border-radius:10px;
  background:rgba(7,12,16,.82);
  border:1px solid rgba(235,242,244,.72);
  box-shadow:0 6px 16px rgba(0,0,0,.28);
  color:#f7f4ea;
}
.finalPhotoTag span{
  display:block;
  color:#f3c34d;
  font-size:.73rem;
  font-weight:1000;
  letter-spacing:.12em;
}
.finalPhotoTag strong{
  display:block;
  margin-top:2px;
  font-size:1.02rem;
  letter-spacing:.03em;
}
.finalPhotoCaption{
  position:absolute;
  left:4%;
  right:4%;
  bottom:4%;
  padding:9px 12px;
  border-radius:8px;
  background:rgba(7,12,16,.76);
  color:#d8e1e5;
  font-size:.73rem;
  line-height:1.3;
  font-weight:700;
}


/* ===== v0.69 rapid campaign-readability pass ===== */
/* Make the current day unmistakable when the day-by-day sequence is running quickly. */
.evCanvas.mapMode .story .date{
  display:flex;
  justify-content:flex-end;
  align-items:flex-end;
  gap:10px;
  min-height:72px;
  margin-bottom:1px;
  line-height:.82;
  letter-spacing:0;
}
.evCanvas.mapMode .story .storyDay{
  display:inline-block;
  font-size:5.15rem;
  line-height:.78;
  font-weight:1000;
  letter-spacing:-.055em;
  color:#fff;
}
.evCanvas.mapMode .story .storyMonth{
  display:inline-block;
  padding-bottom:4px;
  font-size:1.22rem;
  line-height:1;
  font-weight:1000;
  letter-spacing:.14em;
  color:#fff;
}

/* The growing strike history is part of the story, not background decoration. */
.evCanvas.mapMode .marker.dim{
  opacity:.78!important;
  box-shadow:0 0 0 2px rgba(255,255,255,.82),0 2px 7px rgba(0,0,0,.42);
}
.evCanvas.mapMode .marker.dim.red{background:#d9564e!important}
.evCanvas.mapMode .marker.dim.yellow{background:#e0b74b!important}

/* Current strike labels stay on the right side of their flame whenever possible. */
.evCanvas.mapMode .marker.currentStrike .siteCallout.calloutRight{
  left:38px;
  right:auto;
}
.evCanvas.mapMode .marker.currentStrike .siteCallout.calloutRight::before{
  width:23px;
}

@media(max-width:1050px){
  .evCanvas.mapMode .story .storyDay{font-size:4.35rem}
  .evCanvas.mapMode .story .storyMonth{font-size:1rem}
}

/* ===== v0.71 VERIFICATION LAYOUT PROTOTYPE ===== */
.detail{
  width:min(74%,920px)!important;
  top:4%!important;
  bottom:4%!important;
  padding:18px 20px 16px!important;
  border-radius:16px!important;
  box-shadow:0 18px 50px rgba(16,25,32,.28)!important;
}
.sitePanelHead{
  grid-template-columns:minmax(0,1fr) auto!important;
  padding:0 36px 12px 0!important;
  border-bottom:1px solid #cfd1cc;
}
.dtype{
  font-size:.68rem!important;
  letter-spacing:.14em!important;
  font-weight:900!important;
  color:#315f82!important;
}
.detail h2{
  font-size:1.65rem!important;
  line-height:1.04!important;
  margin:.22rem 0 .18rem!important;
}
.coords{
  font-size:.83rem!important;
  color:#69757d!important;
}
.siteTabs{
  align-self:center!important;
}
.siteTab{
  padding:8px 12px!important;
  border-radius:8px!important;
  font-size:.72rem!important;
}
.siteView{margin-top:13px!important}
.validationTitle{
  margin:0 0 7px!important;
  font-size:.66rem!important;
  letter-spacing:.14em!important;
}
.validationSummary{
  display:grid!important;
  grid-template-columns:minmax(0,1fr) auto!important;
  gap:16px!important;
  padding:11px 13px!important;
  margin-bottom:11px!important;
  border:1px solid #d5d3ca!important;
  border-radius:10px!important;
  background:#eeebe2!important;
}
.verifyStatusBlock{display:flex;flex-direction:column;gap:1px}
.verifyKicker{font-size:.58rem;font-weight:900;letter-spacing:.13em;color:#73808a}
.verifyStatus{font-size:1.05rem!important;line-height:1.1;color:#234d69!important}
.verifyMeta{font-size:.68rem;color:#69757d}
.verifyScore{display:flex;align-items:center;gap:7px;padding-left:14px;border-left:1px solid #c9c7bf}
.verifyScore b{font-size:1.65rem!important;line-height:1;color:#315f82!important}
.verifyScore span{font-size:.62rem;line-height:1.15;color:#6d777d;text-transform:uppercase;font-weight:800;letter-spacing:.04em}
.validationChecklist{
  display:grid!important;
  grid-template-columns:repeat(2,minmax(0,1fr))!important;
  gap:9px 10px!important;
  align-items:start;
}
.checkCard{
  border:1px solid #d3d2cc;
  border-radius:10px;
  overflow:hidden;
  background:#f7f4ec;
}
.checkGroup{
  margin:0!important;
  padding:7px 9px!important;
  background:#315f82!important;
  color:#fff!important;
  font-size:.61rem!important;
  letter-spacing:.11em!important;
}
.checkRows{display:grid}
.checkRow{
  display:grid!important;
  grid-template-columns:20px minmax(0,1fr) minmax(72px,34%)!important;
  gap:6px!important;
  align-items:center!important;
  min-height:28px;
  padding:4px 7px!important;
  border-radius:0!important;
  border-top:1px solid #dedbd2;
  background:#f7f4ec!important;
  font-size:.68rem!important;
}
.checkRows .checkRow:first-child{border-top:0}
.checkState{
  width:17px!important;
  height:17px!important;
  border-radius:50%!important;
  font-size:.65rem!important;
}
.checkLabel{line-height:1.08;font-weight:700;color:#34434e}
.checkNote{
  max-width:none!important;
  font-size:.57rem!important;
  line-height:1.08!important;
  text-align:right!important;
  color:#7a8388!important;
}
.validationFoot{
  margin-top:9px!important;
  padding-top:7px;
  border-top:1px solid #d3d0c8;
  font-size:.59rem!important;
  justify-content:center;
}
.dataSwitch{
  width:auto!important;
  min-width:190px;
  float:right;
  margin-top:9px!important;
  padding:7px 11px!important;
  font-size:.72rem;
}
@media(max-width:980px){
  .detail{width:82%!important}
  .validationChecklist{grid-template-columns:1fr!important}
}


/* ===== v1.01 holistic beta ===== */
.date.datePulse{
  animation:wbDatePulse 560ms ease-out;
  transform-origin:left center;
}
@keyframes wbDatePulse{
  0%{transform:scale(1);filter:brightness(1)}
  30%{transform:scale(1.13);filter:brightness(1.4)}
  100%{transform:scale(1);filter:brightness(1)}
}
.futureLegendBadge{
  position:absolute;
  left:5%;
  bottom:4%;
  z-index:4;
  display:flex;
  align-items:center;
  gap:8px;
  padding:8px 12px;
  border-radius:999px;
  background:rgba(8,24,30,.88);
  border:1px solid rgba(71,219,206,.75);
  color:#dffdfa;
  font-size:.78rem;
  letter-spacing:.04em;
  box-shadow:0 8px 24px rgba(0,0,0,.35);
}
.futureLegendBadge i{
  width:14px;height:14px;border-radius:50%;
  border:3px solid #25b9b1;background:transparent;
}
.tableBackBtn{
  display:block;
  margin:8px 0 0 auto;
  padding:7px 11px;
  border-radius:7px;
  border:1px solid rgba(255,255,255,.22);
  background:#24344a;
  color:#fff;
  font-weight:800;
  cursor:pointer;
}
.tableBackBtn:hover{background:#345071}

/* R258 — smartphone Map Navigator: same campaign map + live site data, optimized for touch. */
.mobileViewer{display:none}
@media(max-width:700px){
  #app,.launchScreen{display:none!important}
  .mobileViewer{
    min-height:100vh;display:flex;align-items:flex-start;justify-content:center;
    padding:10px;background:#0b1220;color:#eef5ff;
  }
  .mobileCard{
    width:100%;max-width:560px;background:#111c2e;border:1px solid #31445e;
    border-radius:12px;overflow:hidden;box-shadow:0 14px 50px rgba(0,0,0,.35);
  }
  .mobileKicker{padding:12px 13px 0;font-size:.68rem;font-weight:900;letter-spacing:.12em;color:#adbed1}
  .mobileTitleRow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:3px 13px 8px}
  .mobileTitleRow h1{font-size:1.28rem;margin:0;line-height:1.15}
  .mobileTitleRow a{font-size:.76rem;color:#dceaff;text-decoration:none;border:1px solid #48617f;border-radius:8px;padding:6px 8px;background:#1a2940;white-space:nowrap}
  .mobileMapWrap{position:relative;width:100%;background:#182436;overflow:hidden;touch-action:manipulation}
  .mobileMapWrap>img{display:block;width:100%;height:auto}
  .mobileMarkers{position:absolute;inset:0;pointer-events:none}
  .mobileMarker{position:absolute;width:13px;height:13px;margin:-6.5px 0 0 -6.5px;border-radius:50%;border:2px solid rgba(255,255,255,.92);box-shadow:0 1px 4px rgba(0,0,0,.7);pointer-events:auto;cursor:pointer;padding:0}
  .mobileMarker.red{background:#c93636}.mobileMarker.yellow{background:#e5b832}.mobileMarker.context{background:#8b98a8}
  .mobileMarker.strategicUnhit{background:#4a90e2}
  .mobileMarker:focus-visible{outline:3px solid #fff;outline-offset:2px}
  .mobileSnapshot{position:absolute;z-index:20;left:8px;right:8px;bottom:8px;background:rgba(247,244,235,.97);color:#1c2c3d;border:1px solid rgba(31,57,82,.35);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.4);padding:10px 11px}
  .mobileSnapshot.hidden{display:none}
  .mobileSnapHead{display:grid;grid-template-columns:auto 1fr;column-gap:7px;align-items:start;border-bottom:1px solid #ccd4db;padding-bottom:7px;margin-bottom:7px}
  .mobileSnapStatus{width:11px;height:11px;border-radius:50%;margin-top:4px;background:#8b98a8}.mobileSnapStatus.red{background:#c93636}.mobileSnapStatus.yellow{background:#e5b832}.mobileSnapStatus.blue{background:#4a90e2}
  .mobileSnapName{font-size:1rem;font-weight:800;line-height:1.1}.mobileSnapMeta{font-size:.68rem;color:#5e6c79;margin-top:2px;line-height:1.25}
  .mobileSnapGrid{display:grid;grid-template-columns:1fr 1fr;border:1px solid #c4ccd4;border-radius:7px;overflow:hidden}
  .mobileSnapCell{padding:6px 7px;min-height:43px}.mobileSnapCell:nth-child(odd){border-right:1px solid #c4ccd4}.mobileSnapCell:nth-child(-n+2){border-bottom:1px solid #c4ccd4}
  .mobileSnapLabel{font-size:.6rem;letter-spacing:.07em;text-transform:uppercase;color:#6f7a84;font-weight:800}.mobileSnapValue{font-size:.88rem;font-weight:800;margin-top:1px}
  .mobileKey{display:flex;flex-wrap:wrap;gap:6px 12px;padding:9px 13px 2px;font-size:.68rem;color:#d7e1ec}
  .mobileKey span{display:flex;align-items:center;gap:5px}.mobileBlueDot{background:#4a90e2!important}.mobileGrayDot{background:#8b98a8!important}
  .mobileHint{padding:4px 13px 12px;margin:0;color:#adbed1;font-size:.72rem;line-height:1.35}
}

/* v1.05 full-demo integration */
.boundDemoWrap{
  position:absolute; inset:0; background:#0d1523; z-index:45;
  display:flex; flex-direction:column;
}
.boundDemoTop{
  height:72px; flex:0 0 72px; display:flex; align-items:center; justify-content:space-between;
  padding:10px 18px; background:#101b2c; color:#fff; border-bottom:1px solid rgba(255,255,255,.13);
}
.boundDemoTop span{font-size:11px;letter-spacing:.18em;color:#d8b85e;font-weight:800}
.boundDemoTop h2{font-size:21px;margin:3px 0 0}
.boundDataFrame{width:100%;height:calc(100% - 72px);border:0;background:#f4f0e5}

/* v1.07 navigation + audio diagnostic */
.mapDataViewsBtn{
  position:absolute; right:24px; bottom:24px; z-index:55;
  border:1px solid rgba(255,255,255,.4); background:rgba(10,18,29,.90);
  color:#fff; padding:12px 16px; border-radius:10px;
  font-size:14px; font-weight:900; letter-spacing:.04em; cursor:pointer;
  box-shadow:0 8px 24px rgba(0,0,0,.28);
}
.mapDataViewsBtn:hover{transform:translateY(-1px)}
.audioDiag{
  position:fixed; right:12px; top:12px; z-index:999;
  display:flex; align-items:center; gap:8px;
  background:rgba(11,17,27,.88); color:#fff;
  padding:7px 9px; border-radius:9px; font-size:11px;
  border:1px solid rgba(255,255,255,.16);
}
.audioDiag button{
  border:1px solid rgba(255,255,255,.28); background:#15263d; color:#fff;
  border-radius:7px; padding:6px 9px; font-weight:800; cursor:pointer;
}

/* v1.08 clean presentation demo */
.devbar,.transport,body>footer,.app>footer{display:none!important}
.app{padding-top:0!important}
.evCanvas{margin:0 auto}
.audioDiag{display:none!important}


/* v1.13 review rebuild: recovered current operational screens + graph */
.siteDataOverlay{position:absolute;inset:0;z-index:55;background:#111;overflow:hidden}
.siteDataOverlay.hidden{display:none}
.siteDataFrame{width:100%;height:100%;border:0;background:#111;display:block}
.siteDataClose{position:absolute;right:14px;top:10px;z-index:60;width:42px;height:42px;border-radius:50%;border:1px solid rgba(255,255,255,.6);background:rgba(0,0,0,.65);color:#fff;font-size:28px;font-weight:700;line-height:36px;cursor:pointer}
.graphScene{position:absolute;inset:0;z-index:21;background:#000;overflow:hidden}
.graphScene.hidden{display:none}
.graphFrame{width:100%;height:100%;border:0;background:#000;display:block}

/* R202: explicit handoff from final Map Navigator to Table/Data Views Navigator */
.mapToDataBtn{
  text-decoration:none;
  position:absolute;
  right:18px;
  bottom:170px;
  z-index:34;
  padding:12px 18px;
  border-radius:10px;
  border:1px solid rgba(255,255,255,.70);
  background:rgba(12,28,48,.88);
  color:#fff;
  font-size:clamp(14px,1.05vw,20px);
  font-weight:800;
  letter-spacing:.2px;
  box-shadow:0 4px 14px rgba(0,0,0,.32);
  cursor:pointer;
}
.mapToDataBtn:hover{background:rgba(36,72,108,.96);}
.mapToDataBtn.hidden{display:none!important;}


/* R203: keep map-to-data control clear of the legend on smaller screens. */
@media (max-width:800px){
  .mapToDataBtn{right:12px;bottom:190px;}
}

/* R212 recovery — four-way launch hub.
   Audio behavior remains unchanged; this pass only adds entry navigation. */
.launchScreen.launchHub{
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:18px;
  padding:36px;
  text-align:center;
}
.launchHub .launchTitle{
  font-size:clamp(28px,3vw,48px);
  font-weight:950;
  letter-spacing:-.025em;
  margin:0;
}
.launchHub .launchSub{
  font-size:clamp(14px,1.25vw,20px);
  opacity:.82;
  margin-top:-8px;
}
.launchChoices{
  width:min(860px,90vw);
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:16px;
  margin-top:6px;
}
.launchChoice{
  min-height:100px;
  display:flex;
  align-items:center;
  gap:16px;
  padding:18px 20px;
  border:2px solid rgba(255,255,255,.78);
  border-radius:14px;
  background:rgba(18,39,58,.9);
  color:#fff;
  text-decoration:none;
  text-align:left;
  cursor:pointer;
  box-shadow:0 6px 18px rgba(0,0,0,.28);
}
button.launchChoice{
  font:inherit;
  width:100%;
}
.launchChoice:hover{
  transform:translateY(-1px);
  background:rgba(26,57,82,.96);
}
.launchChoicePrimary{
  background:rgba(116,38,126,.96);
}
.launchChoicePrimary:hover{
  background:rgba(142,49,154,.98);
}
.launchChoiceIcon{
  width:46px;
  min-width:46px;
  height:46px;
  display:grid;
  place-items:center;
  border-radius:50%;
  border:2px solid rgba(255,255,255,.75);
  font-size:24px;
  font-weight:900;
}
.launchChoice b{
  display:block;
  font-size:clamp(15px,1.25vw,21px);
  letter-spacing:.03em;
}
.launchChoice small{
  display:block;
  margin-top:4px;
  font-size:clamp(11px,.9vw,14px);
  opacity:.76;
}
.launchAudioNote{
  margin-top:2px;
  font-size:13px;
  opacity:.75;
}
@media(max-width:760px){
  .launchChoices{grid-template-columns:1fr;width:min(520px,92vw)}
  .launchChoice{min-height:82px}
}

/* R213 recovery — five-icon launch hub */
.launchChoices.launchChoicesFive{
  grid-template-columns:1fr 1fr;
}
.launchChoicesFive .launchChoiceExit{
  grid-column:1 / -1;
  justify-self:center;
  width:min(410px,100%);
  opacity:.8;
  cursor:default;
}
.launchChoicesFive .launchChoiceExit:hover{
  transform:none;
  background:rgba(18,39,58,.9);
}
.launchChoicesFive .launchChoiceIcon{
  font-family:Arial,"Noto Color Emoji","Segoe UI Emoji",sans-serif;
}
@media(max-width:760px){
  .launchChoices.launchChoicesFive{grid-template-columns:1fr}
  .launchChoicesFive .launchChoiceExit{
    grid-column:auto;
    justify-self:stretch;
    width:100%;
  }
}

/* R214 recovery — six-way launch hub */
.launchChoices.launchChoicesSix{
  width:min(980px,92vw);
  grid-template-columns:repeat(3,1fr);
  gap:16px;
}
.launchChoicesSix .launchChoice{
  min-height:112px;
}
.launchChoicesSix .launchChoiceDaily{
  background:rgba(45,76,98,.96);
}
.launchChoicesSix .launchChoiceDaily:hover{
  background:rgba(58,94,120,.98);
}
.launchChoicesSix .launchChoiceExit{
  grid-column:auto;
  justify-self:stretch;
  width:100%;
  opacity:.78;
  cursor:default;
}
.launchChoicesSix .launchChoiceExit:hover{
  transform:none;
  background:rgba(18,39,58,.9);
}
@media(max-width:900px){
  .launchChoices.launchChoicesSix{
    grid-template-columns:repeat(2,1fr);
    width:min(760px,92vw);
  }
}
@media(max-width:600px){
  .launchChoices.launchChoicesSix{
    grid-template-columns:1fr;
    width:min(520px,92vw);
  }
  .launchChoicesSix .launchChoice{min-height:82px}
}

/* R217 canonical Map Navigator navigation */
.mapPageNav{
  position:absolute;
  right:18px;
  bottom:170px;
  z-index:40;
  display:flex;
  gap:10px;
}
.mapPageNavBtn{
  min-width:88px;
  height:40px;
  padding:0 16px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  border:2px solid #fff;
  border-radius:9px;
  background:#17384b;
  color:#fff;
  text-decoration:none;
  font-size:14px;
  font-weight:950;
  letter-spacing:.06em;
  box-shadow:0 3px 10px rgba(0,0,0,.28);
}
.mapPageNavBtn.start{background:#2a4b39}
.mapPageNavBtn:hover{background:#24526d}
.mapPageNavBtn.start:hover{background:#356047}


/* ===== R248 St. Petersburg cluster label roster =====
   Invisible 4-row alignment area below St. Petersburg. The roster uses the
   same display size/weight as ordinary active site names; only its names
   appear, progressively, as the existing campaign dates reveal those sites. */
.spbSiteRoster{
  position:absolute;
  z-index:12;
  left:6.2%;
  top:24.2%;
  width:190px;
  display:grid;
  grid-template-rows:repeat(4,28px);
  align-items:center;
  pointer-events:none;
  opacity:0;
  visibility:hidden;
}
.spbSiteRoster.active{
  opacity:1;
  visibility:visible;
}
.spbRosterName{
  display:block;
  font-size:.92rem;
  line-height:1.05;
  font-weight:1000;
  letter-spacing:.01em;
  color:#12344a;
  white-space:nowrap;
  opacity:0;
  transform:translateY(2px);
  text-shadow:0 1px 2px rgba(255,255,255,.98),0 0 5px rgba(255,255,255,.92);
  transition:opacity .26s ease,transform .26s ease;
}
.spbRosterName.revealed{
  opacity:1;
  transform:translateY(0);
}
.spbRosterSpare{visibility:hidden!important}
@media(max-width:1050px){
  .spbSiteRoster{left:6%;top:24%;width:170px;grid-template-rows:repeat(4,25px)}
  .spbRosterName{font-size:.84rem}
}


/* ===== R249 Explore map cleanup =====
   Keep one concise instruction block high on the map; suppress legacy lower-left chrome. */
.evCanvas.exploreFrame .story{
  top:1.25%;
}
.evCanvas.exploreFrame .floatingNav{
  display:none!important;
}
.evCanvas.exploreFrame .exploreBadge{
  display:none!important;
}

/* ===== R250 Explore contrast + interaction-hint placement =====
   Separate the upper Explore message from the lower interaction hint.
   Keep the Map Key lower-right clear and avoid a harsh black badge. */
.evCanvas.exploreFrame .story{
  top:1.4%!important;
  right:3.2%!important;
  width:min(49%,620px)!important;
  padding:11px 15px!important;
  border-radius:10px!important;
  background:rgba(31,68,88,.82)!important;
  border:1px solid rgba(229,242,247,.72)!important;
  box-shadow:0 4px 14px rgba(20,42,53,.22)!important;
  text-shadow:0 1px 2px rgba(0,0,0,.6)!important;
}
.evCanvas.exploreFrame .story .date{
  color:#dcecf2!important;
}
.evCanvas.exploreFrame .story h1,
.evCanvas.exploreFrame .story p{
  color:#fff!important;
}
.evCanvas.exploreFrame .story h1{
  font-size:1.9rem!important;
  letter-spacing:.01em;
}
.evCanvas.exploreFrame .exploreBadge{
  display:block!important;
  position:absolute!important;
  left:22px!important;
  right:auto!important;
  bottom:20px!important;
  top:auto!important;
  z-index:24!important;
  padding:8px 12px!important;
  border-radius:9px!important;
  background:rgba(244,248,248,.88)!important;
  color:#17384b!important;
  border:1px solid rgba(117,158,178,.85)!important;
  box-shadow:0 3px 10px rgba(18,40,53,.16)!important;
  font-size:.78rem!important;
  font-weight:900!important;
  letter-spacing:.055em!important;
  text-shadow:none!important;
}


/* ===== R251 Explore + calendar readability polish =====
   Keep Explore text unboxed, restore breathing room from the top edge,
   move the click hint inward, and increase calendar contrast/readability. */
.evCanvas.exploreFrame .story{
  top:3.4%!important;
  right:3.2%!important;
  width:min(49%,620px)!important;
  padding:0!important;
  border-radius:0!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  text-shadow:none!important;
}
.evCanvas.exploreFrame .story .date{
  color:#17384b!important;
  font-weight:1000!important;
  letter-spacing:.12em!important;
  text-shadow:0 1px 2px rgba(255,255,255,.95),0 0 5px rgba(255,255,255,.95)!important;
}
.evCanvas.exploreFrame .story h1{
  color:#12384d!important;
  font-size:1.95rem!important;
  font-weight:1000!important;
  letter-spacing:.01em!important;
  text-shadow:0 1px 2px rgba(255,255,255,.98),0 0 7px rgba(255,255,255,.96)!important;
}
.evCanvas.exploreFrame .story p{
  color:#183e52!important;
  font-weight:800!important;
  text-shadow:0 1px 2px rgba(255,255,255,.98),0 0 5px rgba(255,255,255,.96)!important;
}
.evCanvas.exploreFrame .exploreBadge{
  left:118px!important;
  bottom:20px!important;
  padding:0!important;
  border-radius:0!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  color:#17384b!important;
  font-size:.82rem!important;
  font-weight:1000!important;
  letter-spacing:.055em!important;
  text-shadow:0 1px 2px rgba(255,255,255,.98),0 0 5px rgba(255,255,255,.95)!important;
}

/* Calendar: distinct cool panel, bright month cards, bold dates, stronger state separation. */
.calendar{
  background:#dce8ec!important;
  color:#17384b!important;
  border:2px solid #527f96!important;
  box-shadow:inset 5px 0 0 #c49a36,0 4px 14px rgba(21,47,62,.16)!important;
}
.calHead{
  padding:4px 5px 8px 9px!important;
  border-bottom:2px solid #527f96!important;
  align-items:flex-start!important;
  gap:8px!important;
}
.calHead strong{
  color:#12384d!important;
  font-weight:1000!important;
}
.calHead small{
  color:#425f6d!important;
  font-weight:800!important;
}
.calHeadActions{
  display:flex;
  align-items:center;
  gap:7px;
}
.calendarBackToMap{
  border:1px solid #315f76;
  border-radius:6px;
  background:#315f76;
  color:#fff;
  padding:4px 7px;
  font-size:.68rem;
  font-weight:1000;
  letter-spacing:.045em;
}
.calendarBackToMap:hover{background:#244b60}
.month{
  background:#f8fbfc!important;
  border:1px solid #789caf!important;
  box-shadow:inset 4px 0 0 rgba(196,154,54,.72)!important;
}
.monthName{
  color:#17384b!important;
  font-size:.88rem!important;
  font-weight:1000!important;
}
.week span{
  color:#4a6675!important;
  font-weight:900!important;
}
.day{
  background:#edf3f5!important;
  color:#17384b!important;
  border:1px solid #b4c8d1!important;
  font-size:.82rem!important;
  font-weight:900!important;
}
.day:hover:not(.blank){
  background:#d7e6ec!important;
  border-color:#638ca0!important;
}
.day.strike{
  background:#e7cf84!important;
  color:#493b12!important;
  border-color:#bd9839!important;
  font-weight:1000!important;
}
.day.past{
  background:#66889a!important;
  color:#fff!important;
  border-color:#3d687e!important;
  box-shadow:inset 0 0 0 2px #345d72!important;
  font-weight:1000!important;
}
.day.active{
  background:#f2c94f!important;
  color:#17212a!important;
  border-color:#9f7a17!important;
  box-shadow:0 0 0 3px rgba(242,201,79,.42),0 0 15px rgba(242,201,79,.5)!important;
  font-weight:1000!important;
}
.calendar .legend{
  color:#355566!important;
  font-weight:800!important;
}
.calendar .progress>div:first-child{color:#355566!important;font-weight:800!important}
.calendar .track{background:#b7cbd4!important}


/* ===== R253 Daily map frames are playback-only =====
   Daily calendar frames are animation states, not navigation destinations.
   Hide map navigation chrome and disable interactive targets on those frames. */
.evCanvas.dailyPlaybackFrame .floatingNav,
.evCanvas.dailyPlaybackFrame .mapPageNav,
.evCanvas.dailyPlaybackFrame .calendarBackToMap{
  display:none!important;
}
.evCanvas.dailyPlaybackFrame .marker,
.evCanvas.dailyPlaybackFrame .calendar .day{
  pointer-events:none!important;
  cursor:default!important;
}
/* R254: Explore calendar is hover-only. No date links leave the master map.
   Only strike dates are interactive; hovering temporarily restores the proper
   flame icon(s) on every site associated with that date. */
.evCanvas.exploreFrame .calendar .day{
  pointer-events:none!important;
  cursor:default!important;
}
.evCanvas.exploreFrame .calendar .day.strike{
  pointer-events:auto!important;
  cursor:crosshair!important;
}
.evCanvas.exploreFrame .marker.hoverDateStrike svg{
  filter:drop-shadow(0 0 5px rgba(255,217,106,.9)) drop-shadow(0 2px 2px rgba(0,0,0,.45));
}


/* ===== R256 Map Snapshot hover card =====
   Shared compact Snapshot, positioned dynamically to stay inside the map and
   cover as few other site markers as practical. */
.mapSnapshot{
  position:absolute;
  z-index:23;
  width:330px;
  padding:12px 12px 13px;
  display:none;
  pointer-events:none;
  box-sizing:border-box;
  font-family:Arial,Helvetica,sans-serif;
  background:rgba(250,251,250,.985);
  color:#0f2740;
  border:1px solid #c7d1d8;
  border-radius:11px;
  box-shadow:0 9px 24px rgba(12,29,42,.24);
  overflow:hidden;
}
.mapSnapshot.open,.mapSnapshot.measuring{display:block}
.mapSnapshot.measuring{visibility:hidden}
.mapSnapshot .snapshot-kicker{margin:0 0 7px;font-size:10px;line-height:1;font-weight:800;letter-spacing:.12em;color:#5b6c79}
.mapSnapshot .snapshot-head{display:grid;grid-template-columns:16px minmax(0,1fr);gap:8px;align-items:start;padding:0 2px 9px}
.mapSnapshot .snapshot-status-dot{width:13px;height:13px;border-radius:50%;margin-top:3px;box-shadow:0 0 0 2px rgba(15,39,64,.08)}
.mapSnapshot .snapshot-status-dot.red{background:#d92f2f}.mapSnapshot .snapshot-status-dot.amber{background:#f2ad24}.mapSnapshot .snapshot-status-dot.teal{background:#238b82}.mapSnapshot .snapshot-status-dot.gray{background:#8b98a3}
.mapSnapshot .snapshot-pop-title{font-size:18px;line-height:1.08;font-weight:800;color:#0f2740}
.mapSnapshot .snapshot-subline{margin-top:3px;font-size:12px;line-height:1.15;font-weight:500;color:#596b79}
.mapSnapshot .snapshot-matrix{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:#d7dfe4;border:1px solid #d7dfe4;border-radius:8px;overflow:hidden}
.mapSnapshot .snapshot-cell{min-height:62px;padding:8px 7px;background:#f5f7f8;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center}
.mapSnapshot .snapshot-cell small{display:block;margin:0 0 5px;font-size:10px;line-height:1.05;font-weight:800;letter-spacing:.035em;color:#5c6c78}
.mapSnapshot .snapshot-cell b{display:block;margin:0;font-size:14px;line-height:1.08;font-weight:800;color:#0f2740}
.evCanvas.dailyPlaybackFrame .mapSnapshot{display:none!important}

.evCanvas.exploreFrame .spbSiteRoster{pointer-events:auto}
.evCanvas.exploreFrame .spbRosterName.revealed{pointer-events:auto}


/* ===== R257 publication polish: Map Navigator study period + clean explore label ===== */
.evCanvas.exploreFrame .story{top:2.35%!important;}
.evCanvas.exploreFrame .exploreBadge{display:none!important;}
.mapStudyPeriod{display:none;}
.evCanvas.exploreFrame .mapStudyPeriod{display:block;margin-top:8px;color:#17384b;font-size:.78rem;font-weight:900;line-height:1.25;text-shadow:0 1px 2px rgba(255,255,255,.98),0 0 5px rgba(255,255,255,.95);}
.evCanvas.exploreFrame .mapStudyPeriod small{display:block;margin-top:2px;font-size:.68rem;font-weight:700;letter-spacing:0;}

/* ===== R268 generated-map cleanup =====
   Generated map already carries St. Petersburg and Moscow names.
   Keep Kyiv as the only major-city overlay label.
   Move Explore copy higher/right for better separation from map content. */
.evCanvas.exploreFrame .story{
  top:.55%!important;
  right:2.0%!important;
  width:min(44%,560px)!important;
}
.evCanvas.exploreFrame .story h1{
  margin-top:.12rem!important;
}
.evCanvas.exploreFrame .mapStudyPeriod{
  margin-top:5px!important;
}

/* ===== R269 overlay cleanup for generated wider map ===== */

/* Kyiv: baked map does not carry the useful label, so keep overlay and place it directly. */
.evCanvas.exploreFrame .label-kyiv{
  left:8.7%!important;
  top:61.0%!important;
  transform:none!important;
}

/* St. Petersburg site labels: intentionally use the open space west/left of StP. */
.evCanvas.exploreFrame .label-shushary{
  left:6.2%!important;
  top:23.5%!important;
  transform:none!important;
}
.evCanvas.exploreFrame .label-utkina{
  left:6.0%!important;
  top:27.0%!important;
  transform:none!important;
}
.evCanvas.exploreFrame .label-krasny{
  left:6.0%!important;
  top:30.4%!important;
  transform:none!important;
}

/* Explore legend/story: genuinely high in the upper-right corner. */
.evCanvas.exploreFrame .story{
  top:0.1%!important;
  right:1.4%!important;
  width:min(43%,550px)!important;
  transform:none!important;
}
.evCanvas.exploreFrame .story h1{
  margin-top:0!important;
  margin-bottom:.18rem!important;
}
.evCanvas.exploreFrame .story .eyebrow{
  margin-top:0!important;
}
.evCanvas.exploreFrame .mapStudyPeriod{
  margin-top:3px!important;
}

/* Generated map already labels the Urals, so suppress any residual overlay. */
.evCanvas.exploreFrame .label-urals{
  display:none!important;
}

/* ===== R270 St. Petersburg label placement =====
   Keep map/dots/calibration unchanged. Move only the three StP site labels
   closer to the St. Petersburg marker while retaining left-side placement. */
.evCanvas.exploreFrame .label-shushary{
  left:17.8%!important;
  top:24.0%!important;
  transform:none!important;
}
.evCanvas.exploreFrame .label-utkina{
  left:17.6%!important;
  top:27.4%!important;
  transform:none!important;
}
.evCanvas.exploreFrame .label-krasny{
  left:17.7%!important;
  top:30.8%!important;
  transform:none!important;
}

/* ===== R271 root-cause overlay corrections ===== */

/* Kyiv: DO NOT manually force left/top.
   The recalibrated JS transform correctly places Kyiv at ~29.4%, 62.4%.
   Override the prior R269 manual CSS by reverting these properties to the
   inline values written by positionMainLabels(). */
.evCanvas.exploreFrame .label-kyiv{
  left:revert!important;
  top:revert!important;
  transform:none!important;
}

/* The St. Petersburg names are a separate roster container, not mapLabel elements.
   Move the actual roster east, into the open space immediately left of StP. */
.evCanvas.exploreFrame .spbSiteRoster{
  left:17.4%!important;
  top:24.0%!important;
  width:178px!important;
}

/* Move the full Explore copy visibly upward using pixels, not another tiny percentage. */
.evCanvas.exploreFrame .story{
  top:0!important;
  right:1.4%!important;
  transform:translateY(-48px)!important;
  width:min(43%,550px)!important;
}

/* R272 — smartphone presentation track.
   Phone is a linear 16:9 viewer: no hub, navigation, table controls, or map interaction. */
.mobileRotateNote{display:none}
@media(max-width:700px){
  html,body{margin:0;width:100%;min-height:100%;background:#05080c;overflow-x:hidden}
  .mobileViewer{display:none!important}
  .launchScreen{display:none!important}
  #app{
    display:flex!important;width:100%;min-height:100vh;padding:0!important;
    justify-content:center;align-items:center;background:#05080c;
  }
  .devbar,.transport,.settingsPanel,footer,.floatingNav,.mapPageNav,.mapDataViewsBtn,
  #openDataViewsFromMap,.exploreBadge{display:none!important}
  .evCanvas{
    /* R275: fit the complete 16:9 presentation inside the phone viewport.
       Scale by whichever limit is tighter (width or height), preserve aspect ratio,
       center it, and allow unused black space rather than cropping. */
    width:min(100vw, calc(100vh * 16 / 9))!important;
    max-width:none!important;
    min-width:0!important;
    aspect-ratio:16/9;
    flex:0 0 auto;
    border:0!important;border-radius:0!important;padding:4px!important;gap:4px!important;
  }
  .marker{pointer-events:none!important}
  .day{pointer-events:none!important}
  .mapSnapshot,.detail,#siteDataOverlay{display:none!important}
  .mapLegendBox .legendHow{display:none!important}
}
@media(max-width:700px) and (orientation:portrait){
  #app::before{
    content:'Turn phone sideways for the presentation';
    position:absolute;z-index:9999;left:16px;right:16px;top:18px;
    padding:10px 12px;border-radius:10px;background:rgba(7,12,19,.9);
    color:#fff;text-align:center;font:700 14px/1.25 Arial,sans-serif;
    pointer-events:none;
  }
}

/* R273 — text-led intro. Narration is no longer required for pacing. */
.introTextSequence{
  position:absolute;z-index:8;left:50%;right:4.5%;bottom:8%;
  min-height:150px;pointer-events:none;
}
.introTextStep{
  position:absolute;left:0;right:0;bottom:0;
  padding:18px 22px;border:1px solid rgba(255,255,255,.42);border-radius:14px;
  background:rgba(10,14,20,.86);color:#fff;
  font:700 clamp(18px,2.0vw,34px)/1.25 Arial,sans-serif;
  text-shadow:0 2px 5px rgba(0,0,0,.55);
  box-shadow:0 8px 26px rgba(0,0,0,.28);
  opacity:0;transform:translateY(12px);
}
.introTextSequence.run .introTextStep{animation:introTextShow 1s both}
.dreamTextSequence.run .step1{animation-duration:5.1s}
.dreamTextSequence.run .step2{animation-delay:4.8s;animation-duration:6.0s}
.realityTextSequence.run .step1{animation-duration:5.6s}
.realityTextSequence.run .step2{animation-delay:5.3s;animation-duration:3.8s}
.realityTextSequence.run .step3{animation-delay:8.8s;animation-duration:5.1s}
.introPunch{
  font-size:clamp(22px,2.45vw,42px);font-weight:900;line-height:1.15;
  border-width:2px;text-align:center;
}
.introPunch strong{font-size:1.18em;letter-spacing:.035em}
.introPunch small{
  display:block;margin-top:12px;padding-top:9px;border-top:1px solid rgba(255,255,255,.25);
  font-size:clamp(11px,.9vw,15px);font-weight:600;line-height:1.25;color:#e7e7e7;text-align:left;
}
@keyframes introTextShow{
  0%{opacity:0;transform:translateY(12px)}
  12%,82%{opacity:1;transform:translateY(0)}
  100%{opacity:0;transform:translateY(-6px)}
}

/* The original Reality artwork contains a soft baked-in footnote at lower left.
   The new readable footnote is carried inside the final text card. */
.realityTextSequence{bottom:7%}

/* Phone uses the same wording, but a tighter reading pace and larger relative type. */
@media (pointer:coarse) and (max-width:1000px), (max-width:700px){
  .introTextSequence{left:45%;right:3%;bottom:5%;min-height:125px}
  .introTextStep{padding:12px 14px;border-radius:10px;font-size:clamp(15px,3.3vw,25px);line-height:1.2}
  .introPunch{font-size:clamp(18px,4.0vw,30px)}
  .introPunch small{font-size:clamp(9px,2.0vw,12px);margin-top:7px;padding-top:6px}
  .dreamTextSequence.run .step1{animation-duration:4.3s}
  .dreamTextSequence.run .step2{animation-delay:4.0s;animation-duration:5.0s}
  .realityTextSequence.run .step1{animation-duration:4.8s}
  .realityTextSequence.run .step2{animation-delay:4.5s;animation-duration:3.2s}
  .realityTextSequence.run .step3{animation-delay:7.4s;animation-duration:4.5s}
}


/* R276 — persistent smartphone track across orientation changes.
   JS adds html.mobileTrack when the page initially qualifies as mobile.
   Rotation changes geometry only; it must not switch back to desktop CSS. */
html.mobileTrack,
html.mobileTrack body{
  margin:0!important;
  width:100%!important;
  min-height:100%!important;
  background:#05080c!important;
  overflow-x:hidden!important;
}
html.mobileTrack .mobileViewer,
html.mobileTrack .launchScreen{
  display:none!important;
}
html.mobileTrack #app{
  display:flex!important;
  width:100%!important;
  min-height:100vh!important;
  padding:0!important;
  justify-content:center!important;
  align-items:center!important;
  background:#05080c!important;
}
html.mobileTrack .devbar,
html.mobileTrack .transport,
html.mobileTrack .settingsPanel,
html.mobileTrack footer,
html.mobileTrack .floatingNav,
html.mobileTrack .mapPageNav,
html.mobileTrack .mapDataViewsBtn,
html.mobileTrack #openDataViewsFromMap,
html.mobileTrack .exploreBadge{
  display:none!important;
}
html.mobileTrack .evCanvas{
  width:min(100vw, calc(100vh * 16 / 9))!important;
  max-width:none!important;
  min-width:0!important;
  aspect-ratio:16/9!important;
  flex:0 0 auto!important;
  border:0!important;
  border-radius:0!important;
  padding:4px!important;
  gap:4px!important;
}
html.mobileTrack .marker,
html.mobileTrack .day{
  pointer-events:none!important;
}
html.mobileTrack .mapSnapshot,
html.mobileTrack .detail,
html.mobileTrack #siteDataOverlay{
  display:none!important;
}
html.mobileTrack .mapLegendBox .legendHow{
  display:none!important;
}
@media (orientation:portrait){
  html.mobileTrack #app::before{
    content:'Turn phone sideways for the presentation';
    position:absolute;z-index:9999;left:16px;right:16px;top:18px;
    padding:10px 12px;border-radius:10px;background:rgba(7,12,19,.9);
    color:#fff;text-align:center;font:700 14px/1.25 Arial,sans-serif;
    pointer-events:none;
  }
}


/* R279 — fixed 1600x900 smartphone playback stage.
   Do not reflow internal desktop geometry. Scale the complete stage uniformly. */
html.mobileTrack,
html.mobileTrack body{
  width:100%!important;
  height:100%!important;
  min-height:100%!important;
  overflow:hidden!important;
  background:#05080c!important;
}
html.mobileTrack #app{
  position:relative!important;
  width:100vw!important;
  height:100vh!important;
  min-height:0!important;
  padding:0!important;
  display:block!important;
  overflow:hidden!important;
  background:#05080c!important;
}
html.mobileTrack .evCanvas{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:1600px!important;
  height:900px!important;
  min-width:1600px!important;
  max-width:none!important;
  aspect-ratio:auto!important;
  flex:none!important;
  margin:0!important;
  transform-origin:center center!important;
  transform:translate(-50%,-50%) scale(var(--phone-stage-scale, .4))!important;
  border:0!important;
  border-radius:0!important;
  padding:8px!important;
  gap:8px!important;
}


/* R280 — intro text readability polish */
.introTextSequence{
  bottom:16%!important;
}
.introTextStep{
  background:transparent!important;
  border-color:transparent!important;
  box-shadow:none!important;
  font-size:clamp(22px,2.35vw,40px)!important;
  text-shadow:
    0 3px 6px rgba(0,0,0,.98),
    0 0 10px rgba(0,0,0,.92),
    1px 1px 2px rgba(0,0,0,.98)!important;
}
.introPunch{
  font-size:clamp(28px,2.9vw,50px)!important;
}
.availabilityBeat{
  font-size:clamp(24px,2.55vw,44px)!important;
  font-weight:900!important;
  line-height:1.18!important;
  text-align:center!important;
}

/* Cover the soft baked-in availability footnote on the Reality artwork.
   The readable version now appears as its own final text beat. */
#realityScene::after{
  content:'';
  position:absolute;
  left:0;
  bottom:0;
  width:46%;
  height:15%;
  z-index:4;
  pointer-events:none;
  background:linear-gradient(to top,rgba(8,10,14,.96),rgba(8,10,14,.82) 55%,rgba(8,10,14,0));
}
#realityScene .realityTextSequence{z-index:8}

/* Revised Reality sequence timing */
.realityTextSequence.run .step1{animation-duration:4.8s!important}
.realityTextSequence.run .step2{animation-delay:4.5s!important;animation-duration:3.2s!important}
.realityTextSequence.run .step3{animation-delay:7.4s!important;animation-duration:4.1s!important}
.realityTextSequence.run .step4{animation-delay:11.1s!important;animation-duration:4.6s!important}

/* Phone gets the same fixed-stage artwork, with slightly larger rendered text. */
html.mobileTrack .introTextSequence{bottom:17%!important}
html.mobileTrack .introTextStep{font-size:40px!important}
html.mobileTrack .introPunch{font-size:48px!important}
html.mobileTrack .availabilityBeat{font-size:42px!important}
