/* ==========================================================================
   VPNQF · components.css
   Hero client-window device, section furniture, pricing cards, line tables,
   platform cards, article cards, tabs, toc, faq, callouts, promo block,
   blog band, preview helpers.
   ========================================================================== */

/* ==========================================================================
   1. Hero — visual-right
   ========================================================================== */

.hero{
  position:relative;
  overflow-x:clip;
  min-height:calc(100svh - var(--nav-total));
  display:flex;
  align-items:center;
  padding-block:56px 64px;
  background-image:linear-gradient(180deg,var(--bg-top) 0%,var(--bg) 52%,var(--bg-deep) 100%);
}
.hero > .wrap{
  position:relative;
  z-index:2;
  width:min(var(--container),100%);
  margin-inline:auto;
}

.hero-glow{
  position:absolute;
  z-index:0;
  top:-190px;
  right:-150px;
  width:880px;
  height:880px;
  max-width:140vw;
  border-radius:50%;
  background-image:radial-gradient(circle at 50% 50%,var(--accent-24) 0%,var(--accent-08) 44%,transparent 70%);
  filter:blur(18px);
  pointer-events:none;
}

.hero-contours{
  position:absolute;
  z-index:0;
  inset:0;
  width:100%;
  height:100%;
  pointer-events:none;
}
.contour-strokes path{
  fill:none;
  stroke:var(--contour-1);
  stroke-width:1.6;
  stroke-linecap:round;
}
.contour-strokes path:nth-child(2n){stroke:var(--contour-2);}
.contour-dot{
  fill:var(--accent);
  opacity:.85;
  animation:driftDot 18s ease-in-out infinite;
}

.hero-grid{
  position:relative;
  z-index:2;
  display:grid;
  grid-template-columns:minmax(0,.94fr) minmax(0,1.06fr);
  gap:56px;
  align-items:center;
}

.hero-copy{position:relative;z-index:3;min-width:0;}

.hero-title{
  margin:0 0 26px;
  font-family:var(--font-display);
  font-size:clamp(40px,4.35vw,62px);
  font-weight:900;
  line-height:1.04;
  letter-spacing:-.038em;
  color:var(--text);
}
.hero-title-brand{
  display:block;
  animation:riseIn .62s cubic-bezier(.22,.72,.3,1) both;
}
.hero-title-main{
  display:block;
  animation:riseIn .62s .1s cubic-bezier(.22,.72,.3,1) both;
}
.hero-title-accent{color:var(--accent);}

.hero-cta{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:12px;
  margin-bottom:26px;
}

.hero-desc{
  margin:0 0 26px;
  max-width:45ch;
  font-size:15.5px;
  line-height:1.75;
  color:var(--text-muted);
}
.hero-desc strong{color:var(--text);font-weight:700;}

.trust-row{
  display:flex;
  flex-wrap:wrap;
  gap:9px 22px;
  margin:0 0 28px;
  font-size:13px;
  color:var(--text-muted);
}
.trust-row li{display:inline-flex;align-items:center;gap:6px;}
.tick{flex:none;width:14px;height:14px;color:var(--success);}

.flag-row{display:flex;flex-direction:column;gap:9px;}
.flag-row-label{
  display:flex;
  align-items:center;
  gap:10px;
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.16em;
  color:var(--text-muted);
}
.flag-row-label::after{
  content:"";
  flex:1;
  height:1px;
  background:var(--border);
}
.flag-chips{display:flex;flex-wrap:wrap;gap:8px;}
.flag-chip{
  display:inline-flex;
  align-items:center;
  gap:6px;
  padding:3px 10px 3px 4px;
  border:1px solid var(--border);
  border-radius:var(--r-pill);
  background:var(--surface-1);
  font-size:12px;
  line-height:1.5;
  color:var(--text-muted);
}
.flag-badge{
  display:grid;
  place-items:center;
  width:22px;
  height:22px;
  border-radius:50%;
  overflow:hidden;
  flex:none;
  background:var(--surface-1);
  box-shadow:inset 0 0 0 1px var(--ink-16);
}
.flag-badge svg{display:block;width:22px;height:22px;}
.flag-badge--sm{width:16px;height:16px;}
.flag-badge--sm svg{width:16px;height:16px;}
.fl-white{fill:var(--flag-white);}
.fl-red{fill:var(--flag-red);}
.fl-blue{fill:var(--flag-blue);}
.fl-green{fill:var(--flag-green);}

.hero-visual{
  position:relative;
  z-index:2;
  min-width:0;
  padding-top:60px;
  padding-bottom:80px;
}

.device-stack{
  position:relative;
  transform-style:preserve-3d;
  transition:transform .55s cubic-bezier(.22,.72,.3,1);
  animation:riseIn .8s .06s cubic-bezier(.22,.72,.3,1) both;
}
.device-stack:hover{
  transform:perspective(1500px) rotateY(-2.2deg) rotateX(1.1deg) translateY(-3px);
}

.client-window{
  position:relative;
  z-index:2;
  background:var(--bg-panel);
  border:1px solid var(--border);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-window),inset 0 1px 0 var(--white);
  overflow:hidden;
}

.chrome{
  display:flex;
  align-items:center;
  gap:12px;
  padding:11px 14px;
  background-image:linear-gradient(180deg,var(--surface-3),var(--bg-panel));
  border-bottom:1px solid var(--border);
}
.chrome-dots{display:flex;gap:6px;flex:none;}
.chrome-dots i{display:block;width:9px;height:9px;border-radius:50%;}
.d-red{background:var(--error);}
.d-amber{background:var(--warn);}
.d-green{background:var(--success);}

.address{
  display:inline-flex;
  align-items:center;
  gap:6px;
  flex:0 1 250px;
  min-width:0;
  padding:4px 12px;
  border:1px solid var(--border);
  border-radius:var(--r-pill);
  background:var(--surface-1);
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.02em;
  color:var(--text-muted);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.address svg{flex:none;width:12px;height:12px;}
.lock-shackle{fill:none;stroke:var(--success);stroke-width:1.6;stroke-linecap:round;}
.lock-body{fill:var(--success);}

.client-body{display:grid;grid-template-columns:1.06fr 1fr;}
.client-body > *{min-width:0;}

.region-col{
  padding:14px;
  border-right:1px solid var(--border);
  background-image:linear-gradient(180deg,var(--surface-3),var(--bg-panel) 62%);
}
.col-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  margin-bottom:10px;
}
.col-head-note{
  font-family:var(--font-mono);
  font-size:9px;
  letter-spacing:.14em;
  color:var(--text-muted);
  white-space:nowrap;
}

.region-list{display:flex;flex-direction:column;gap:6px;}
.region-row{
  display:grid;
  grid-template-columns:auto minmax(0,1fr) auto;
  align-items:center;
  gap:10px;
  padding:7px 9px;
  border:1px solid var(--border);
  border-radius:var(--r-sm);
  background:var(--surface-1);
}
.region-row.is-active{
  background:var(--accent-08);
  border-color:var(--accent-24);
  box-shadow:inset 0 0 0 2px var(--accent);
}
.region-label{display:flex;flex-direction:column;gap:1px;min-width:0;}
.region-name{
  font-size:12.5px;
  font-weight:600;
  line-height:1.25;
  color:var(--text);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.region-code{
  font-family:var(--font-mono);
  font-size:9px;
  letter-spacing:.14em;
  color:var(--text-muted);
}
.region-row.is-active .region-code{color:var(--accent-dark);}

.switch{
  position:relative;
  display:block;
  width:26px;
  height:15px;
  border-radius:var(--r-pill);
  background:var(--bg-panel-2);
  box-shadow:inset 0 1px 2px var(--ink-16);
  flex:none;
}
.switch.is-on{background:var(--accent);box-shadow:inset 0 1px 2px var(--accent-dark);}
.switch .knob{
  position:absolute;
  top:2px;
  left:2px;
  width:11px;
  height:11px;
  border-radius:50%;
  background:var(--white);
  box-shadow:0 1px 2px var(--ink-24);
}
.switch.is-on .knob{left:auto;right:2px;}

.detail-col{display:flex;flex-direction:column;padding:22px 16px 16px;}
.status{display:flex;align-items:center;gap:9px;}
.status-dot{
  position:relative;
  display:block;
  width:9px;
  height:9px;
  border-radius:50%;
  background:var(--success);
  box-shadow:0 0 0 4px var(--success-16);
  flex:none;
}
.status-dot::after{
  content:"";
  position:absolute;
  inset:-4px;
  border-radius:50%;
  border:1px solid var(--success);
  opacity:0;
  animation:pulseDot 2.8s ease-out infinite;
}
.status-word{
  font-family:var(--font-display);
  font-size:24px;
  font-weight:900;
  letter-spacing:-.03em;
  line-height:1;
  color:var(--text);
}
.status-sub{
  margin:7px 0 0;
  font-family:var(--font-mono);
  font-size:9.5px;
  letter-spacing:.12em;
  color:var(--text-muted);
}

.spec{margin-top:11px;}
.spec-row{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:10px;
  padding:7px 0;
  border-top:1px dashed var(--border);
}
.spec-row:first-child{border-top:0;}
.spec dt{font-size:10.5px;letter-spacing:.02em;color:var(--text-muted);}
.spec dd{
  font-family:var(--font-mono);
  font-size:12px;
  font-weight:700;
  letter-spacing:-.01em;
  color:var(--text);
  white-space:nowrap;
}

.refund-chip{
  display:inline-flex;
  align-items:center;
  gap:6px;
  align-self:flex-start;
  margin:11px 0 0;
  padding:5px 10px;
  border:1px solid var(--border);
  border-radius:var(--r-pill);
  background:var(--surface-1);
 :0;
  font-size:11px;
  font-weight:600;
  color:var(--text-muted);
}
.refund-chip svg{flex:none;width:12px;height:12px;color:var(--success);}

.plat-row{
  display:grid;
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:2px;
  margin-top:13px;
  padding-top:10px;
  border-top:1px dashed var(--border);
}
.plat-row li{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:5px;
  color:var(--text-muted);
  min-width:0;
}
.plat-row svg{display:block;width:16px;height:16px;flex:none;}
.plat-row span{
  font-family:var(--font-mono);
  font-size:9px;
  letter-spacing:.02em;
  white-space:nowrap;
}

.detail-col .btn-block{margin-top:auto;}

.client-foot{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:10px 14px;
  border-top:1px solid var(--border);
  background:var(--surface-3);
}
.foot-note{
  display:inline-flex;
  align-items:center;
  gap:6px;
  font-size:10.5px;
  color:var(--text-muted);
}
.foot-dot{display:block;width:6px;height:6px;border-radius:50%;background:var(--success);flex:none;}

.activity-card{
  position:absolute;
  z-index:4;
  top:-44px;
  right:-12px;
  width:236px;
  max-width:100%;
  padding:14px;
  border:1px solid var(--white-12);
  border-radius:var(--r-md);
  background-image:linear-gradient(158deg,var(--ink-soft),var(--text));
  color:var(--on-dark);
  box-shadow:var(--shadow-dark),inset 0 1px 0 var(--white-12);
}
.ac-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  margin-bottom:11px;
}
.ac-tag{
  font-family:var(--font-mono);
  font-size:10px;
  letter-spacing:.12em;
  color:var(--on-dark-muted);
  white-space:nowrap;
}
.ac-tag .mono-slash{color:var(--accent);}
.ac-live{
  display:inline-flex;
  align-items:center;
  gap:5px;
  padding:2px 8px;
  border:1px solid var(--success-40);
  border-radius:var(--r-pill);
  font-size:9.5px;
  letter-spacing:.08em;
  color:var(--on-dark);
  white-space:nowrap;
}
.ac-live i{display:block;width:5px;height:5px;border-radius:50%;background:var(--success);flex:none;}
.ac-list{display:flex;flex-direction:column;gap:8px;}
.ac-list li{
  display:flex;
  align-items:center;
  gap:9px;
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.02em;
  color:var(--on-dark);
  white-space:nowrap;
}
.ac-dot{display:block;width:6px;height:6px;border-radius:50%;flex:none;}
.ac-dot.is-on{background:var(--accent);box-shadow:0 0 0 3px var(--accent-24);}
.ac-dot.is-standby{background:var(--warn);}
.ac-dot.is-idle{background:var(--on-dark-muted);}

.badge-01{
  position:absolute;
  z-index:4;
  left:-12px;
  bottom:-72px;
  display:grid;
  place-items:center;
  width:52px;
  height:52px;
  border-radius:50%;
  background-image:linear-gradient(180deg,var(--accent-light),var(--accent) 55%,var(--accent-dark));
  color:var(--white);
  font-family:var(--font-mono);
  font-size:16px;
  font-weight:700;
  letter-spacing:.02em;
  box-shadow:0 18px 30px -14px var(--accent-40),inset 0 1px 0 var(--white-24);
}
.badge-01::before{
  content:"";
  position:absolute;
  left:50%;
  bottom:100%;
  height:20px;
  border-left:2px dashed var(--accent);
  transform:translateX(-1px);
}

@keyframes riseIn{
  from{opacity:0;transform:translateY(16px);}
  to{opacity:1;transform:none;}
}
@keyframes pulseDot{
  0%{transform:scale(.7);opacity:.7;}
  70%,100%{transform:scale(1.9);opacity:0;}
}
@keyframes driftDot{
  0%,100%{transform:translate(0,0);}
  50%{transform:translate(26px,30px);}
}

@media (hover:none){
  .device-stack:hover{transform:none;}
}

@media (max-width:1100px){
  .hero{min-height:0;padding-block:48px 56px;}
  .hero-grid{grid-template-columns:minmax(0,1fr);gap:40px;}
  .hero-visual{width:100%;max-width:660px;margin-inline:auto;padding-top:56px;padding-bottom:84px;}
  .hero-title{font-size:clamp(40px,6vw,56px);}
}

@media (max-width:760px){
  .hero-title{font-size:clamp(34px,7.6vw,44px);line-height:1.08;}
  .hero-desc{font-size:15px;}
}

@media (max-width:640px){
  .activity-card{
    position:relative;
    top:auto;
    right:auto;
    width:100%;
    margin:0 0 14px;
  }
  .ac-list li{white-space:normal;}
  .badge-01{left:0;bottom:-64px;width:44px;height:44px;font-size:14px;}
  .badge-01::before{height:14px;}
  .client-body{grid-template-columns:minmax(0,1fr);}
  .region-col{border-right:0;border-bottom:1px solid var(--border);}
  .address{flex:1 1 auto;}
  .plat-row svg{width:15px;height:15px;}
}

@media (prefers-reduced-motion: reduce){
  .hero-title-brand,.hero-title-main,.device-stack{animation:none;}
  .contour-dot,.status-dot::after{animation:none;}
  .device-stack{transition:none;}
  .device-stack:hover{transform:none;}
}

/* ==========================================================================
   2. Page head (sub pages)
   ========================================================================== */

.page-head{
  position:relative;
  overflow-x:clip;
  padding-block:clamp(40px,5vw,72px) clamp(28px,3vw,40px);
  background-image:linear-gradient(180deg,var(--bg-top),var(--bg));
  border-bottom:1px solid var(--border);
}
.page-head .wrap{position:relative;z-index:1;}
.page-title{
  margin:0 0 14px;
  font-size:clamp(30px,3.6vw,52px);
  line-height:1.1;
  letter-spacing:-.032em;
  text-wrap:balance;
}
.page-lead{
  margin:0;
  max-width:66ch;
  font-size:16.5px;
  line-height:1.75;
  color:var(--text-muted);
}

/* ==========================================================================
   3. Fact band
   ========================================================================== */

.fact-band{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:14px 40px;
  padding-block:18px;
  border-block:1px solid var(--border);
  background:var(--bg-panel);
}
.fact-item{display:flex;align-items:baseline;gap:8px;min-width:0;}
.fact-value{
  font-family:var(--font-mono);
  font-size:16px;
  font-weight:700;
  letter-spacing:-.01em;
  color:var(--text);
  white-space:nowrap;
}
.fact-label{font-size:12.5px;color:var(--text-muted);white-space:nowrap;}

/* ==========================================================================
   4. Feature ledger
   ========================================================================== */

.ledger{
  display:grid;
  grid-template-columns:minmax(0,264px) minmax(0,1fr);
  gap:clamp(28px,4vw,56px);
  align-items:start;
}
.ledger-index{
  position:sticky;
  top:calc(var(--anchor-offset) + 8px);
  min-width:0;
}
.ledger-kicker{
  margin:0 0 14px;
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.16em;
  color:var(--text-muted);
}
.ledger-index-list{display:flex;flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;}
.ledger-index-list a{
  display:flex;
  align-items:baseline;
  gap:10px;
  min-height:36px;
  padding:6px 0;
  font-size:14px;
  color:var(--text-muted);
  text-decoration:none;
  border-bottom:1px dashed var(--border);
}
.ledger-index-list a:hover{color:var(--text);}
.ledger-index-list a.is-active{color:var(--accent-dark);font-weight:700;}
.ledger-num{
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.1em;
  color:var(--accent);
  flex:none;
}

.ledger-rows{min-width:0;}
.ledger-row{
  display:grid;
  grid-template-columns:56px minmax(0,1fr);
  gap:6px 20px;
  padding-block:26px;
  border-top:1px dashed var(--border);
}
.ledger-row:first-child{border-top:0;padding-top:0;}
.ledger-no{
  grid-row:1 / span 2;
  margin:0;
  padding-top:4px;
  font-family:var(--font-mono);
  font-size:13px;
  font-weight:700;
  letter-spacing:.06em;
  color:var(--accent);
}
.ledger-title{
  margin:0;
  font-size:clamp(19px,1.7vw,24px);
  line-height:1.25;
  letter-spacing:-.022em;
}
.ledger-text{
  margin:0;
  max-width:62ch;
  font-size:15px;
  line-height:1.78;
  color:var(--text-muted);
}
.ledger-extra{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-top:12px;}
.ledger-platforms{display:flex;flex-wrap:wrap;align-items:center;gap:14px;}
.ledger-platforms li{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-muted);}
.ledger-platforms svg{width:17px;height:17px;flex:none;color:var(--text);}

.round-badge{
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  width:60px;
  height:60px;
  border-radius:50%;
  background-image:linear-gradient(180deg,var(--accent-light),var(--accent) 55%,var(--accent-dark));
  color:var(--white);
  box-shadow:0 16px 26px -14px var(--accent-40),inset 0 1px 0 var(--white-24);
  flex:none;
}
.round-badge b{
  font-family:var(--font-mono);
  font-size:17px;
  font-weight:700;
  line-height:1;
  color:var(--white);
}
.round-badge span{font-size:9.5px;line-height:1.4;color:var(--white-70);}

@media (max-width:900px){
  .ledger{grid-template-columns:minmax(0,1fr);}
  .ledger-index{position:static;top:auto;}
  .ledger-index-list{flex-direction:row;flex-wrap:wrap;gap:6px 8px;}
  .ledger-index-list a{border-bottom:0;padding:6px 10px;border:1px solid var(--border);border-radius:var(--r-pill);background:var(--surface-1);font-size:12.5px;}
}
@media (max-width:520px){
  .ledger-row{grid-template-columns:minmax(0,1fr);gap:6px;}
  .ledger-no{grid-row:auto;padding-top:0;}
}

/* ==========================================================================
   5. Pricing cards
   ========================================================================== */

.plan-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(258px,1fr));
  gap:20px;
  align-items:stretch;
}
.plan-card{
  position:relative;
  display:flex;
  flex-direction:column;
  min-width:0;
  padding:26px 22px 22px;
  background:var(--surface-1);
  border:1px solid var(--border);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-card);
}
.plan-card.is-featured{
  border-color:var(--accent-24);
  box-shadow:0 28px 50px -32px var(--accent-40),var(--shadow-card);
}
.plan-card.is-current{box-shadow:inset 0 0 0 2px var(--accent),var(--shadow-card);}
.plan-badge{
  position:absolute;
  top:-11px;
  left:22px;
  display:inline-flex;
  align-items:center;
  padding:4px 10px;
  border-radius:var(--r-pill);
  background-image:linear-gradient(180deg,var(--accent-light),var(--ac));
  background-image:linear-gradient(180deg,var(--accent-light),var(--accent) 60%,var(--accent-dark));
  color:var(--white);
  font-size:11px;
  font-weight:700;
  letter-spacing:.04em;
  white-space:nowrap;
  box-shadow:0 10px 18px -12px var(--accent-40);
}
.plan-tag{
  margin:0 0 8px;
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.16em;
  color:var(--text-muted);
}
.plan-name{margin:0 0 14px;font-size:17px;letter-spacing:-.01em;}
.plan-price{
  display:flex;
  align-items:baseline;
  gap:3px;
  margin:0 0 6px;
  font-family:var(--font-display);
  font-size:clamp(34px,3.4vw,42px);
  font-weight:900;
  letter-spacing:-.04em;
  line-height:1;
  color:var(--text);
}
.plan-currency{font-size:19px;font-weight:700;color:var(--text-muted);}
.plan-per{
  font-family:var(--font-mono);
  font-size:12px;
  font-weight:500;
  letter-spacing:0;
  color:var(--text-muted);
}
.plan-traffic{
  margin:0 0 16px;
  font-size:13px;
  color:var(--text-muted);
}
.plan-list{
  display:flex;
  flex-direction:column;
  gap:9px;
  margin:0 0 22px;
  padding:16px 0 0;
  border-top:1px dashed var(--border);
  font-size:13.5px;
  color:var(--text-muted);
}
.plan-list li{display:flex;align-items:flex-start;gap:8px;}
.plan-list svg{flex:none;width:14px;height:14px;margin-top:3px;color:var(--success);}
.plan-card .btn{margin-top:auto;flex-shrink:0;white-space:nowrap;}

.traffic-packs{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:14px;
}
.traffic-pack{
  display:flex;
  flex-direction:column;
  gap:6px;
  padding:18px;
  border:1px solid var(--border);
  border-radius:var(--r-md);
  background:var(--bg-panel);
  min-width:0;
}
.traffic-pack .pack-size{
  font-family:var(--font-mono);
  font-size:15px;
  font-weight:700;
  color:var(--text);
}
.traffic-pack .pack-price{
  font-family:var(--font-display);
  font-size:24px;
  font-weight:900;
  letter-spacing:-.03em;
  color:var(--accent-dark);
}
.traffic-pack .pack-note{font-size:12px;color:var(--text-muted);}

/* ==========================================================================
   6. Tables (line list / comparison)
   ========================================================================== */

.table-scroll{
  max-width:100%;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
  border:1px solid var(--border);
  border-radius:var(--r-md);
  background:var(--surface-1);
  box-shadow:var(--shadow-soft);
}

.data-table{
  width:100%;
  min-width:620px;
  border-collapse:collapse;
  font-size:14px;
  color:var(--text);
}
.data-table caption{
  padding:12px 16px;
  text-align:left;
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.14em;
  color:var(--text-muted);
  border-bottom:1px solid var(--border);
}
.data-table th,
.data-table td{
  padding:12px 16px;
  text-align:left;
  vertical-align:middle;
  border-bottom:1px solid var(--border);
  word-break:keep-all;
  overflow-wrap:normal;
}
.data-table thead th{
  background:var(--surface-3);
  font-family:var(--font-mono);
  font-size:11px;
  font-weight:700;
  letter-spacing:.12em;
  color:var(--text);
  white-space:nowrap;
}
.data-table tbody tr:last-child th,
.data-table tbody tr:last-child td{border-bottom:0;}
.data-table tbody tr:hover{background:var(--surface-2);}
.data-table .cell-strong{font-weight:700;color:var(--text);}
.data-table .cell-num{font-family:var(--font-mono);font-size:13px;white-space:nowrap;}
.data-table .node-region{
  background:var(--bg-panel-2);
  font-family:var(--font-mono);
  font-size:11px;
  font-weight:700;
  letter-spacing:.14em;
  color:var(--text);
  white-space:nowrap;
}

/* ==========================================================================
   7. Platform cards
   ========================================================================== */

.plat-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(168px,1fr));
  gap:14px;
}
.plat-card{
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  gap:10px;
  min-width:0;
  padding:18px;
  border:1px solid var(--border);
  border-radius:var(--r-md);
  background:var(--surface-1);
  box-shadow:var(--shadow-card);
  transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;
}
.plat-card:hover{
  transform:translateY(-2px);
  border-color:var(--border-strong);
  box-shadow:0 22px 38px -28px var(--ink-40);
}
.plat-icon{
  display:grid;
  place-items:center;
  width:38px;
  height:38px;
  border-radius:var(--r-sm);
  background:var(--surface-3);
  color:var(--text);
  flex:none;
}
.plat-icon svg{width:20px;height:20px;}
.plat-name{font-size:14px;font-weight:700;color:var(--text);}
.plat-card .btn{margin-top:auto;width:100%;flex-shrink:0;white-space:nowrap;}

/* ==========================================================================
   8. Article cards
   ========================================================================== */

.post-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(268px,1fr));
  gap:18px;
}
.post-card{
  display:flex;
  flex-direction:column;
  min-width:0;
  padding:22px;
  border:1px solid var(--border);
  border-radius:var(--r-md);
  background:var(--surface-1);
  box-shadow:var(--shadow-card);
  transition:transform .2s ease,box-shadow .2s ease;
}
.post-card:hover{transform:translateY(-2px);box-shadow:0 24px 40px -28px var(--ink-40);}
.post-meta{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:8px;
  margin-bottom:12px;
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.08em;
  color:var(--text-muted);
}
.post-tag{
  display:inline-flex;
  align-items:center;
  max-width:100%;
  padding:3px 9px;
  border-radius:var(--r-pill);
  background:var(--accent-08);
  color:var(--accent-dark);
  font-family:var(--font-body);
  font-size:11px;
  font-weight:700;
  letter-spacing:.02em;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.post-title{
  margin:0 0 10px;
  font-size:17px;
  line-height:1.4;
  letter-spacing:-.014em;
}
.post-title a{text-decoration:none;color:var(--text);}
.post-title a:hover{color:var(--accent-dark);}
.post-summary{
  margin:0 0 16px;
  font-size:13.5px;
  line-height:1.7;
  color:var(--text-muted);
}
.post-more{
  display:inline-flex;
  align-items:center;
  gap:6px;
  min-height:28px;
  margin-top:auto;
  font-size:13px;
  font-weight:700;
  color:var(--accent-dark);
  text-decoration:none;
}
.post-more:hover{gap:10px;}

.link-more{
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-height:32px;
  font-size:14px;
  font-weight:700;
  color:var(--accent-dark);
  text-decoration:none;
}
.link-more:hover{gap:12px;}

/* ==========================================================================
   9. Tabs
   ========================================================================== */

.tabs{min-width:0;}
.tablist{
  display:inline-flex;
  flex-wrap:wrap;
  gap:4px;
  padding:4px;
  border-radius:var(--r-pill);
  background:var(--bg-panel-2);
}
.tab{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:40px;
  padding:8px 18px;
  border:0;
  border-radius:var(--r-pill);
  background:transparent;
  color:var(--text-muted);
  font-family:var(--font-body);
  font-size:13.5px;
  font-weight:600;
  line-height:1.2;
  white-space:nowrap;
  cursor:pointer;
}
.tab:hover{color:var(--text);}
.tab[aria-selected="true"]{
  background:var(--surface-1);
  color:var(--text);
  box-shadow:var(--shadow-soft);
}
.tab-panel{display:none;margin-top:22px;min-width:0;}
.tab-panel.is-active{display:block;}
.tab-panel:focus-visible{outline-offset:4px;}

/* ==========================================================================
   10. Table of contents (sticky index for long pages)
   ========================================================================== */

.toc-tabs{
  position:sticky;
  top:0;
  z-index:15;
  background:var(--bg-panel);
  border-block:1px solid var(--border);
}
.toc-in{
  display:flex;
  gap:6px;
  overflow-x:auto;
  -webkit-overflow-scrolling:touch;
  padding-block:10px;
  scrollbar-width:thin;
}
.toc-tabs a{
  display:inline-flex;
  align-items:center;
  flex:none;
  min-height:36px;
  padding:6px 12px;
  border-radius:var(--r-pill);
  font-size:13px;
  color:var(--text-muted);
  text-decoration:none;
  white-space:nowrap;
}
.toc-tabs a:hover{background:var(--surface-3);color:var(--text);}
.toc-tabs a.is-active{
  background:var(--accent-10);
  color:var(--accent-dark);
  font-weight:700;
}

body:has(.toc-tabs) section[id]{scroll-margin-top:84px;}

/* ==========================================================================
   11. FAQ
   ========================================================================== */

.faq{
  border-top:1px solid var(--border);
}
.faq-item{border-bottom:1px solid var(--border);}
.faq-q{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  min-height:56px;
  padding-block:16px;
  font-family:var(--font-display);
  font-size:15.5px;
  font-weight:700;
  letter-spacing:-.01em;
  color:var(--text);
  cursor:pointer;
  list-style:none;
}
.faq-q::-webkit-details-marker{display:none;}
.faq-q::marker{content:"";}
.faq-mark{
  position:relative;
  width:18px;
  height:18px;
  flex:none;
  border-radius:50%;
  border:1px solid var(--border);
  background:var(--surface-1);
}
.faq-mark::before,
.faq-mark::after{
  content:"";
  position:absolute;
  top:50%;
  left:50%;
  background:var(--accent);
  transform:translate(-50%,-50%);
}
.faq-mark::before{width:8px;height:1.6px;}
.faq-mark::after{width:1.6px;height:8px;transition:transform .2s ease,opacity .2s ease;}
.faq-item[open] .faq-mark::after{transform:translate(-50%,-50%) rotate(90deg);opacity:0;}
.faq-a{
  padding-bottom:18px;
  max-width:72ch;
  font-size:14.5px;
  line-height:1.78;
  color:var(--text-muted);
}
.faq-a p{margin:0 0 10px;}
.faq-a p:last-child{margin-bottom:0;}

/* ==========================================================================
   12. Callout
   ========================================================================== */

.callout{
  position:relative;
  margin:0 0 var(--space-5);
  padding:16px 18px 16px 20px;
  border:1px solid var(--border);
  border-left:3px solid var(--accent);
  border-radius:0 var(--r-md) var(--r-md) 0;
  background:var(--accent-05);
  font-size:14.5px;
  line-height:1.75;
  color:var(--text-muted);
}
.callout-title{
  margin:0 0 6px;
  font-family:var(--font-mono);
  font-size:10.5px;
  font-weight:700;
  letter-spacing:.14em;
  color:var(--accent-dark);
}
.callout--success{background:rgba(14,138,95,.07);border-left-color:var(--success);}
.callout--success .callout-title{color:var(--success);}
.callout--warn{background:rgba(180,121,10,.08);border-left-color:var(--warn);}
.callout--warn .callout-title{color:var(--warn);}

/* ==========================================================================
   13. Promo block (article end)
   ========================================================================== */

.promo-block{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:space-between;
  gap:18px 28px;
  margin-block:var(--space-7);
  padding:24px;
  border:1px solid var(--border);
  border-radius:var(--r-lg);
  background-image:linear-gradient(158deg,var(--bg-panel),var(--surface-3));
  box-shadow:var(--shadow-card);
}
.promo-copy{min-width:0;flex:1 1 320px;}
.promo-brand{
  margin:0 0 6px;
  font-family:var(--font-mono);
  font-size:11px;
  letter-spacing:.16em;
  color:var(--accent-dark);
}
.promo-line{
  margin:0;
  font-size:15px;
  line-height:1.7;
  color:var(--text-muted);
}
.promo-block .btn{flex-shrink:0;white-space:nowrap;}

/* ==========================================================================
   14. Tags, chips, small badges
   ========================================================================== */

.tag{
  display:inline-flex;
  align-items:center;
  max-width:100%;
  padding:3px 9px;
  border:1px solid var(--border);
  border-radius:var(--r-pill);
  background:var(--surface-1);
  font-size:11.5px;
  font-weight:600;
  line-height:1.5;
  color:var(--text-muted);
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.tag--accent{border-color:var(--accent-24);background:var(--accent-08);color:var(--accent-dark);}
.tag--success{border-color:var(--success-40);background:rgba(14,138,95,.08);color:var(--success);}
.tag--line{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.06em;}

.chip-row{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;}
.chip{
  display:inline-flex;
  align-items:center;
  gap:6px;
  max-width:100%;
  min-height:28px;
  padding:4px 11px;
  border:1px solid var(--border);
  border-radius:var(--r-pill);
  background:var(--surface-1);
  font-size:12px;
  color:var(--text-muted);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.chip svg{flex:none;width:13px;height:13px;}

.badge-num{
  display:inline-grid;
  place-items:center;
  min-width:24px;
  height:24px;
  padding:0 6px;
  border-radius:var(--r-pill);
  background:var(--accent);
  color:var(--white);
  font-family:var(--font-mono);
  font-size:11px;
  font-weight:700;
  flex:none;
}

/* ==========================================================================
   15. Blog hero band (full-bleed tint band)
   ========================================================================== */

.blog-band{
  position:relative;
  overflow-x:clip;
  padding-block:clamp(40px,5vw,64px);
  background:var(--bg-panel-2);
  border-block:1px solid var(--border);
}
.blog-band::before{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background-image:radial-gradient(var(--accent-24) 1px,transparent 1px);
  background-size:18px 18px;
  opacity:.18;
}
.blog-band .wrap{position:relative;z-index:1;}
.blog-band .band-title{
  margin:0 0 12px;
  font-size:clamp(28px,3.2vw,44px);
  line-height:1.1;
  letter-spacing:-.032em;
}
.blog-band .band-meta{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:6px 10px;
  margin:0;
  font-size:13px;
  color:var(--text-muted);
}
.blog-band .band-meta span[aria-hidden="true"]{color:var(--dot-sep);}

/* ==========================================================================
   16. Preview helpers (design-preview.html only)
   ========================================================================== */

.swatch-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(148px,1fr));
  gap:14px;
}
.swatch{
  overflow:hidden;
  border:1px solid var(--border);
  border-radius:var(--r-md);
  background:var(--surface-1);
  box-shadow:var(--shadow-soft);
  min-width:0;
}
.swatch-chip{height:64px;border-bottom:1px solid var(--border);}
.swatch-meta{padding:10px 12px;min-width:0;}
.swatch-name{display:block;font-size:12.5px;font-weight:700;color:var(--text);}
.swatch-var{
  display:block;
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.02em;
  color:var(--text-muted);
  overflow-wrap:anywhere;
}

.sw-bg{background:var(--bg);}
.sw-bg-top{background:var(--bg-top);}
.sw-bg-deep{background:var(--bg-deep);}
.sw-panel{background:var(--bg-panel);}
.sw-panel2{background:var(--bg-panel-2);}
.sw-surface{background:var(--surface-1);}
.sw-border{background:var(--border);}
.sw-accent{background:var(--accent);}
.sw-accent-dark{background:var(--accent-dark);}
.sw-accent-light{background:var(--accent-light);}
.sw-text{background:var(--text);}
.sw-muted{background:var(--text-muted);}
.sw-success{background:var(--success);}
.sw-warn{background:var(--warn);}
.sw-error{background:var(--error);}
.sw-ink-soft{background:var(--ink-soft);}
.sw-on-dark{background:var(--on-dark);}

.type-specimen{display:grid;gap:18px;}
.specimen-row{
  display:grid;
  grid-template-columns:minmax(0,132px) minmax(0,1fr);
  gap:16px;
  align-items:baseline;
  padding-bottom:16px;
  border-bottom:1px dashed var(--border);
}
.specimen-label{
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--text-muted);
}

.demo-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
  gap:20px;
}
.demo-cell{
  min-width:0;
  padding:20px;
  border:1px solid var(--border);
  border-radius:var(--r-md);
  background:var(--surface-1);
}
.demo-label{
  margin:0 0 12px;
  font-family:var(--font-mono);
  font-size:10.5px;
  letter-spacing:.14em;
  color:var(--text-muted);
}
.btn-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px;}

@media (max-width:520px){
  .specimen-row{grid-template-columns:minmax(0,1fr);gap:6px;}
}