*{box-sizing:border-box}
body{margin:0;background:#FFF7EC}
a{color:#17131F}
*:focus-visible{outline:3px solid #FF5A36;outline-offset:3px}
.navl{color:#17131F;text-decoration:none;font-weight:500}
.navl:hover{text-decoration:underline;text-underline-offset:6px;text-decoration-thickness:2px}
.cta{transition:transform 120ms ease,box-shadow 120ms ease;box-shadow:0 4px 0 #17131F}
.cta:hover{transform:translateY(-2px);box-shadow:0 6px 0 #17131F}
.cta:active{transform:translateY(2px);box-shadow:0 2px 0 #17131F}
.chip{transition:background-color 120ms ease,transform 120ms ease}
.chip:hover{transform:translateY(-1px)}
.card{transition:transform 160ms ease,box-shadow 160ms ease}
.card:hover{transform:translateY(-6px) rotate(-1deg);box-shadow:0 2px 0 rgba(23,19,31,.08),0 26px 48px rgba(23,19,31,.18)}
.inp::placeholder{color:#9A92A6}
@keyframes popA{0%{transform:scale(0);opacity:0}6%{transform:scale(1.3);opacity:1}9%{transform:scale(1)}78%{transform:scale(1);opacity:1}84%{transform:scale(1.25) rotate(20deg);opacity:1}90%,100%{transform:scale(0) rotate(45deg);opacity:0}}
@keyframes popB{0%{transform:scale(0);opacity:0}6%{transform:scale(1.3);opacity:1}9%{transform:scale(1)}78%{transform:scale(1);opacity:1}84%{transform:scale(1.25) rotate(20deg);opacity:1}90%,100%{transform:scale(0) rotate(45deg);opacity:0}}
@keyframes rainA{0%{transform:translateY(-480px);opacity:0;background:#BFE6FF;box-shadow:0 0 12px #5DB8FF}1%{opacity:1}8%{transform:translateY(0) scale(1.3,.7);background:#BFE6FF;box-shadow:0 0 14px #5DB8FF}11%{transform:none}30%{background:#17131F;box-shadow:0 0 0 rgba(93,184,255,0)}78%{transform:none;opacity:1;background:#17131F;box-shadow:0 0 0 rgba(93,184,255,0)}86%{transform:translateY(-40px) scale(.4);opacity:0;background:#BFE6FF;box-shadow:0 0 12px #5DB8FF}100%{opacity:0;transform:translateY(-480px)}}
@keyframes rainB{0%{transform:translateY(-480px);opacity:0;background:#BFE6FF;box-shadow:0 0 12px #5DB8FF}1%{opacity:1}8%{transform:translateY(0) scale(1.3,.7);background:#BFE6FF;box-shadow:0 0 14px #5DB8FF}11%{transform:none}30%{background:#17131F;box-shadow:0 0 0 rgba(93,184,255,0)}78%{transform:none;opacity:1;background:#17131F;box-shadow:0 0 0 rgba(93,184,255,0)}86%{transform:translateY(-40px) scale(.4);opacity:0;background:#BFE6FF;box-shadow:0 0 12px #5DB8FF}100%{opacity:0;transform:translateY(-480px)}}
@keyframes rippleA{0%,100%{transform:scale(1)}5%{transform:scale(.45);background:#7A5CFF}12%{transform:scale(1);background:#17131F}}
@keyframes rippleB{0%,100%{transform:scale(1)}5%{transform:scale(.45);background:#7A5CFF}12%{transform:scale(1);background:#17131F}}
@keyframes float{0%,100%{transform:translateY(0) rotate(var(--r))}50%{transform:translateY(-14px) rotate(var(--r))}}
@keyframes tpulse{0%,100%{transform:scale(1)}50%{transform:scale(.9)}}
@keyframes twob{0%,100%{transform:rotate(-3deg) scale(1)}50%{transform:rotate(3deg) scale(1.03)}}
@keyframes tglitch{0%,100%{transform:none}20%{transform:translate(4px,-2px)}40%{transform:translate(-5px,1px)}60%{transform:none}80%{transform:translate(2px,3px)}}
@keyframes tspin{to{transform:rotate(360deg)}}
@keyframes tzoom{0%,100%{transform:scale(1)}50%{transform:scale(.72) rotate(-8deg)}}
@keyframes tglow{0%,100%{filter:drop-shadow(0 0 0 rgba(93,184,255,0))}50%{filter:drop-shadow(0 0 9px rgba(93,184,255,.95))}}
@keyframes tswap{0%,45%{color:#0F6E66}50%,95%{color:#5A3FD6}}
@keyframes thue{0%,100%{color:#3DDCFF}33%{color:#7CFF6B}66%{color:#FF4F8B}}
@keyframes tdrift{0%,100%{transform:translateX(-4px)}50%{transform:translateX(6px) rotate(2deg)}}
@keyframes tscan{0%{top:0}100%{top:100%}}
@media (prefers-reduced-motion: reduce){.cell,.float,.thumb,.scanbar{animation:none!important}}
/* Trending loops gallery (rendered by landing.js from loops/index.json + the style catalog in PocketBase). Responsive on its own: 4 / 2 / 1 columns. */
.loops{--ink:#17131F;--frame:#0D0B13;padding:104px clamp(16px,5vw,72px) 40px}
.loops-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:24px 40px}
.loops-intro{display:flex;flex-direction:column;gap:12px;min-width:0;max-width:720px}
.loops-kicker{margin:0;font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;letter-spacing:.1em;color:#FF5A36}
.loops-title{margin:0;font-size:clamp(40px,6vw,60px);line-height:1;font-weight:800;letter-spacing:-.03em}
.loops-sub{margin:0;font-size:clamp(17px,2vw,20px);line-height:1.45;color:#4A4356}
.loops-filters{display:flex;flex-wrap:wrap;gap:10px;min-width:0}
.loops-status{margin:28px 0 0;font-size:17px;color:#4A4356}
.loops-status a{font-weight:700}
.loops-note{margin:28px 0 0;font-family:'JetBrains Mono',monospace;font-size:13px;line-height:1.6;color:#7A7286;max-width:860px}
.loops-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:28px;margin-top:36px}
.loop-skeleton{aspect-ratio:4/5;border-radius:28px;background:linear-gradient(100deg,#F1E7D8 30%,#FBF4EA 50%,#F1E7D8 70%) 0 0/300% 100%;animation:loopshimmer 1.6s ease-in-out infinite}
@keyframes loopshimmer{to{background-position:-150% 0}}
.loop-card{position:relative;display:flex;flex-direction:column;min-width:0;padding:10px;border-radius:30px;background:#FFFFFF;border:2px solid var(--ink);box-shadow:0 2px 0 rgba(23,19,31,.08),0 16px 34px rgba(23,19,31,.10);transition:transform 220ms cubic-bezier(.2,.8,.2,1),box-shadow 220ms ease}
.loop-card:hover{transform:translateY(-6px);box-shadow:0 2px 0 rgba(23,19,31,.08),0 28px 54px rgba(23,19,31,.20)}
.loop-frame{position:relative;flex:none;display:flex;flex-direction:column;border-radius:22px;overflow:hidden;background:var(--frame);box-shadow:inset 0 0 0 1px rgba(255,255,255,.06)}
.loop-frame video{display:block;width:100%;height:auto;aspect-ratio:1;object-fit:cover;background:var(--frame)}
.loop-tag{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:4px 12px;border-radius:999px;background:#FFF1DE;border:1.5px solid #EADBC5;color:var(--ink);font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* The meter sits under the video, never on top of the code. */
.loop-meter{display:flex;align-items:center;gap:10px;padding:11px 14px 12px}
.loop-track{position:relative;flex:1;height:4px;border-radius:4px;background:rgba(255,247,236,.22);overflow:hidden}
.loop-window{position:absolute;top:0;bottom:0;background:rgba(124,255,178,.55)}
.loop-head{position:absolute;left:0;top:0;bottom:0;width:100%;transform-origin:left center;transform:scaleX(0);background:rgba(255,247,236,.85)}
.loop-live{display:inline-flex;align-items:center;gap:6px;font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.08em;color:rgba(255,247,236,.55);white-space:nowrap;transition:color 160ms ease}
.loop-live::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.loop-card.is-scannable .loop-live{color:#7CFFB2}
.loop-body{flex:1;display:flex;flex-direction:column;gap:8px;min-width:0;padding:16px 10px 8px}
.loop-name{margin:0;font-size:24px;line-height:1.1;font-weight:800;letter-spacing:-.015em}
.loop-desc{margin:0;font-size:16px;line-height:1.45;color:#4A4356;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.loop-scan{margin:0;font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.5;color:#7A7286}
.loop-price{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px;margin-top:auto;padding-top:12px;border-top:1.5px dashed #E4DACB}
.loop-price strong{font-size:18px;font-weight:800}
.loop-price span{font-size:13px;font-weight:700;color:#5A3FD6}
/* Tablet: 2 columns; with an odd count the first loop gets a full-width row so the rest pair up. */
@media (min-width:640px){.loops-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (min-width:640px) and (max-width:1099px){
.loops-grid.odd>.loop-card.is-lead{grid-column:1/-1;flex-direction:row;align-items:stretch;gap:12px}
.loops-grid.odd>.loop-card.is-lead .loop-frame{width:min(50%,480px)}
.loops-grid.odd>.loop-card.is-lead .loop-body{flex:1;justify-content:center;padding:18px 18px 12px}
.loops-grid.odd>.loop-card.is-lead .loop-price{margin-top:14px}
}
/* Wide: 4 columns. One or two loops become wide rows; with three or more the first is a wide feature row (video left,
   details right), so its square video never sits in a taller box with bars around it. */
@media (min-width:1100px){
.loops-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.loops-grid.n-many>.loop-card.is-lead{grid-column:span 2;flex-direction:row;align-items:stretch;gap:12px}
.loops-grid.n-many>.loop-card.is-lead .loop-frame{width:52%;align-self:center}
.loops-grid.n-many>.loop-card.is-lead .loop-body{flex:1;justify-content:center;padding:22px 22px 14px}
.loops-grid.n-1>.loop-card,.loops-grid.n-2>.loop-card{flex-direction:row;align-items:stretch;gap:12px}
.loops-grid.n-1>.loop-card{grid-column:1/-1}
.loops-grid.n-2>.loop-card{grid-column:span 2}
.loops-grid.n-1>.loop-card .loop-frame{width:min(50%,480px)}
.loops-grid.n-2>.loop-card .loop-frame{width:52%}
.loops-grid.n-1>.loop-card .loop-body,.loops-grid.n-2>.loop-card .loop-body{flex:1;justify-content:center;padding:22px 22px 14px}
.loops-grid.n-1>.loop-card .loop-price,.loops-grid.n-2>.loop-card .loop-price{margin-top:14px}
.loops-grid.n-1>.loop-card .loop-body{padding:28px 40px;max-width:640px}
.loops-grid.n-many>.loop-card.is-lead .loop-name,.loops-grid.n-1>.loop-card .loop-name{font-size:34px}
.loops-grid.n-many>.loop-card.is-lead .loop-desc,.loops-grid.n-1>.loop-card .loop-desc{font-size:18px}
}
@media (prefers-reduced-motion: reduce){.loop-card,.loop-card:hover{transition:none;transform:none}.loop-skeleton{animation:none}}
[hidden]{display:none!important}
