/* ══════════════════════════════════════════════════════════════════════════
   Dashboard reconstruction.

   A markup-and-CSS rebuild of the real console, used INSTEAD of a screenshot.
   Two reasons it is built this way:
     1. it stays sharp at every size and adapts to the page theme;
     2. it cannot carry a customer's real IPs, hostnames or traffic - the
        content is fixed demo data from the reserved documentation ranges.
   Everything inside is decorative; the outer element carries the a11y label.
   ══════════════════════════════════════════════════════════════════════════ */

.mock{
  position:relative;
  background:linear-gradient(168deg,rgba(7,26,45,.96),rgba(3,13,24,.96));
  border:1px solid var(--bd2);border-radius:var(--r);
  box-shadow:var(--shadow),0 0 70px rgba(var(--cyan-rgb),.10);
  padding:12px;overflow:hidden;
  container-type:inline-size;
}
.mock-demo{
  position:absolute;z-index:5;inset-block-start:0;inset-inline-start:0;
  font-family:var(--fm);font-size:9.5px;letter-spacing:1.4px;text-transform:uppercase;
  color:var(--bg0);background:linear-gradient(90deg,var(--green),var(--cyan));
  padding:4px 12px;border-end-end-radius:9px;
}

/* ── chrome ── */
.mock-top{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:9px 12px 11px;border-bottom:1px solid var(--bd1);margin-bottom:10px;
}
.mock-brand{font-family:var(--fd);font-size:11px;font-weight:700;color:var(--t2)}
.mock-brand b{color:var(--cyan);font-weight:700}
.mock-clock{font-family:var(--fm);font-size:13px;color:var(--cyan);letter-spacing:1.5px}
.mock-site{
  display:inline-flex;align-items:center;gap:6px;font-size:10.5px;color:var(--t2);
  border:1px solid var(--bd2);border-radius:6px;padding:4px 9px;
}
.mock-dot-g{width:6px;height:6px;border-radius:50%;background:var(--green);box-shadow:0 0 7px var(--green)}

/* ── stat cards ── */
.mock-stats{display:grid;grid-template-columns:repeat(6,1fr);gap:7px;margin-bottom:9px}
.ms{
  position:relative;background:rgba(255,255,255,.028);
  border:1px solid var(--bd1);border-radius:7px;padding:9px 10px;overflow:hidden;min-width:0;
}
/* Coloured top edge, mirroring the console's card accents. */
.ms::before{content:'';position:absolute;inset-block-start:0;inset-inline:0;height:2px;background:var(--ac,var(--cyan))}
.ms span{display:block;font-size:9px;color:var(--t3);margin-bottom:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ms b{display:block;font-family:var(--fd);font-size:17px;font-weight:800;line-height:1;color:var(--ac,var(--cyan));margin-bottom:4px}
.ms i{display:block;font-family:var(--fm);font-size:9px;color:var(--t3);font-style:normal}
.ms-c{--ac:var(--yellow)}.ms-o{--ac:var(--orange)}.ms-b{--ac:var(--blue)}
.ms-g{--ac:var(--green)}.ms-r{--ac:var(--red)}.ms-p{--ac:var(--purple)}

/* ── body: rail / map / rail ── */
.mock-body{display:grid;grid-template-columns:150px minmax(0,1fr) 150px;gap:9px;margin-bottom:9px}
.mock-rail{display:flex;flex-direction:column;gap:9px;min-width:0}
.mp{background:rgba(255,255,255,.028);border:1px solid var(--bd1);border-radius:7px;padding:11px 10px}
.mp-t{
  display:block;font-family:var(--fd);font-size:8.5px;letter-spacing:1.4px;text-transform:uppercase;
  color:var(--cyan);margin-bottom:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.mp-s{display:block;text-align:center;font-size:9px;color:var(--t3);margin-top:7px}

/* circular defence gauge */
.ring{position:relative;width:88px;margin-inline:auto}
.ring svg{width:100%;height:auto;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:7;stroke-linecap:round}
.ring-bg{stroke:rgba(255,255,255,.07)}
.ring-fg{
  stroke:var(--green);
  stroke-dasharray:264;        /* circumference at r=42 */
  stroke-dashoffset:264;
  filter:drop-shadow(0 0 5px rgba(var(--green-rgb),.6));
  transition:stroke-dashoffset 1.8s var(--ease);
}
.mock.in-view .ring-fg{stroke-dashoffset:4}
.ring-v{
  position:absolute;inset:0;display:grid;place-items:center;
  font-family:var(--fd);font-size:16px;font-weight:800;color:var(--green);
}

/* semicircular threat dial */
.dial{position:relative;width:100%;padding-block-end:4px}
.dial svg{width:100%;height:auto}
.dial path{fill:none;stroke-width:7;stroke-linecap:round}
.dial-bg{stroke:rgba(255,255,255,.07)}
.dial-fg{
  stroke:var(--green);
  stroke-dasharray:132;        /* semicircle length at r=42 */
  stroke-dashoffset:132;
  filter:drop-shadow(0 0 5px rgba(var(--green-rgb),.6));
  transition:stroke-dashoffset 1.8s var(--ease);
}
.mock.in-view .dial-fg{stroke-dashoffset:106}   /* reads as 2/10 */
.dial-v{display:block;text-align:center;font-family:var(--fd);font-size:13px;font-weight:800;color:var(--green);margin-top:-6px}
.dial-n{display:block;text-align:center;font-family:var(--fm);font-size:9.5px;color:var(--t3)}

/* meter rows, shared by the regional and hardware panels */
.mr{display:grid;grid-template-columns:26px 1fr 30px;align-items:center;gap:6px;margin-bottom:7px}
.mr:last-child{margin-bottom:0}
.mr > span:first-child{font-family:var(--fm);font-size:8.5px;color:var(--t3)}
.mr-bar{height:4px;border-radius:100px;background:rgba(255,255,255,.06);overflow:hidden}
.mr-bar i{display:block;height:100%;width:0;border-radius:100px;background:linear-gradient(90deg,var(--cyan),var(--green));transition:width 1.4s var(--ease)}
.mr b{font-family:var(--fm);font-size:8.5px;color:var(--t2);text-align:end}

/* ── map ── */
.mock-map{background:rgba(255,255,255,.028);border:1px solid var(--bd1);border-radius:7px;overflow:hidden;min-width:0}
.mm-hdr{display:flex;align-items:center;gap:10px;padding:8px 10px;flex-wrap:wrap}
.mm-t{font-family:var(--fd);font-size:8.5px;letter-spacing:1.2px;text-transform:uppercase;color:var(--cyan)}
.mm-legend{display:inline-flex;align-items:center;gap:6px;font-size:9px;color:var(--t3)}
.mm-legend i{width:6px;height:6px;border-radius:50%;margin-inline-start:5px}
.lg-r{background:var(--red)}
.lg-g{background:var(--green)}
.mm-live{
  margin-inline-start:auto;display:inline-flex;align-items:center;gap:5px;
  font-family:var(--fm);font-size:8.5px;letter-spacing:1.2px;color:var(--red);
  border:1px solid rgba(var(--red-rgb),.35);border-radius:100px;padding:2px 8px;
}
.mm-live i{width:5px;height:5px;border-radius:50%;background:var(--red);animation:pulseDot 1.8s ease-out infinite}

.mm-frame{position:relative;aspect-ratio:2/1;background:#040f1c;overflow:hidden}
.mm-frame img{width:100%;height:100%;object-fit:cover;opacity:.62;filter:saturate(.65) brightness(.8) contrast(1.05)}

/* Dots use physical left/top, NOT logical inset: the map is a fixed
   geographic projection, so a coordinate must never mirror in RTL. */
.mm-dot{
  position:absolute;left:var(--x);top:var(--y);
  width:6px;height:6px;border-radius:50%;transform:translate(-50%,-50%);
  background:var(--red);box-shadow:0 0 8px rgba(var(--red-rgb),.9);
  animation:dotPulse 2.6s ease-out infinite both;
}
@keyframes dotPulse{
  0%,100%{opacity:.35;transform:translate(-50%,-50%) scale(.7)}
  45%{opacity:1;transform:translate(-50%,-50%) scale(1.25)}
}
.mm-srv{position:absolute;left:var(--x);top:var(--y);transform:translate(-50%,-50%);display:flex;align-items:center;gap:5px}
.mm-srv i{
  width:11px;height:11px;border-radius:50%;flex-shrink:0;
  border:2px solid var(--green);box-shadow:0 0 12px rgba(var(--green-rgb),.85);
  animation:srvPing 2.4s ease-out infinite;
}
@keyframes srvPing{
  0%{box-shadow:0 0 0 0 rgba(var(--green-rgb),.55)}
  70%{box-shadow:0 0 0 12px rgba(var(--green-rgb),0)}
  100%{box-shadow:0 0 0 0 rgba(var(--green-rgb),0)}
}
.mm-srv b{font-family:var(--fm);font-size:8.5px;color:var(--green);white-space:nowrap;text-shadow:0 0 6px rgba(0,0,0,.9)}

/* ── log table ── */
.mock-log{background:rgba(255,255,255,.028);border:1px solid var(--bd1);border-radius:7px;overflow:hidden}
.ml-hdr{display:flex;align-items:center;gap:9px;padding:8px 10px;border-bottom:1px solid var(--bd1)}
.ml-t{font-family:var(--fd);font-size:8.5px;letter-spacing:1.4px;text-transform:uppercase;color:var(--cyan)}
.ml-badge{
  margin-inline-start:auto;font-family:var(--fm);font-size:9px;color:var(--cyan);
  background:rgba(var(--cyan-rgb),.1);border:1px solid var(--bd2);border-radius:5px;padding:2px 7px;
}
.ml-wrap{overflow-x:auto}
.ml-tbl{width:100%;border-collapse:collapse;font-size:9.5px}
.ml-tbl th{
  text-align:start;font-family:var(--fd);font-size:8px;letter-spacing:1px;text-transform:uppercase;
  color:var(--t3);font-weight:700;padding:6px 9px;border-bottom:1px solid var(--bd1);white-space:nowrap;
}
.ml-tbl td{padding:6px 9px;border-bottom:1px solid rgba(255,255,255,.035);color:var(--t2);white-space:nowrap}
.ml-tbl tr:last-child td{border-bottom:none}
.ml-tbl .mono{font-family:var(--fm);color:var(--t1);direction:ltr;unicode-bidi:isolate}
.ml-url{max-width:180px;overflow:hidden;text-overflow:ellipsis}
.ml-tbl .ml-url{color:var(--cyan)}
.ml-st{display:inline-block;font-family:var(--fm);font-size:8.5px;border-radius:4px;padding:2px 7px;white-space:nowrap}
.st-b{color:var(--red);background:rgba(var(--red-rgb),.12);border:1px solid rgba(var(--red-rgb),.3)}
.st-a{color:var(--green);background:rgba(var(--green-rgb),.12);border:1px solid rgba(var(--green-rgb),.3)}

/* The console shrinks by dropping rails before it ever squashes the map. */
@container (max-width:820px){
  .mock-body{grid-template-columns:130px minmax(0,1fr)}
  .mock-body .mock-rail:last-child{display:none}
  .mock-stats{grid-template-columns:repeat(3,1fr)}
}
@container (max-width:560px){
  .mock-body{grid-template-columns:minmax(0,1fr)}
  .mock-body .mock-rail{display:none}
  .ml-tbl th:nth-child(3),.ml-tbl td:nth-child(3),
  .ml-tbl th:nth-child(5),.ml-tbl td:nth-child(5){display:none}
}

/* ═════════════════════════ Live-map callout ═════════════════════════ */
.lmap{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:34px;
  margin-top:26px;padding:32px 30px;
  background:linear-gradient(135deg,rgba(var(--cyan-rgb),.09),rgba(var(--green-rgb),.05));
  border:1px solid var(--bd2);border-radius:var(--r);
}
.lmap-badge{
  display:inline-flex;align-items:center;gap:7px;
  font-family:var(--fm);font-size:10px;letter-spacing:1.6px;text-transform:uppercase;
  color:var(--red);border:1px solid rgba(var(--red-rgb),.4);background:rgba(var(--red-rgb),.09);
  border-radius:100px;padding:4px 12px;margin-bottom:14px;
}
.lmap-badge i{width:6px;height:6px;border-radius:50%;background:var(--red);animation:pulseDot 1.8s ease-out infinite}
.lmap-t{font-family:var(--fd);font-size:clamp(1.1rem,2vw,1.4rem);font-weight:800;line-height:1.3;margin-bottom:12px}
.lmap-d{font-size:14.5px;color:var(--t2)}
.lmap-list{display:flex;flex-direction:column;gap:15px}
.lmap-item{display:flex;gap:13px;align-items:flex-start}
.lmap-i{
  flex-shrink:0;display:grid;place-items:center;width:34px;height:34px;font-size:16px;
  background:rgba(var(--cyan-rgb),.1);border:1px solid var(--bd2);border-radius:9px;
}
.lmap-item b{display:block;font-size:13.5px;margin-bottom:3px}
.lmap-item span{display:block;font-size:12.8px;color:var(--t2);line-height:1.55}

@media (max-width:860px){.lmap{grid-template-columns:1fr;gap:24px;padding:26px 22px}}
@media (max-width:520px){
  .mock{padding:8px}
  .mock-top{padding:7px 8px 9px}
  .mock-clock{font-size:11px}
}

@media (prefers-reduced-motion:reduce){
  .mm-dot,.mm-srv i,.mm-live i,.lmap-badge i{animation:none}
  .ring-fg{stroke-dashoffset:4}
  .dial-fg{stroke-dashoffset:106}
  .mr-bar i{transition:none}
}
