/*
Theme Name: TVS Door
Theme URI: https://techvibespot.com
Author: TechVibeSpot
Description: Scroll-story theme for TechVibeSpot. Security gear drops onto a front door as visitors scroll; product cards drop onto a rack. Pairs with the TVS Toolkit plugin.
Version: 2.1.0
Requires at least: 6.2
Requires PHP: 7.4
License: GPL-2.0-or-later
Text Domain: tvs-door
*/
/* Layout: scroll story — a pinned stage where security gear drops onto a front door step by step, then product cards drop in */
:root{
  --steel:#E7EBEF; --plate:#F7F9FB; --ink:#15202B; --muted:#56636F; --rule:#C8D0D7;
  --wall:#D5DCE2; --door:#8A5A34; --door-dark:#6E4527;
  --brass:#C08A24; --signal:#2E6BFF; --safe:#1E8A50; --warn:#C7372F;
  --display:"Big Shoulders Display","Arial Narrow",Impact,sans-serif;
  --body:"Public Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --steel:#121920;--plate:#1A222A;--ink:#E5EAEE;--muted:#9CA8B3;--rule:#2C3742;
  --wall:#232D36;--door:#7A4E2D;--door-dark:#5B3820;--brass:#DCA640;--signal:#5B8CFF;--safe:#45C27F;--warn:#F07068;color-scheme:dark}}
:root[data-theme="dark"]{
  --steel:#121920;--plate:#1A222A;--ink:#E5EAEE;--muted:#9CA8B3;--rule:#2C3742;
  --wall:#232D36;--door:#7A4E2D;--door-dark:#5B3820;--brass:#DCA640;--signal:#5B8CFF;--safe:#45C27F;--warn:#F07068;color-scheme:dark}

*{box-sizing:border-box}
body{background:var(--steel);color:var(--ink);font:400 17px/1.6 var(--body);margin:0}
a{color:inherit}
:focus-visible{outline:3px solid var(--brass);outline-offset:3px}
.wrap{max-width:1180px;margin:0 auto;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
h1,h2,h3{font-family:var(--display);line-height:1;margin:0;text-wrap:balance;text-transform:uppercase}

/* header */
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:20;background:var(--ink)}
.head{position:sticky;top:env(safe-area-inset-top,0px);z-index:19;background:var(--ink);color:var(--steel)}
.head .wrap{display:flex;align-items:center;gap:20px;padding-block:12px;flex-wrap:wrap}
.logo{font:900 24px/1 var(--display);text-decoration:none;text-transform:uppercase}
.logo b{color:var(--brass)}
.nav{display:flex;gap:4px 18px;flex-wrap:wrap;margin-left:auto;font-weight:600;font-size:15px}
.nav a{text-decoration:none}
.nav a:hover{color:var(--brass)}
.progress{position:absolute;left:0;bottom:-3px;height:3px;width:100%;background:var(--brass);transform-origin:0 50%;transform:scaleX(0)}

/* intro */
.intro{padding-block:64px 32px}
.intro h1{font-size:clamp(54px,9vw,128px);font-weight:900;max-width:12ch}
.intro p{font-size:20px;color:var(--muted);max-width:44ch;margin:20px 0 0}
.cue{display:inline-flex;align-items:center;gap:10px;margin-top:28px;font-weight:700}
.cue span{width:22px;height:36px;border:2px solid var(--ink);border-radius:12px;position:relative}
.cue span::after{content:"";position:absolute;left:50%;top:6px;width:4px;height:8px;margin-left:-2px;background:var(--brass);border-radius:2px;animation:cue 1.6s infinite}
@keyframes cue{0%{transform:translateY(0);opacity:1}100%{transform:translateY(12px);opacity:0}}

/* scroll story */
.story{position:relative;height:560vh}
.stage{position:sticky;top:56px;height:calc(100vh - 56px);display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:32px;align-items:center}
.steps{position:relative;min-height:340px}
.step{position:absolute;inset:0;transition:opacity .45s,transform .45s;opacity:0;transform:translateY(24px);pointer-events:none}
.step.on{opacity:1;transform:none;pointer-events:auto}
.step .num{font:800 18px/1 var(--display);color:var(--brass);letter-spacing:.03em}
.step h2{font-size:clamp(40px,5.4vw,70px);font-weight:900;margin:10px 0 14px}
.step p{margin:0;color:var(--muted);max-width:40ch;font-size:18px}
.step .pick{display:inline-flex;gap:14px;align-items:center;margin-top:22px;padding:12px 16px;background:var(--plate);border:1px solid var(--rule);text-decoration:none;font-weight:700}
.step .pick em{font-style:normal;color:var(--muted);font-weight:600}
.dots{display:flex;gap:8px;margin-top:28px;position:absolute;bottom:-56px;left:0}
.dots i{width:28px;height:4px;background:var(--rule)}
.dots i.on{background:var(--brass)}
.scene{width:100%;height:min(78vh,620px)}
.scene svg{width:100%;height:100%;display:block}
.scene .g{transform-box:fill-box;will-change:transform}
.status{font:800 22px/1 var(--display);letter-spacing:.02em}

/* drop-in product rack */
section.band{padding-block:72px}
.band.plate{background:var(--plate)}
.sec-head{display:flex;justify-content:space-between;align-items:end;gap:16px;flex-wrap:wrap;margin-bottom:32px}
.sec-head h2{font-size:clamp(38px,5vw,60px);font-weight:900}
.sec-head p{margin:0;color:var(--muted);max-width:46ch}
.rack{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;position:relative;padding-top:26px}
.rack::before{content:"";position:absolute;top:0;left:-8px;right:-8px;height:8px;background:var(--ink);border-radius:4px}
.item{background:var(--plate);border:1px solid var(--rule);position:relative;transform-origin:50% -26px;display:flex;flex-direction:column}
.item::before{content:"";position:absolute;top:-26px;left:50%;width:2px;height:26px;background:var(--muted)}
.item.pre{transform:translateY(-140vh) rotate(-6deg);visibility:hidden}
.item.drop{animation:drop 1s cubic-bezier(.3,1.4,.5,1) both}
.item:nth-child(2).drop{animation-delay:.15s}
.item:nth-child(3).drop{animation-delay:.3s}
@keyframes drop{0%{transform:translateY(-140vh) rotate(-6deg)}70%{transform:translateY(10px) rotate(2deg)}85%{transform:translateY(-4px) rotate(-1deg)}100%{transform:none}}
.item .pic{height:180px;background:var(--steel);display:grid;place-items:center;border-bottom:1px solid var(--rule)}
.item .pic svg{height:130px}
.item .body{padding:18px 20px;display:flex;flex-direction:column;gap:8px;flex:1}
.item .kind{font-size:13px;font-weight:700;color:var(--brass)}
.item h3{font-size:28px;font-weight:800}
.item ul{margin:0;padding-left:18px;color:var(--muted);font-size:15px}
.item .row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:auto;padding-top:12px;flex-wrap:wrap}
.price{font:900 32px/1 var(--display)}
.buy{background:var(--ink);color:var(--steel);text-decoration:none;font-weight:700;padding:11px 14px;font-size:15px}
.verdict{position:absolute;top:12px;right:12px;font:800 15px/1 var(--display);color:var(--safe);border:2px solid currentColor;padding:4px 8px;transform:rotate(-6deg);background:var(--plate)}
.disclose{font-size:14px;color:var(--muted);font-style:italic}
.ad{border:1px dashed var(--rule);color:var(--muted);font-size:13px;display:grid;place-items:center;min-height:96px;margin-block:8px;background:var(--plate)}

/* reviews list */
.layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:40px}
.post{display:grid;grid-template-columns:110px minmax(0,1fr);gap:20px;padding-block:20px;border-top:1px solid var(--rule)}
.post time{font-size:14px;color:var(--muted)}
.post .type{font-size:13px;font-weight:700;color:var(--brass)}
.post h3{font-size:26px;font-weight:800;margin:4px 0 6px;text-transform:none}
.post h3 a{text-decoration:none}
.post h3 a:hover{text-decoration:underline;text-decoration-color:var(--brass);text-decoration-thickness:3px}
.post p{margin:0;color:var(--muted);font-size:15px}
aside .box{background:var(--steel);border:1px solid var(--rule);padding:18px;margin-bottom:18px}
aside h3{font-size:22px;margin-bottom:8px}
aside ul{margin:0;padding-left:18px}
.ad.side{min-height:250px}

footer{background:var(--ink);color:var(--steel);padding-block:40px;font-size:15px}
footer .wrap{display:grid;grid-template-columns:2fr 1fr 1fr;gap:28px}
footer h4{font:800 20px/1 var(--display);text-transform:uppercase;margin:0 0 12px}
footer ul{list-style:none;padding:0;margin:0;display:grid;gap:6px}
footer a{text-decoration:none;opacity:.85}
footer .legal{grid-column:1/-1;border-top:1px solid color-mix(in srgb,var(--steel) 20%,transparent);padding-top:16px;opacity:.7;font-size:13px;margin:0}

@media (max-width:900px){
  .story{height:600vh}
  .stage{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr);gap:8px;align-content:start;padding-top:12px}
  .scene{height:44vh;order:-1}
  .steps{min-height:250px}
  .step h2{font-size:38px;margin:6px 0 8px}
  .step p{font-size:16px}
  .step .pick{margin-top:12px}
  .dots{display:none}
  .rack{grid-template-columns:1fr}
  .layout{grid-template-columns:1fr}
  footer .wrap{grid-template-columns:1fr}
  .nav{margin-left:0}
}
@media (max-width:480px){.post{grid-template-columns:1fr;gap:2px}}
@media (prefers-reduced-motion:reduce){
  .step{transition:none}
  .item.pre{transform:none}
  .item.drop{animation:none}
  .cue span::after{animation:none}
}

/* tags for [tvs_pick] in posts */
/* the signature: hanging inspection tag */
.tag-rail{display:flex;justify-content:center}
.tag{position:relative;background:var(--tag,#F3D27A);color:var(--tag-ink,#3A2E10);width:min(340px,100%);padding:56px 26px 26px;
  clip-path:polygon(18% 0,82% 0,100% 12%,100% 100%,0 100%,0 12%);transform-origin:50% 0}
.tag::before{content:"";position:absolute;top:18px;left:50%;width:22px;height:22px;margin-left:-11px;border-radius:50%;
  background:var(--steel);box-shadow:inset 0 0 0 4px color-mix(in srgb,var(--tag-ink,#3A2E10) 25%,transparent)}
.tag-holder{position:relative;padding-top:70px}
.tag-holder::before{content:"";position:absolute;top:0;left:50%;width:2px;height:92px;background:var(--muted);transform:rotate(-6deg);transform-origin:top}
.hero .tag{animation:swing 2.6s ease-out 1}
@keyframes swing{0%{transform:rotate(9deg)}30%{transform:rotate(-5deg)}55%{transform:rotate(3deg)}80%{transform:rotate(-1deg)}100%{transform:rotate(0)}}
@media (prefers-reduced-motion:reduce){.hero .tag{animation:none}}
.tag .kind{font-size:13px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;opacity:.75}
.tag h3{font-size:32px;font-weight:800;margin:6px 0 10px}
.tag .price{font:800 40px/1 var(--display);margin:14px 0}
.tag ul{margin:0 0 18px;padding-left:18px;font-size:15px}
.tag a.buy{display:block;text-align:center;background:var(--tag-ink,#3A2E10);color:var(--tag,#F3D27A);text-decoration:none;font-weight:700;padding:13px}
.tag .review-link{display:block;margin-top:10px;font-size:14px;text-align:center}
.stamp{position:absolute;right:14px;top:62px;font:800 26px/1 var(--display);letter-spacing:.04em;padding:6px 10px;
  border:3px solid currentColor;transform:rotate(-11deg);opacity:.9;mix-blend-mode:multiply}
.stamp.buy{color:var(--safe)}
.stamp.skip{color:var(--warn)}
:root[data-theme="dark"] .stamp{mix-blend-mode:normal}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .stamp{mix-blend-mode:normal}}

.tbl-wrap{overflow-x:auto;border:1px solid var(--rule);background:var(--plate)}
.tbl-wrap table{border-collapse:collapse;width:100%;font-size:15px;font-variant-numeric:tabular-nums}
.tbl-wrap th,.tbl-wrap td{text-align:left;padding:12px 14px;border-bottom:1px solid var(--rule)}
.tbl-wrap thead th{font:800 17px/1.1 var(--display);text-transform:uppercase;background:var(--ink);color:var(--steel)}
.v{font:800 15px/1 var(--display);padding:4px 8px;border:2px solid currentColor;display:inline-block}
.v.buy{color:var(--safe)}.v.skip{color:var(--warn)}

/* ---- WordPress additions ---- */
:root{--buy:var(--safe);--skip:var(--warn);--tag:#F3D27A;--tag-ink:#3A2E10}
.screen-reader-text{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}
.screen-reader-text:focus{position:static!important;width:auto;height:auto;clip:auto;background:var(--plate);padding:8px}
.nav ul{list-style:none;margin:0;padding:0;display:flex;gap:4px 18px;flex-wrap:wrap}
.nav .current-menu-item>a{color:var(--brass)}
.head{position:sticky}
.entry-head{padding-block:48px 20px;max-width:820px}
.entry-head h1{font-size:clamp(40px,6vw,76px);font-weight:900}
.entry-head .type a{color:var(--brass);font-weight:700;text-decoration:none;font-size:14px}
.entry-meta{color:var(--muted);font-size:15px;margin-top:14px}
.single-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:48px;padding-block:8px 64px}
.entry-content{font-size:18px;line-height:1.75;min-width:0}
.entry-content h2{font-size:clamp(32px,4vw,44px);margin:48px 0 14px}
.entry-content h3{font-size:28px;margin:32px 0 10px;text-transform:none}
.entry-content img{height:auto;max-width:100%}
.entry-content figure.wp-block-table{overflow-x:auto}
.entry-content table{border-collapse:collapse;width:100%}
.entry-content td,.entry-content th{border:1px solid var(--rule);padding:10px 12px}
.author-box{background:var(--plate);border:1px solid var(--rule);padding:22px;margin-top:40px}
.archive-head{padding-block:48px 8px}
.archive-head h1{font-size:clamp(44px,7vw,90px);font-weight:900}
.archive-head p{color:var(--muted);max-width:60ch}
.pagination .nav-links{display:flex;gap:10px;padding-block:24px;flex-wrap:wrap}
.pagination .page-numbers{padding:8px 12px;border:1px solid var(--rule);text-decoration:none}
.pagination .current{background:var(--ink);color:var(--steel)}
@media (max-width:900px){.single-layout{grid-template-columns:1fr}}
.entry-content table{display:block;max-width:100%;overflow-x:auto}

/* ---- v2.0.2 alignment fixes ---- */
.head,footer,body::before{background:#15202B;color:#E7EBEF}
.head .nav a{color:#E7EBEF}
.admin-bar .head{top:32px}
@media (max-width:782px){.admin-bar .head{top:46px}}
@media (max-width:600px){.admin-bar .head{top:0}}
.stage{top:var(--head-h,56px);height:calc(100vh - var(--head-h,56px))}
.scene{--ink:#15202B;--plate:#F7F9FB}
.item .pic{--ink:#15202B;--plate:#F7F9FB;--muted:#56636F;background:#E3E8EC}
.rack::before{left:0;right:0}
.dots{bottom:-28px}
aside .box ul,aside .widget ul{list-style:none;padding:0;margin:0;display:grid;gap:8px}
aside a{text-decoration:none}
aside a:hover{color:var(--brass);text-decoration:underline}
aside h2,aside .widget-title,aside .wp-block-heading{font:800 22px/1 var(--display);text-transform:uppercase;margin:0 0 10px}
aside form{display:flex;gap:8px;flex-wrap:wrap}
aside form label{flex:1;min-width:0}
aside input[type=search],aside input[type=text]{width:100%;padding:10px 12px;border:1px solid var(--rule);background:var(--steel);color:var(--ink);font:inherit;font-size:15px}
aside button,aside input[type=submit],aside .wp-block-search__button{padding:10px 14px;background:var(--ink);color:var(--steel);border:0;font:700 15px var(--body);cursor:pointer}
aside .wp-block-search__inside-wrapper{display:flex;gap:8px}
aside .wp-block-search__label{display:none}
@media (max-width:900px){
  .head .wrap{flex-wrap:nowrap;gap:14px}
  .logo{flex-shrink:0;font-size:21px}
  .nav{margin-left:auto;min-width:0;overflow-x:auto;white-space:nowrap;flex-wrap:nowrap;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 85%,transparent)}
  .nav::-webkit-scrollbar{display:none}
  .nav ul{flex-wrap:nowrap;gap:16px;padding-right:20px}
  .stage{padding-top:8px}
}
#rack{overflow-x:clip}
.intro p.seo-intro{font-size:16px;max-width:62ch;margin-top:14px}
.seo-intro a{color:var(--brass)}

/* v2.0.5: single post article must not use the list-row grid */
article.entry-content.post{display:block;padding-block:0;border-top:0;grid-template-columns:none}
.entry-content figure{margin:28px 0}
.entry-content figure img{display:block;max-width:100%;height:auto}
.entry-content figure.tvs-img img{width:100%;aspect-ratio:3/2;object-fit:cover;background:var(--plate)}
.entry-content figcaption{font-size:13px;color:var(--muted);margin-top:6px}

/* v2.1.0: review library (/reviews/) */
.lib-head{padding-block:48px 8px}
.lib-head h1{font-size:clamp(46px,7vw,96px);font-weight:900;max-width:14ch}
.lib-sub{color:var(--muted);max-width:60ch;margin:14px 0 26px;font-size:18px}
.lib-tools{display:flex;gap:14px;align-items:center;justify-content:space-between;flex-wrap:wrap;padding-block:18px;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.lib-filters{display:flex;gap:8px;flex-wrap:wrap}
.lib-chip{font:700 15px/1 var(--body);padding:10px 14px;border:1px solid var(--rule);background:var(--plate);color:var(--ink);cursor:pointer}
.lib-chip span{font-weight:600;color:var(--muted);margin-left:4px}
.lib-chip:hover{border-color:var(--brass)}
.lib-chip.on{background:var(--ink);color:var(--steel);border-color:var(--ink)}
.lib-chip.on span{color:var(--brass)}
.lib-search{flex:1 1 260px;max-width:380px}
.lib-search input{width:100%;padding:11px 14px;border:1px solid var(--rule);background:var(--plate);color:var(--ink);font:inherit;font-size:15px}
.lib-search input:focus{outline:3px solid var(--brass);outline-offset:0}
.lib-body{padding-block:32px 72px}
.lib-badge{display:inline-block;font:800 13px/1 var(--display);text-transform:uppercase;letter-spacing:.04em;padding:5px 8px;border:2px solid currentColor}
.b-review{color:var(--safe)}
.b-compare{color:var(--signal)}
.b-guide{color:var(--brass)}
.b-howto{color:var(--muted)}
.lib-feature{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:0;background:var(--plate);border:1px solid var(--rule);margin-bottom:36px}
.lib-feature-img{display:block;overflow:hidden;background:var(--wall)}
.lib-feature-img img{display:block;width:100%;height:100%;min-height:300px;object-fit:cover}
.lib-feature-text{padding:30px 32px;display:flex;flex-direction:column;gap:12px;align-items:flex-start;min-width:0}
.lib-new{font-size:13px;font-weight:700;color:var(--brass)}
.lib-feature h2{font-size:clamp(30px,3.4vw,46px);font-weight:900;text-transform:none}
.lib-feature h2 a,.lib-card h3 a{text-decoration:none}
.lib-feature h2 a:hover,.lib-card h3 a:hover{text-decoration:underline;text-decoration-color:var(--brass);text-decoration-thickness:3px}
.lib-feature p{margin:0;color:var(--muted)}
.lib-feature time,.lib-card time{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.lib-read{margin-top:auto;background:var(--ink);color:var(--steel);text-decoration:none;font-weight:700;padding:12px 16px}
.lib-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.lib-card{background:var(--plate);border:1px solid var(--rule);display:flex;flex-direction:column;transition:border-color .15s}
.lib-card:hover{border-color:var(--brass)}
.lib-card-img{display:block;aspect-ratio:16/9;overflow:hidden;background:var(--wall)}
.lib-card-img img{display:block;width:100%;height:100%;object-fit:cover}
.lib-noimg{display:block;width:100%;height:100%}
.lib-card-text{padding:16px 18px 20px;display:flex;flex-direction:column;gap:8px;align-items:flex-start;flex:1;min-width:0}
.lib-card h3{font-size:23px;font-weight:800;text-transform:none;line-height:1.1}
.lib-card p{margin:0;color:var(--muted);font-size:15px}
.lib-card time{margin-top:auto}
.lib-ad{grid-column:1/-1}
.lib-ad:empty{display:none}
.lib-empty{padding:28px;border:1px dashed var(--rule);color:var(--muted);text-align:center}
@media (max-width:1000px){.lib-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.lib-feature{grid-template-columns:1fr}.lib-feature-img img{min-height:0;aspect-ratio:16/9;height:auto}}
@media (max-width:620px){.lib-grid{grid-template-columns:1fr}.lib-search{max-width:none}.lib-feature-text{padding:20px}}
@media (prefers-reduced-motion:reduce){.lib-card{transition:none}}
