/* Layout: app shell — left sidebar, centre feed, right social panel; white by default with a dark mode like the mockups */
:root{
  --pink:#FF3D8B; --pink-2:#FF7AB0; --pink-soft:#FFE6F0;
  --blue:#2A6BFF; --blue-soft:#E6EEFF;
  --bg:#F5F7FC; --panel:#FFFFFF; --card:#FFFFFF; --line:#E7EAF3;
  --fg:#111733; --muted:#646C88; --chip:#F0F2F8;
  --online:#22C55E;
  --grad:linear-gradient(120deg,var(--blue),#8B5CF6 50%,var(--pink));
  --display:"Bricolage Grotesque",system-ui,sans-serif;
  --body:"Figtree",system-ui,sans-serif;
  --r:20px; --shadow:0 16px 40px -22px rgba(17,23,51,.35);
  color-scheme:light;
}
:root[data-theme="dark"]{
  --bg:#0B0F1E; --panel:#10152A; --card:#151B33; --line:#232B48;
  --fg:#F3F5FF; --muted:#98A0BF; --chip:#1D2440; --pink-soft:#3A1630; --blue-soft:#16224A;
  --shadow:0 18px 44px -20px rgba(0,0,0,.7);
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{margin:0}
body{font-family:var(--body);background:var(--bg);color:var(--fg);font-size:15px;line-height:1.5;transition:background .4s,color .4s;overflow-x:hidden}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font-family:inherit;color:inherit}
h1,h2,h3{font-family:var(--display);margin:0;letter-spacing:-.02em;line-height:1.1;text-wrap:balance}
p{margin:0}
:focus-visible{outline:3px solid var(--pink);outline-offset:2px}

/* Aurora backdrop */
.aurora{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none}
.aurora i{position:absolute;width:520px;height:520px;border-radius:50%;filter:blur(110px);opacity:.18;animation:float 18s ease-in-out infinite alternate}
.aurora i:nth-child(1){background:var(--pink);left:-160px;bottom:-200px}
.aurora i:nth-child(2){background:var(--blue);right:-160px;top:-200px;animation-delay:-6s}
@keyframes float{to{transform:translate(60px,-40px) scale(1.15)}}

/* Shell */
.app{display:grid;grid-template-columns:260px 1fr 330px;min-height:100vh}
.app.no-right{grid-template-columns:260px 1fr}
.sidebar{position:sticky;top:0;height:100vh;background:var(--panel);border-right:1px solid var(--line);padding:22px 16px;display:flex;flex-direction:column;gap:26px}
.logo{display:flex;align-items:center;gap:10px;font-family:var(--display);font-weight:800;font-size:1.6rem;padding:0 8px}
.logo svg{width:38px;height:38px;animation:beat 2.4s ease-in-out infinite}
@keyframes beat{0%,100%{transform:scale(1)}10%{transform:scale(1.12)}20%{transform:scale(1)}30%{transform:scale(1.08)}}
.menu{display:flex;flex-direction:column;gap:6px}
.menu a{display:flex;align-items:center;gap:14px;padding:12px 14px;border-radius:14px;font-weight:600;color:var(--muted);transition:background .25s,color .25s,transform .25s;position:relative}
.menu a svg{width:22px;height:22px;flex:none}
.menu a:hover{background:var(--chip);color:var(--fg);transform:translateX(4px)}
.menu a.active{background:var(--pink-soft);color:var(--pink)}
.menu a.active::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:3px;background:var(--pink)}
.badge{margin-left:auto;background:var(--chip);color:var(--fg);font-size:.75rem;font-weight:700;min-width:26px;height:24px;border-radius:12px;display:grid;place-items:center;padding:0 7px}
.menu a.active .badge,.badge.hot{background:var(--pink);color:#fff}
.promo{margin-top:auto;border-radius:20px;padding:20px;background:var(--grad);background-size:200% 200%;animation:sheen 8s ease infinite;color:#fff;display:flex;flex-direction:column;gap:10px;position:relative;overflow:hidden}
.promo::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.25) 50%,transparent 70%);transform:translateX(-100%);animation:shine 4s ease-in-out infinite}
@keyframes shine{60%,100%{transform:translateX(100%)}}
@keyframes sheen{50%{background-position:100% 50%}}
.promo h3{font-size:1.15rem}
.promo p{font-size:.88rem;opacity:.92}
.promo .btn{background:#fff;color:var(--pink);justify-content:center;position:relative;z-index:1}

.main{min-width:0;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:16px;padding:14px 28px;background:color-mix(in srgb,var(--bg) 85%,transparent);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
.search{flex:1;max-width:520px;display:flex;align-items:center;gap:10px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:10px 14px;transition:border-color .25s,box-shadow .25s}
.search:focus-within{border-color:var(--pink);box-shadow:0 0 0 4px var(--pink-soft)}
.search svg{width:18px;height:18px;color:var(--muted);flex:none}
.search input{border:0;outline:0;background:transparent;font:inherit;color:var(--fg);width:100%;min-width:0}
.top-actions{margin-left:auto;display:flex;align-items:center;gap:12px}
.icon-btn{width:42px;height:42px;border-radius:12px;border:1px solid var(--line);background:var(--panel);display:grid;place-items:center;cursor:pointer;position:relative;transition:transform .2s,border-color .2s}
.icon-btn:hover{transform:translateY(-2px);border-color:var(--pink)}
.icon-btn svg{width:20px;height:20px}
.icon-btn .dot{position:absolute;top:-4px;right:-4px;background:var(--pink);color:#fff;font-size:.68rem;font-weight:800;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;animation:ping 2s infinite}
@keyframes ping{0%{box-shadow:0 0 0 0 rgba(255,61,139,.6)}80%,100%{box-shadow:0 0 0 10px rgba(255,61,139,0)}}
.me{width:42px;height:42px;border-radius:50%;object-fit:cover;border:2px solid var(--pink)}
.burger{display:none}

.content{padding:28px;display:flex;flex-direction:column;gap:24px}
.head-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px}
.head-row h1{font-size:clamp(1.7rem,3vw,2.3rem)}
.head-row p{color:var(--muted);margin-top:6px}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{border:1px solid var(--line);background:var(--panel);border-radius:999px;padding:8px 16px;font-weight:600;cursor:pointer;transition:all .25s;font-size:.9rem}
.chip:hover{border-color:var(--pink);color:var(--pink)}
.chip.active{background:var(--pink);border-color:var(--pink);color:#fff;box-shadow:0 10px 24px -10px var(--pink)}

/* Profile cards */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:20px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow);transition:transform .35s cubic-bezier(.2,.8,.2,1),box-shadow .35s,opacity .5s;animation:cardIn .7s cubic-bezier(.2,.8,.2,1) both;animation-delay:calc(var(--i,0) * 70ms)}
@keyframes cardIn{from{opacity:0;transform:translateY(30px) scale(.96)}}
.card:hover{transform:translateY(-8px)}
.card.gone-left{transform:translateX(-120%) rotate(-18deg);opacity:0}
.card.gone-right{transform:translateX(120%) rotate(18deg);opacity:0}
.card.hide{display:none}
.photo{position:relative;aspect-ratio:4/4.6;overflow:hidden;background:var(--grad)}
.photo img{width:100%;height:100%;object-fit:cover;transition:transform .7s}
.card:hover .photo img{transform:scale(1.08)}
.photo::after{content:"";position:absolute;inset:auto 0 0 0;height:55%;background:linear-gradient(to top,rgba(5,8,20,.85),transparent)}
.status{position:absolute;top:12px;left:12px;z-index:1;background:rgba(10,14,30,.55);backdrop-filter:blur(6px);color:#fff;font-size:.78rem;font-weight:600;padding:5px 10px;border-radius:999px;display:flex;align-items:center;gap:6px}
.status::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--online);box-shadow:0 0 0 0 rgba(34,197,94,.7);animation:on 1.8s infinite}
.status.away::before{background:#F59E0B;animation:none}
@keyframes on{70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}}
.price-tag{position:absolute;top:12px;right:12px;z-index:1;background:var(--pink);color:#fff;font-size:.78rem;font-weight:800;padding:5px 10px;border-radius:999px}
.name{position:absolute;left:14px;right:14px;bottom:12px;z-index:1;color:#fff}
.name h3{font-size:1.25rem;display:flex;align-items:center;gap:6px}
.tick{width:18px;height:18px;flex:none}
.name small{display:flex;align-items:center;gap:5px;opacity:.85;font-size:.82rem;margin-top:3px}
.card-body{padding:14px;display:flex;flex-direction:column;gap:12px;flex:1}
.bio{color:var(--muted);font-size:.9rem}
.tags{display:flex;flex-wrap:wrap;gap:6px}
.tags span{background:var(--chip);border-radius:999px;padding:4px 10px;font-size:.76rem;font-weight:600}
.actions{display:flex;gap:10px;margin-top:auto}
.pass,.like{height:44px;border-radius:14px;border:0;cursor:pointer;font-weight:700;display:flex;align-items:center;justify-content:center;gap:8px;transition:transform .2s,background .25s,box-shadow .25s}
.pass{width:52px;background:var(--chip)}
.pass:hover{transform:rotate(90deg);background:var(--line)}
.like{flex:1;background:var(--pink);color:#fff;box-shadow:0 10px 22px -12px var(--pink)}
.like:hover{transform:scale(1.04)}
.like.on{background:var(--blue);box-shadow:0 10px 22px -12px var(--blue)}
.like svg,.pass svg{width:18px;height:18px}
.burst{position:fixed;pointer-events:none;z-index:200;color:var(--pink);font-size:20px;animation:burst 1s ease-out forwards}
@keyframes burst{to{transform:translate(var(--x),var(--y)) scale(.4);opacity:0}}

/* Right panel */
.right{position:sticky;top:0;height:100vh;overflow-y:auto;background:var(--panel);border-left:1px solid var(--line);padding:24px 20px;display:flex;flex-direction:column;gap:26px}
.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.panel-head h3{font-size:1.15rem}
.panel-head a{color:var(--pink);font-weight:600;font-size:.88rem}
.rings{display:flex;gap:12px;overflow-x:auto;padding:4px 2px 6px;scrollbar-width:none}
.ring{flex:none;display:flex;flex-direction:column;align-items:center;gap:6px;font-size:.82rem;font-weight:600}
.ring span{width:66px;height:66px;border-radius:50%;padding:3px;background:conic-gradient(var(--pink),var(--blue),var(--pink));animation:rot 6s linear infinite;display:block}
.ring img{width:100%;height:100%;border-radius:50%;object-fit:cover;border:3px solid var(--panel);animation:rot 6s linear infinite reverse}
@keyframes rot{to{transform:rotate(360deg)}}
.msgs{display:flex;flex-direction:column}
.msg{display:flex;gap:12px;align-items:center;padding:12px 8px;border-radius:14px;transition:background .2s}
.msg:hover{background:var(--chip)}
.msg img{width:50px;height:50px;border-radius:50%;object-fit:cover;flex:none}
.msg div{min-width:0;flex:1}
.msg b{display:block}
.msg p{color:var(--muted);font-size:.86rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msg aside{display:flex;flex-direction:column;align-items:flex-end;gap:6px;font-size:.75rem;color:var(--muted)}
.msg aside i{font-style:normal;background:var(--pink);color:#fff;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font-weight:800}
.online-row{display:flex;gap:10px;flex-wrap:wrap}
.online-row span{position:relative}
.online-row img{width:50px;height:50px;border-radius:50%;object-fit:cover}
.online-row span::after{content:"";position:absolute;right:1px;bottom:1px;width:13px;height:13px;border-radius:50%;background:var(--online);border:2px solid var(--panel)}
.cta-box{border-radius:20px;padding:20px;border:1px solid var(--line);background:linear-gradient(160deg,var(--pink-soft),var(--blue-soft));display:flex;flex-direction:column;gap:10px}
.cta-box h3{color:var(--pink);font-style:italic}

.btn{display:inline-flex;align-items:center;gap:8px;border:0;border-radius:14px;padding:12px 18px;font-weight:700;cursor:pointer;transition:transform .2s,box-shadow .25s;font-size:.95rem}
.btn:hover{transform:translateY(-2px)}
.btn-pink{background:var(--pink);color:#fff;box-shadow:0 12px 26px -12px var(--pink)}
.btn-blue{background:var(--blue);color:#fff;box-shadow:0 12px 26px -12px var(--blue)}
.btn-line{background:var(--panel);border:1px solid var(--line)}
.btn-line:hover{border-color:var(--pink);color:var(--pink)}

/* Theme switch */
.switch{width:58px;height:32px;border-radius:999px;border:1px solid var(--line);background:var(--chip);position:relative;cursor:pointer;flex:none}
.switch::after{content:"☀";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;color:#F59E0B;display:grid;place-items:center;font-size:.8rem;transition:transform .35s cubic-bezier(.5,1.6,.4,1)}
:root[data-theme="dark"] .switch::after{content:"☾";transform:translateX(26px);background:var(--pink);color:#fff}

/* Messages page */
.chat{display:grid;grid-template-columns:320px 1fr;height:calc(100vh - 71px);min-height:0}
.chat-list{border-right:1px solid var(--line);overflow-y:auto;padding:16px;background:var(--panel)}
.chat-list .msg{cursor:pointer}
.chat-list .msg.active{background:var(--pink-soft)}
.thread{display:flex;flex-direction:column;min-width:0;min-height:0}
.thread-head{display:flex;align-items:center;gap:12px;padding:14px 22px;border-bottom:1px solid var(--line);background:var(--panel)}
.thread-head img{width:46px;height:46px;border-radius:50%;object-fit:cover}
.thread-head small{color:var(--online);font-weight:600}
.thread-head .btn{margin-left:auto}
.bubbles{flex:1;overflow-y:auto;padding:24px;display:flex;flex-direction:column;gap:10px}
.b{max-width:min(70%,420px);padding:11px 15px;border-radius:18px;animation:pop .4s cubic-bezier(.3,1.5,.5,1) both}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.9)}}
.b.them{background:var(--card);border:1px solid var(--line);border-bottom-left-radius:6px;align-self:flex-start}
.b.mine{background:var(--grad);color:#fff;border-bottom-right-radius:6px;align-self:flex-end}
.b.locked{padding:0;overflow:hidden;width:240px}
.b.locked img{filter:blur(14px);transform:scale(1.2);height:180px;width:100%;object-fit:cover}
.b.locked div{padding:10px 14px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.typing{align-self:flex-start;display:flex;gap:5px;padding:14px 16px;background:var(--card);border:1px solid var(--line);border-radius:18px}
.typing i{width:7px;height:7px;border-radius:50%;background:var(--muted);animation:dot 1.2s infinite}
.typing i:nth-child(2){animation-delay:.15s}.typing i:nth-child(3){animation-delay:.3s}
@keyframes dot{30%{transform:translateY(-6px);opacity:.4}}
.composer{display:flex;gap:10px;padding:14px 22px;border-top:1px solid var(--line);background:var(--panel)}
.composer input{flex:1;min-width:0;border:1px solid var(--line);border-radius:14px;padding:12px 16px;font:inherit;background:var(--bg);color:var(--fg)}
.composer input:focus{outline:none;border-color:var(--pink)}

/* Profile page */
.cover{height:240px;border-radius:24px;overflow:hidden;position:relative;background:var(--grad)}
.cover img{width:100%;height:100%;object-fit:cover;object-position:center 20%;filter:blur(18px) saturate(1.3);transform:scale(1.3);opacity:.85;animation:kb 20s ease-in-out infinite alternate}
.cover::after{content:"Bondi Beach · Sunrise sessions";position:absolute;right:20px;bottom:16px;color:#fff;font-weight:700;background:rgba(10,14,30,.4);padding:6px 12px;border-radius:999px;backdrop-filter:blur(6px)}
@keyframes kb{to{transform:scale(1.45)}}
.pro-head{display:flex;gap:22px;align-items:flex-end;margin-top:-70px;padding:0 24px;flex-wrap:wrap;position:relative}
.pro-avatar{width:140px;height:140px;border-radius:50%;object-fit:cover;border:5px solid var(--bg);box-shadow:var(--shadow)}
.pro-info{flex:1;min-width:220px;padding-bottom:6px}
.pro-info h1{font-size:2rem;display:flex;align-items:center;gap:8px}
.pro-info p{color:var(--muted)}
.pro-stats{display:flex;gap:28px;padding:0 24px;flex-wrap:wrap}
.pro-stats div b{display:block;font-family:var(--display);font-size:1.5rem;font-variant-numeric:tabular-nums}
.pro-stats div span{color:var(--muted);font-size:.85rem}
.tiers{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.tier{border:1px solid var(--line);background:var(--card);border-radius:20px;padding:20px;display:flex;flex-direction:column;gap:10px;cursor:pointer;transition:transform .25s,border-color .25s}
.tier:hover{transform:translateY(-4px);border-color:var(--pink)}
.tier.sel{border:2px solid var(--pink);background:var(--pink-soft)}
.tier b{font-family:var(--display);font-size:1.6rem}
.tier small{color:var(--muted)}
.posts{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.post{position:relative;aspect-ratio:1;border-radius:16px;overflow:hidden;background:var(--grad)}
.post img{width:100%;height:100%;object-fit:cover;transition:transform .5s}
.post:hover img{transform:scale(1.08)}
.post.lock img{filter:blur(16px);transform:scale(1.2)}
.post.lock::after{content:"🔒  Subscribe to unlock";position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-weight:700;background:rgba(10,14,30,.35);text-align:center;padding:10px}
.tabs-line{display:flex;gap:24px;border-bottom:1px solid var(--line)}
.tabs-line button{background:none;border:0;padding:12px 2px;font-weight:700;color:var(--muted);cursor:pointer;border-bottom:3px solid transparent;font-size:.95rem}
.tabs-line button.active{color:var(--pink);border-color:var(--pink)}

/* Join page */
.join{display:grid;grid-template-columns:1.1fr 1fr;min-height:100vh}
.collage{position:relative;overflow:hidden;background:var(--grad);display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding:12px}
.collage .col{display:flex;flex-direction:column;gap:12px;animation:up 40s linear infinite}
.collage .col:nth-child(2){animation-direction:reverse}
.collage img{border-radius:18px;aspect-ratio:3/4;object-fit:cover;width:100%}
@keyframes up{to{transform:translateY(-50%)}}
.collage .over{position:absolute;inset:auto 0 0 0;padding:40px 36px;background:linear-gradient(to top,rgba(5,8,20,.9),transparent);color:#fff;display:flex;flex-direction:column;gap:10px}
.collage .over h2{font-size:clamp(1.8rem,3vw,2.6rem)}
.join-main{display:flex;align-items:center;justify-content:center;padding:40px 20px;background:var(--panel)}
.join-card{width:min(420px,100%);display:flex;flex-direction:column;gap:18px}
.seg{display:grid;grid-template-columns:1fr 1fr;background:var(--chip);border-radius:14px;padding:4px;position:relative}
.seg button{position:relative;z-index:1;border:0;background:none;padding:11px;font-weight:700;cursor:pointer;color:var(--muted);transition:color .3s}
.seg button.active{color:#fff}
.seg .pill{position:absolute;top:4px;bottom:4px;left:4px;width:calc(50% - 4px);border-radius:11px;background:var(--pink);transition:transform .4s cubic-bezier(.6,.2,.2,1)}
.seg.second .pill{transform:translateX(100%);background:var(--blue)}
.roles{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.roles input{position:absolute;opacity:0}
.roles label{border:2px solid var(--line);border-radius:14px;padding:12px;cursor:pointer;display:flex;flex-direction:column;transition:.25s}
.roles label small{color:var(--muted)}
.roles input:checked+label{border-color:var(--pink);background:var(--pink-soft)}
.roles input:focus-visible+label{outline:3px solid var(--pink)}
.field{display:flex;flex-direction:column;gap:6px;font-weight:600;font-size:.9rem}
.field input{border:1px solid var(--line);border-radius:12px;padding:12px 14px;font:inherit;font-weight:400;background:var(--bg);color:var(--fg)}
.field input:focus{outline:none;border-color:var(--pink);box-shadow:0 0 0 4px var(--pink-soft)}
.form{display:flex;flex-direction:column;gap:14px}
.form .btn{justify-content:center}
.fine{font-size:.84rem;color:var(--muted);text-align:center}

.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,160%);background:var(--fg);color:var(--bg);padding:12px 20px;border-radius:14px;font-weight:600;z-index:300;transition:transform .5s cubic-bezier(.3,1.4,.5,1);max-width:calc(100% - 32px)}
.toast.show{transform:translate(-50%,0)}
.empty{color:var(--muted);text-align:center;padding:40px 0}

/* Responsive */
@media (max-width:1250px){.app{grid-template-columns:240px 1fr}.right{display:none}}
@media (max-width:860px){
  .app,.app.no-right{grid-template-columns:1fr}
  .sidebar{position:fixed;inset:0 auto 0 0;width:270px;z-index:60;transform:translateX(-100%);transition:transform .35s}
  .app.menu-open .sidebar{transform:none;box-shadow:20px 0 60px rgba(0,0,0,.3)}
  .burger{display:grid}
  .topbar,.content{padding-inline:16px}
  .chat{grid-template-columns:1fr}
  .chat-list{display:none}
  .tiers,.posts{grid-template-columns:1fr 1fr}
  .join{grid-template-columns:1fr}
  .collage{height:340px}
}
@media (max-width:520px){.grid{grid-template-columns:1fr 1fr;gap:12px}.card-body{padding:10px}.tags{display:none}.tiers{grid-template-columns:1fr}.top-actions .icon-btn.hide-sm{display:none}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
