/* Public link page */
:root{--bar:color-mix(in srgb,var(--bg) 93%,#fff);--bg:#0b0b0f;--accent:#3b82f6;--surface:rgba(255,255,255,.07);--line:rgba(255,255,255,.1);--text:#fff;--muted:rgba(255,255,255,.62)}
*{box-sizing:border-box;margin:0;padding:0}
html{scrollbar-width:none;-webkit-text-size-adjust:100%}
html::-webkit-scrollbar{display:none}
body{background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,"Segoe UI",sans-serif;min-height:100vh;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}

/* Blurred photo behind the column on wide screens */
.backdrop{position:fixed;inset:-40px;background:center/cover no-repeat;filter:blur(40px) brightness(.45);transform:scale(1.1);z-index:0;display:none}
@media (min-width:640px){.backdrop{display:block}}

.profile{position:relative;z-index:1;width:100%;max-width:566px;margin:0 auto;background:var(--bg);min-height:100vh;overflow:hidden}
@media (min-width:640px){.profile{margin:28px auto;min-height:auto;border-radius:30px;box-shadow:0 30px 80px rgba(0,0,0,.55)}}

/* Hero photo fading into the page */
.hero{position:relative;width:100%;aspect-ratio:1/1;background:#1b1b22;overflow:hidden}
.hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero::after{content:"";position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,0) 45%,var(--bg) 97%)}
.hero.empty{background:linear-gradient(135deg,#2b2745,#131319)}

.details{position:relative;z-index:2;margin-top:-104px;padding:0 16px;text-align:center}
.name{display:flex;align-items:center;justify-content:center;gap:6px;font-size:32px;font-weight:750;letter-spacing:.25px;line-height:1.2}
.name span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.verified{width:21px;height:21px;flex-shrink:0}
.handle{margin-top:2px;color:var(--muted);font-size:16px;font-weight:500}

/* Row of round platform icons */
.socials{display:flex;justify-content:center;flex-wrap:wrap;gap:10px;margin:14px 0 4px}
.social{display:block;border-radius:50%;transition:transform .15s}
.social:hover{transform:scale(1.08)}
.pbadge,.iconbox{display:flex;align-items:center;justify-content:center;border-radius:50%;flex-shrink:0}
.pbadge{width:44px;height:44px}
.pbadge svg{width:22px;height:22px}
.darkbrand{box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.22)}
.generic{background:#2a2a33;color:#fff}

.body{padding:16px 16px 22px}
.followers{text-align:center;font-size:16px;line-height:24px;margin:0 0 14px;color:var(--text)}
.followers strong{font-weight:600;margin-right:3px}

/* Link cards: big = full width, small = two per row */
.cards{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.card{position:relative;display:block;overflow:hidden;border-radius:20px;background:#1c1c24;isolation:isolate;transition:transform .15s}
.card:hover{transform:translateY(-2px)}
.card:active{transform:scale(.985)}
.card.big{grid-column:1/-1;aspect-ratio:1.55/1}
.card.small{aspect-ratio:1/1.04}
.card.noimg{background:linear-gradient(145deg,#26263a,#16161d);border:1px solid var(--line)}
.card .cover{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
.card::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to top,rgba(0,0,0,.72) 0%,rgba(0,0,0,.18) 38%,rgba(0,0,0,0) 60%)}
.card .label{position:absolute;left:10px;right:10px;bottom:10px;display:flex;align-items:center;gap:8px;color:#fff;font-weight:600;font-size:15px;line-height:1.25;text-shadow:0 1px 6px rgba(0,0,0,.5)}
.card.big .label{left:14px;bottom:14px;font-size:18px;gap:10px}
.card .text{overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.iconbox{width:30px;height:30px;box-shadow:0 2px 8px rgba(0,0,0,.35)}
.iconbox svg{width:16px;height:16px}
.card.big .iconbox{width:38px;height:38px}
.card.big .iconbox svg{width:20px;height:20px}
/* Icon in the top corner, like the original page */
.card .corner{position:absolute;top:10px;left:10px;z-index:1}
.card.big .corner{top:14px;left:14px}
.card:has(.corner)::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to bottom,rgba(0,0,0,.28) 0%,rgba(0,0,0,0) 30%);pointer-events:none}

/* Sideways photo strip */
.gallery{position:relative;margin:18px -16px 0}
.gallery::before{content:"";position:absolute;left:0;top:0;bottom:0;width:32px;background:linear-gradient(to right,var(--bg),transparent);z-index:1;pointer-events:none}
.gallery::after{content:"";position:absolute;right:0;top:0;bottom:0;width:32px;background:linear-gradient(to left,var(--bg),transparent);z-index:1;pointer-events:none}
.strip{display:flex;gap:12px;overflow-x:auto;padding:0 16px 4px;scroll-snap-type:x mandatory;scrollbar-width:none}
.strip::-webkit-scrollbar{display:none}
.thumb{flex-shrink:0;width:calc((100% - 56px)/3);min-width:88px;max-width:136px;aspect-ratio:1/1;scroll-snap-align:start}
.thumb img{width:100%;height:100%;object-fit:cover;border-radius:16px;display:block}

/* Tap a photo to see it full size (no JavaScript needed) */
.lightbox{display:none;position:fixed;inset:0;z-index:50;background:rgba(0,0,0,.9);align-items:center;justify-content:center;padding:20px;cursor:zoom-out}
.lightbox:target{display:flex}
.lightbox img{max-width:100%;max-height:100%;border-radius:12px;object-fit:contain}

.contact{display:flex;align-items:center;gap:12px;margin-top:18px;padding:16px;border-radius:16px;background:var(--surface);box-shadow:0 1px 3px rgba(0,0,0,.2);font-size:15px;word-break:break-all}
.contact svg{width:24px;height:24px;flex-shrink:0}
.contact:hover{background:rgba(255,255,255,.1)}

.foot{margin-top:22px;text-align:center;font-size:12px;color:var(--muted);opacity:.7}

/* Info buttons (e.g. "back to instagram"): same box as the email, icon on the left, text centred */
.infobtn{position:relative;justify-content:center;min-height:56px;padding:14px 52px;font-weight:600;text-align:center}
.infobtn .pbadge{position:absolute;left:14px;top:50%;transform:translateY(-50%)}
.pbadge.mini{width:28px;height:28px}
.pbadge.mini svg{width:15px;height:15px}
.infobtn+.contact,.contact+.infobtn{margin-top:10px}

/* 18+ card: normal until tapped, then the warning appears on the card itself */
.card.adult{cursor:pointer}
.card.adult .tap{position:absolute;inset:0;z-index:2}
.card.adult .cover{transition:filter .25s ease,transform .25s ease}
.mature{position:absolute;inset:0;z-index:3;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:12px;text-align:center;color:#fff;background:rgba(0,0,0,.35);opacity:0;visibility:hidden;transition:opacity .22s ease,visibility .22s}
.mature .eye{width:26px;height:26px;margin-bottom:2px}
.mature strong{font-size:13px;font-weight:600}
.mature p{font-size:12px;opacity:.9;max-width:62%;margin-bottom:8px;line-height:1.35}
.mature .continue{background:#fff;color:#000;font-weight:700;font-size:14px;border-radius:999px;padding:11px 28px;min-width:60%}
.mature .continue:active{transform:scale(.96)}
.card.small .mature p{max-width:92%;font-size:11px}
.card.small .mature strong{font-size:12px}
.card.small .mature .continue{padding:9px 14px;font-size:13px;min-width:0}
/* Revealed state (added by page.js on tap; :target works even without JavaScript) */
.card.adult.show .mature,.card.adult:target .mature{opacity:1;visibility:visible}
.card.adult.show .cover,.card.adult:target .cover{filter:blur(22px) brightness(.75);transform:scale(1.15)}
.card.adult.show .label,.card.adult:target .label,.card.adult.show .corner,.card.adult:target .corner{opacity:0}
.card.adult.show .tap,.card.adult:target .tap{display:none}
.card.adult.show:hover,.card.adult:target:hover{transform:none}

/* "Tap ••• then open in browser" screen for iPhone in-app browsers */
.extgate{display:none;position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.88);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);align-items:flex-start;justify-content:center;padding:130px 20px 20px}
.extgate:target{display:flex}
.extgate .arrow{position:absolute;top:10px;right:14px;width:110px;height:110px;animation:nudge 1.2s ease-in-out infinite}
@keyframes nudge{50%{transform:translate(4px,-4px)}}
.extbox{max-width:340px;text-align:center;color:#fff}
.extbox h2{font-size:22px;margin-bottom:10px}
.extbox p{font-size:16px;line-height:1.5}
.extbox .dots{display:inline-block;background:rgba(255,255,255,.18);border-radius:8px;padding:0 8px;font-weight:700;letter-spacing:1px}
.extbox .small{font-size:13px;opacity:.7;margin:10px 0 26px}
.extbox .anyway{display:block;background:#fff;color:#000;font-weight:700;border-radius:999px;padding:13px}
.extbox .close{display:block;margin-top:14px;font-size:14px;opacity:.7}

/* Your own uploaded logos */
.custom{overflow:hidden}
.custom img{width:100%;height:100%;object-fit:cover;display:block}
.custom.fit img{width:62%;height:62%;object-fit:contain}

/* ---------- Scroll effects ---------- */
/* Photo fades into the background colour as you scroll */
.hero-shade{position:absolute;inset:0;background:var(--bg);opacity:0;z-index:1;pointer-events:none}

.details{z-index:3}

/* Small photo + name bar that appears at the top */
.minibar{position:fixed;top:0;left:0;right:0;z-index:40;display:flex;justify-content:center;opacity:0;pointer-events:none;transition:opacity .12s linear}
/* Solid bar, photo + name on the left (like link.me's top header) */
.minibar-inner{width:100%;max-width:566px;height:50px;display:flex;align-items:center;justify-content:flex-start;gap:8px;padding:0 16px;background:var(--bar);line-height:24px}
.mb-photo{width:32px;height:32px;border-radius:50%;overflow:hidden;flex-shrink:0}
.mb-photo img{width:100%;height:100%;object-fit:cover;display:block}
.mb-name{display:flex;align-items:center;gap:4px;min-width:0;font-size:16px;font-weight:700;line-height:1.2;text-transform:capitalize}
.mb-name span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.minibar .verified{width:13px;height:13px;flex-shrink:0}


/* Cards zoom and fade in as they come on screen (set by page.js) */
.card,.contact{will-change:transform,opacity;backface-visibility:hidden;transform-origin:center}

/* ---------- Cards with the logo baked into the photo ---------- */
/* Sizes are relative to the card's width so the text lines up with the drawn logo */
.card.baked{container-type:inline-size}
.card.baked::after{display:none}   /* the shading is drawn into the image, under the logo */
.card.baked.small .label{left:6cqw;bottom:6cqw;right:6cqw;min-height:16cqw}
.card.baked.small.pos-bottom .label{left:calc(6cqw + 16cqw + 4cqw)}
.card.baked.big .label{left:3.6cqw;bottom:3.6cqw;right:3.6cqw;min-height:9.2cqw}
.card.baked.big.pos-bottom .label{left:calc(3.6cqw + 9.2cqw + 2.4cqw)}
/* Hide the top name bar while a popup is open */
body:has(.extgate:target) .minibar{opacity:0!important;pointer-events:none!important}

/* Bio under the name */
.bio{width:calc(100% - 7.47vw);max-width:420px;margin:14px auto 0;white-space:pre-wrap;word-break:break-word;font-size:16px;line-height:1.4;color:var(--text);text-align:center}
.socials+.bio{margin-top:12px}
