/* Shared styles for portfolio project pages. Tokens come from /styles.css. */
.project-page{padding-top:28px}
.project-reveal{opacity:0;transform:translateY(16px);transition:opacity .5s ease,transform .6s cubic-bezier(.2,.7,.2,1);transition-delay:var(--project-reveal-delay,0ms)}
.project-reveal.project-revealed{opacity:1;transform:translateY(0)}
.project-page::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(ellipse 70% 50% at 85% 0%,#e9c66b14,transparent 70%),radial-gradient(ellipse 60% 45% at 0% 100%,#e9c66b0c,transparent 70%)}
.project-top{display:flex;justify-content:space-between;gap:16px;font-size:12px;letter-spacing:.06em;margin-bottom:56px}
.project-top a{color:var(--muted);text-decoration:none;transition:color .15s}
.project-top a:hover{color:var(--gold)}
.project-page .page-panel{max-width:960px;padding-bottom:88px;margin-inline:auto}
.project-page.signal-page .page-panel{max-width:960px}
.project-page h1{margin:6px 0 22px}
.project-page .page-panel>h1{max-width:min(100%,22ch);font-size:clamp(38px,5.5vw,68px);line-height:1.08}
.project-kicker{font-size:12px;letter-spacing:.08em;color:var(--gold)}
.project-lede{max-width:65ch;font-size:16px;line-height:1.75;color:var(--text)}
.project-page.signal-page .project-lede{max-width:65ch}
.project-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:48px 0 72px}
.project-stats#stats{grid-template-columns:repeat(2,minmax(0,1fr))}
.project-stats div{border:1px solid #e9c66b2e;background:linear-gradient(180deg,#17130cf2,#0b0a07f2);border-radius:10px;padding:17px 18px}
.project-stats dt{font-size:12px;letter-spacing:.04em;color:var(--muted)}
.project-stats dd{font-family:"Archivo",sans-serif;font-stretch:125%;font-variation-settings:"wdth" 125;font-weight:800;font-size:30px;color:var(--gold-hi);margin-top:5px;letter-spacing:-.01em}
.project-page .project-stats + .project-stack{margin:0 0 88px}
.project-block{margin-bottom:88px}
.block-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px 24px;border-bottom:1px solid var(--rule);padding-bottom:12px;margin-bottom:24px}
.block-head h2{font-family:"Archivo",sans-serif;font-stretch:125%;font-variation-settings:"wdth" 125;font-weight:800;font-size:clamp(20px,2vw,26px);letter-spacing:-.02em}
.block-head p{color:var(--muted);font-size:14px}
.controls{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-bottom:16px}
.seg{display:inline-flex;flex-wrap:wrap;padding:3px;border:1px solid #2c271c;border-radius:12px;background:#0b0a07}
.seg button,.chips button{font:inherit;font-size:13px;letter-spacing:.03em;color:var(--muted);background:none;border:0;border-radius:9px;padding:9px 12px;cursor:pointer;transition:color .12s,background .12s}
.seg button:hover,.chips button:hover{color:var(--text)}
.seg button[aria-pressed="true"]{color:#120f08;background:linear-gradient(180deg,var(--gold-hi),var(--gold) 45%,var(--gold-lo))}
.chips{display:inline-flex;flex-wrap:wrap;gap:6px}
.chips button{border:1px solid #2c271c}
.chips button[aria-pressed="true"]{color:var(--gold-hi);border-color:#e9c66b80;background:#e9c66b14}
.select{font-size:13px;color:var(--muted);display:inline-flex;align-items:center;gap:8px}
.select select,.search input{font:inherit;font-size:13px;color:var(--text);background:#0b0a07;border:1px solid #2c271c;border-radius:9px;padding:8px 11px}
.search{margin-left:auto}
.search input{width:220px}
.search input:focus,.select select:focus{outline:2px solid var(--gold);outline-offset:1px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.filter-note{font-size:12.5px;color:var(--muted);margin:8px 0 18px}
.bars{list-style:none;display:grid;gap:4px}
.bars li button{width:100%;display:grid;grid-template-columns:minmax(150px,220px) 1fr 70px 64px;gap:14px;align-items:center;font:inherit;font-size:13px;color:var(--text);text-align:left;background:none;border:1px solid transparent;border-radius:8px;padding:9px 10px;cursor:pointer}
.bars li button:hover{border-color:#2c271c;background:#e9c66b08}
.bars li button[aria-pressed="true"]{border-color:#e9c66b66;background:#e9c66b10}
.bar-track{height:10px;background:#16130e;border-radius:3px;overflow:hidden}
.bar-fill{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,var(--gold-lo),var(--gold) 70%,var(--gold-hi));box-shadow:0 0 12px #e9c66b40;transition:width .45s cubic-bezier(.23,1,.32,1)}
.bar-val{text-align:right;color:var(--gold-hi);font-variant-numeric:tabular-nums}
.bar-n{text-align:right;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}
.bars .empty{color:var(--muted);font-size:12px;padding:12px}
.trend{display:flex;align-items:flex-end;gap:6px;height:180px;padding:0 2px;border-bottom:1px solid var(--rule)}
.trend span{flex:1;position:relative;min-width:6px;border-radius:3px 3px 0 0;background:linear-gradient(180deg,var(--gold-hi),var(--gold-lo));opacity:.85;transition:height .45s cubic-bezier(.23,1,.32,1)}
.trend span::after{content:attr(data-v);position:absolute;bottom:100%;left:50%;transform:translateX(-50%);font-size:10px;color:var(--muted);padding-bottom:3px;white-space:nowrap}
.trend-axis{display:flex;gap:6px;margin-top:6px}
.trend-axis span{flex:1;text-align:center;font-size:9px;color:var(--muted);letter-spacing:.04em}
.findings{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.findings li{border:1px solid var(--rule);border-radius:10px;padding:16px;background:#0a0907}
.findings b{display:block;font-family:"Archivo",sans-serif;font-stretch:125%;font-variation-settings:"wdth" 125;font-weight:800;font-size:24px;color:var(--gold-hi);margin-bottom:6px}
.findings span{color:var(--text-2);font-size:14px;line-height:1.7}
.method{list-style:none;counter-reset:m;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.method li{counter-increment:m;border-top:1px solid #e9c66b55;padding-top:12px}
.method li::before{content:"0" counter(m);display:block;color:#f3ecd840;font-size:28px;line-height:1;margin-bottom:8px}
.method b{display:block;color:var(--gold-hi);font-weight:500;margin-bottom:4px}
.method span{color:var(--text-2);font-size:14px;line-height:1.65}
.fine{margin-top:26px;max-width:80ch;color:var(--muted);font-size:12px;line-height:1.65}
.project-page .personal-footer a{color:var(--muted)}
@media(max-width:700px){.project-top{margin-bottom:36px}.project-page .page-panel{padding-bottom:60px}.project-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:36px 0 64px}.project-stats div{padding:14px}.project-stats#stats{grid-template-columns:repeat(2,minmax(0,1fr))}.project-page .project-stats + .project-stack{margin:0 0 68px}.project-block{margin-bottom:68px}.block-head{margin-bottom:20px}.search{margin-left:0;width:100%}.search input{width:100%}.bars li button{grid-template-columns:1fr 54px;row-gap:6px}.bar-track{grid-column:1 / -1;grid-row:2}.bar-n{display:none}.trend{height:140px;gap:3px}.trend span::after{display:none}.personal-footer{padding-bottom:24px}}
.bars li button{grid-template-columns:minmax(150px,220px) 1fr 70px 84px}
.bar-n{white-space:nowrap}
.trend-axis span{min-width:0;overflow:hidden;white-space:nowrap}
@media(max-width:560px){.project-stats#stats{grid-template-columns:1fr}}
@media(max-width:700px){.bars li button{grid-template-columns:1fr 54px}.trend-axis span{font-size:8px}.trend-axis span:nth-child(even){visibility:hidden}}
@media(prefers-reduced-motion:reduce){.project-reveal,.project-reveal.project-revealed{opacity:1;transform:none;transition:none}}
/* Static bar rows (non-interactive) */
.bar-row{display:grid;grid-template-columns:minmax(150px,240px) 1fr 70px 110px;gap:14px;align-items:center;font-size:12px;padding:7px 10px}
.bars.compact .bar-row{grid-template-columns:minmax(110px,160px) 1fr 44px;padding:4px 0;gap:10px}
.bars.compact .bar-n{display:none}
.funnel .bar-row{padding:10px}
.funnel .bar-track{height:14px}
.mini-title{font-size:11px;font-weight:400;letter-spacing:.08em;color:var(--muted);margin-bottom:8px}
.split{display:grid;grid-template-columns:1fr 1fr;gap:32px;margin:6px 0 26px}
.search.wide{margin-left:0;width:100%}
.search.wide input{width:100%;padding:11px 14px;font-size:13px}
.table-wrap{overflow-x:auto;border:1px solid var(--rule);border-radius:10px}
.data-table{width:100%;border-collapse:collapse;font-size:12px}
.data-table th{text-align:left;font-weight:400;color:var(--muted);font-size:10.5px;letter-spacing:.08em;padding:10px 12px;border-bottom:1px solid var(--rule);background:#0b0a07;position:sticky;top:0}
.data-table th button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:0;letter-spacing:inherit}
.data-table th button:hover,.data-table th button[aria-sort="ascending"],.data-table th button[aria-sort="descending"]{color:var(--gold)}
.data-table th button[aria-sort="ascending"]::after{content:" ↑"}
.data-table th button[aria-sort="descending"]::after{content:" ↓"}
.data-table td{padding:10px 12px;border-bottom:1px solid #f3ecd80d;vertical-align:top}
.data-table tbody tr:hover{background:#e9c66b08}
.data-table .co{display:block;color:var(--text)}
.data-table .dom{display:block;color:var(--muted);font-size:10.5px}
.data-table .num{text-align:right;font-variant-numeric:tabular-nums}
.data-table .empty{color:var(--muted);text-align:center;padding:24px}
.tier{font-size:10px;letter-spacing:.06em;padding:3px 8px;border-radius:20px;border:1px solid #2c271c;color:var(--text-2);white-space:nowrap}
.tier.bullseye{color:#120f08;border-color:transparent;background:linear-gradient(180deg,var(--gold-hi),var(--gold-lo))}
.yes{color:var(--gold-hi)}.no{color:var(--muted)}
.svc{display:flex;flex-wrap:wrap;gap:4px}
.svc i{font-style:normal;font-size:10px;color:var(--text-2);border:1px solid #f3ecd81a;border-radius:5px;padding:2px 6px}
.pager{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:14px;font-size:11px;color:var(--muted)}
.pager button{font:inherit;color:var(--text);background:#0b0a07;border:1px solid #2c271c;border-radius:9px;padding:7px 12px;cursor:pointer}
.pager button:disabled{opacity:.35;cursor:default}
@media(max-width:700px){.split{grid-template-columns:1fr;gap:18px}.bar-row{grid-template-columns:1fr 54px}.bar-row .bar-track{grid-column:1 / -1;grid-row:2}.bar-row .bar-n{display:none}.hide-sm{display:none}.data-table td,.data-table th{padding:8px}}
/* Post wall behind the project header */
.project-page .page-panel{position:relative}
.post-wall{position:absolute;z-index:-1;top:-120px;left:-40px;right:-40px;height:900px;display:grid;grid-template-columns:repeat(5,1fr);gap:16px;overflow:hidden;pointer-events:none;opacity:.5;
  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 18%,#000 55%,transparent 100%),linear-gradient(90deg,#0006 0,#000 35%,#000 100%);mask-image:linear-gradient(180deg,transparent 0,#000 18%,#000 55%,transparent 100%);filter:blur(.6px)}
.post-wall::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#000 0,#000c 30%,#0006 60%,#0003 100%)}
.pw-col{display:flex;flex-direction:column;gap:16px;animation:pw-drift var(--d) linear infinite;animation-delay:var(--o)}
.pw-col:nth-child(even){animation-direction:reverse}
@keyframes pw-drift{from{transform:translateY(0)}to{transform:translateY(-50%)}}
.pc{border:1px solid #f3ecd81f;border-radius:12px;background:linear-gradient(180deg,#14120e,#0a0907);padding:14px;display:flex;flex-direction:column;gap:12px}
.pc header{display:flex;align-items:center;gap:10px}
.pc-av{width:30px;height:30px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#e9c66b88,#5e4720);flex:none}
.pc-meta{display:flex;flex-direction:column;gap:5px;flex:1}
.pc-meta b,.pc-meta s{display:block;height:6px;border-radius:3px;background:#f3ecd82e}
.pc-meta b{width:60%}.pc-meta s{width:38%;background:#f3ecd81a}
.pc em{font-style:normal;font-size:9px;letter-spacing:.08em;color:var(--gold);border:1px solid #e9c66b44;border-radius:10px;padding:2px 7px}
.pc-lines{display:flex;flex-direction:column;gap:7px}
.pc-lines i{display:block;height:6px;border-radius:3px;background:#f3ecd824}
.pc-lines i:nth-child(3n){width:82%}.pc-lines i:nth-child(4n){width:64%}.pc-lines i:last-child{width:45%}
.pc-media{display:block;aspect-ratio:4/3;border-radius:8px;background:radial-gradient(#e9c66b55 1.2px,transparent 1.6px) 0 0/6px 6px,linear-gradient(135deg,#3a2c12,#0d0b07)}
.pc-media.video{aspect-ratio:16/9;background:radial-gradient(circle,#f3ecd855 0 12px,transparent 13px),radial-gradient(#e9c66b44 1.2px,transparent 1.6px) 0 0/6px 6px,linear-gradient(135deg,#2a2010,#0d0b07)}
.pc-media.carousel{aspect-ratio:1;box-shadow:8px 0 0 -2px #1c1810,16px 0 0 -4px #14110b}
.pc footer{display:flex;flex-wrap:wrap;gap:6px 12px;font-size:9.5px;color:var(--muted)}
.pc footer span:first-child{color:var(--gold-hi)}
.pc-type{margin-left:auto;color:var(--text-2)}
@media(max-width:700px){.post-wall{grid-template-columns:repeat(2,1fr);left:-16px;right:-16px;opacity:.35}}
@media(prefers-reduced-motion:reduce){.pw-col{animation:none}}
.post-wall{height:640px;-webkit-mask-image:linear-gradient(180deg,transparent 0,#000 16%,#000 50%,transparent 92%);mask-image:linear-gradient(180deg,transparent 0,#000 16%,#000 50%,transparent 92%)}
.project-stats div{background:linear-gradient(180deg,#17130cf2,#0b0a07f2);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
/* Event funnel stages */
.stage-list{list-style:none;display:grid;gap:10px}
.stage{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,320px);grid-template-areas:"bar head" "bar note";column-gap:20px;align-items:center;padding:14px;border:1px solid var(--rule);border-radius:10px;background:#0a0907;outline:none;transition:border-color .2s,background .2s}
.stage:hover,.stage:focus-visible{border-color:#e9c66b66;background:#e9c66b0a}
.stage-bar{grid-area:bar;height:18px;background:#16130e;border-radius:4px;overflow:hidden}
.stage-bar span{display:block;height:100%;width:0;border-radius:4px;background:linear-gradient(90deg,var(--gold-lo),var(--gold) 70%,var(--gold-hi));box-shadow:0 0 14px #e9c66b40;transition:width 1s cubic-bezier(.23,1,.32,1) calc(var(--i) * 160ms)}
.stage-list.is-in .stage-bar span{width:var(--w)}
.stage-head{grid-area:head;display:flex;align-items:baseline;gap:10px}
.stage-head b{font-family:"Archivo",sans-serif;font-stretch:125%;font-variation-settings:"wdth" 125;font-weight:800;font-size:24px;color:var(--gold-hi)}
.stage-head span{font-size:12px;color:var(--text-2)}
.stage-note{grid-area:note;font-size:11.5px;color:var(--muted);max-height:0;overflow:hidden;opacity:0;transition:max-height .3s,opacity .3s,margin .3s}
.stage:hover .stage-note,.stage:focus-visible .stage-note{max-height:80px;opacity:1;margin-top:6px}
@media(max-width:700px){.stage{grid-template-columns:1fr;grid-template-areas:"head" "bar" "note";row-gap:8px}.stage-note{max-height:none;opacity:1}}
/* Market map globe, behind the hero on the right */
.globe-wrap{position:absolute;top:-70px;right:-60px;width:min(640px,52vw);aspect-ratio:1;z-index:0}
.globe-wrap canvas{width:100%;height:100%;display:block;cursor:grab;touch-action:none}
.globe-tip{position:absolute;pointer-events:none;font-size:11px;color:#120f08;background:linear-gradient(180deg,var(--gold-hi),var(--gold));border-radius:6px;padding:4px 8px;white-space:nowrap;box-shadow:0 4px 14px #0008}
.globe-cap{position:absolute;bottom:6%;left:0;right:0;text-align:center;font-size:10px;letter-spacing:.08em;color:var(--muted)}
.project-page .page-panel>.project-kicker,.project-page .page-panel>h1,.project-page .page-panel>.project-lede,.project-page .page-panel>.project-stats{position:relative;z-index:1}
.project-page .page-panel>h1,.project-page .page-panel>.project-lede{max-width:min(64ch,58%)}
@media(max-width:900px){.globe-wrap{position:relative;top:0;right:0;width:min(420px,100%);margin:0 auto 8px}.project-page .page-panel>h1,.project-page .page-panel>.project-lede{max-width:none}}
/* Locked explorer */
.is-locked{opacity:.45;filter:saturate(.4)}
.is-locked input,.is-locked select,.is-locked button{cursor:not-allowed}
.search.is-locked{position:relative}
.search.is-locked .lock-ico{position:absolute;right:14px;top:50%;transform:translateY(-50%);font-size:13px}
.locked-table{position:relative;max-height:520px;overflow:hidden}
.locked-table tbody tr:nth-child(n+3){filter:blur(3px);opacity:.6}
.locked-table tbody tr:nth-child(n+5){filter:blur(5px);opacity:.35}
.lock-veil{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;padding-bottom:40px;background:linear-gradient(180deg,transparent 0,transparent 28%,#000c 62%,#000 100%)}
.lock-card{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:22px 28px;border:1px solid #e9c66b55;border-radius:14px;background:linear-gradient(180deg,#17130ce6,#0b0a07f2);box-shadow:0 0 40px #e9c66b22;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.lock-big{font-size:26px;filter:sepia(1) saturate(3) hue-rotate(-10deg)}
.lock-card b{font-family:"Archivo",sans-serif;font-stretch:125%;font-variation-settings:"wdth" 125;font-weight:800;font-size:18px;color:var(--text)}
.lock-card span{font-size:11.5px;color:var(--muted)}
.lock-cta{margin-top:6px;font-size:12px;text-decoration:none;color:#120f08;padding:9px 14px;border-radius:9px;background:linear-gradient(180deg,var(--gold-hi),var(--gold) 45%,var(--gold-lo))}
.pager .is-locked{opacity:.5}
.method.with-tools li{display:flex;flex-direction:column}
.tool{display:inline-flex;align-items:center;gap:8px;margin-top:14px;align-self:flex-start;font-size:11px;letter-spacing:.06em;color:var(--gold-hi);border:1px solid #e9c66b44;background:#e9c66b0d;border-radius:20px;padding:6px 12px 6px 9px}
.tool svg{width:16px;height:16px;color:var(--gold)}
.project-stack{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:-48px 0 72px;position:relative;z-index:1}
.project-page .signal-stack{margin:24px 0 72px}
.project-stack>span{font-size:10px;letter-spacing:.1em;color:var(--gold)}
.project-stack .stack{margin:0}
.stack li{display:inline-flex;align-items:center;gap:6px}
.tool .tool-mark{width:14px;height:14px;flex:0 0 14px;object-fit:contain;border-radius:2px}
