:root{--bg:#050003;--red:#e8133b;--red2:#b80f2e;--card:#12060a;--line:#2a0f16;--txt:#fff;--mut:#a8979c}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;min-height:100%;background:var(--bg);color:var(--txt);font-family:system-ui,-apple-system,"Segoe UI",Tahoma,Arial,sans-serif}
body{min-height:100vh;min-height:100dvh;overflow-x:hidden;position:relative}
a{color:inherit}
button{font-family:inherit}

/* hearts */
.hearts{--h:340px;position:absolute;top:0;left:0;right:0;height:340px;overflow:hidden;pointer-events:none;z-index:1}
.heart{position:absolute;bottom:-30px;color:var(--red);opacity:0;animation:rise linear infinite;line-height:0}
.heart svg{display:block;width:100%;height:100%;fill:currentColor}
@keyframes rise{0%{transform:translateY(0) scale(.7);opacity:0}15%{opacity:.7}100%{transform:translateY(calc(var(--h) * -1)) scale(1.1) rotate(var(--r,10deg));opacity:0}}

/* landing (login) */
.landing{position:relative;max-width:480px;min-height:100vh;min-height:100dvh;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-end;overflow:hidden}
.landing .photo{position:absolute;top:0;left:0;right:0;height:66vh;height:66dvh;z-index:0}
.landing .photo img{width:100%;height:100%;object-fit:cover;object-position:center top;display:block}
.landing .photo::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,#050003 0%,rgba(5,0,3,.94) 16%,rgba(5,0,3,.7) 36%,rgba(5,0,3,.3) 62%,rgba(5,0,3,.05) 85%,rgba(5,0,3,0) 100%)}
.landing .hearts{height:66dvh;--h:66dvh}
.landing .content{position:relative;z-index:2;padding:0 24px calc(44px + env(safe-area-inset-bottom));text-align:center}
.landing .title{font-size:38px;font-weight:800;margin:0 0 8px;letter-spacing:.5px}
.landing .sub{color:var(--mut);margin:0 0 28px;font-size:15px}
#gwrap{display:flex;justify-content:center;min-height:52px}
.gbtn{display:flex;align-items:center;justify-content:center;gap:12px;background:#fff;color:#1f1f1f;border:1px solid #e6e6e6;border-radius:12px;padding:0 20px;font-size:16px;font-weight:600;height:52px;cursor:pointer;width:100%;max-width:340px;transition:background .15s,transform .1s}
.gbtn:hover{background:#f4f4f4}
.gbtn:active{transform:scale(.985)}
.gbtn svg{width:20px;height:20px;flex:none}
.note{color:var(--mut);font-size:13px;margin-top:16px;min-height:18px}

/* shared */
.center{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:24px;position:relative;z-index:2}
.title{font-size:34px;font-weight:800;margin:0 0 6px}
.sub{color:var(--mut);margin:0 0 26px;font-size:15px}
.closed-ico{width:64px;height:64px;color:var(--red);margin-bottom:14px}
.closed-ico svg{width:100%;height:100%}
.closed h1{font-size:28px;margin:6px 0}

/* profile */
.pic{position:relative;width:min(72vw,300px);aspect-ratio:1;border-radius:50%;margin:0 auto}
.pic img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block;border:2px solid var(--red)}
.wrap{position:relative;z-index:2;max-width:560px;margin:0 auto;padding:0 18px 40px}
.topbar{position:absolute;top:0;left:0;right:0;z-index:5;display:flex;justify-content:space-between;padding:14px;direction:ltr}
.iconbtn{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:rgba(18,6,10,.75);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
.iconbtn svg{width:22px;height:22px}
.iconbtn:active{transform:scale(.94)}
.hero{position:relative;padding-top:78px;text-align:center}
.hero .pic{width:min(46vw,190px)}
.hero .title{font-size:28px;margin:22px 0 6px}
.bio{color:var(--mut);margin:0 auto 18px;max-width:420px;font-size:15px;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.sub-btn{display:inline-block;background:var(--red);color:#fff;border:0;border-radius:12px;padding:14px 30px;font-size:17px;font-weight:700;min-height:52px;cursor:pointer;width:100%;max-width:340px}
.sub-btn:active{transform:scale(.985)}
.section{margin-top:34px}
.section h2{font-size:18px;margin:0 0 14px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.empty{grid-column:1/-1;text-align:center;color:var(--mut);padding:36px 12px;border:1px dashed var(--line);border-radius:16px;background:rgba(18,6,10,.5)}
.vcard{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px;font-size:14px}
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:50;display:none;align-items:flex-end;justify-content:center}
.overlay.show{display:flex}
.sheet{background:#12060a;border:1px solid var(--line);border-radius:22px 22px 0 0;width:100%;max-width:560px;max-height:92dvh;overflow:auto;padding:20px 18px 28px}
@media(min-width:600px){.overlay{align-items:center}.sheet{border-radius:22px}}
.sheet h3{margin:0 0 16px;font-size:20px}
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;color:var(--mut);margin-bottom:6px}
.field input[type=text],.field textarea{width:100%;background:#0a0306;border:1px solid var(--line);color:#fff;border-radius:12px;padding:13px;font-size:16px;font-family:inherit}
.field textarea{min-height:90px;resize:vertical}
.field input:focus,.field textarea:focus{outline:2px solid var(--red);border-color:transparent}
.avrow{display:flex;align-items:center;gap:14px}
.avrow img{width:64px;height:64px;border-radius:50%;object-fit:cover;border:2px solid var(--red)}
.filebtn{background:#1c0a10;border:1px solid var(--line);color:#fff;border-radius:12px;padding:11px 16px;font-size:14px;cursor:pointer}
.toggle{display:flex;align-items:center;justify-content:space-between;background:#0a0306;border:1px solid var(--line);border-radius:12px;padding:13px}
.toggle b{display:block;font-size:15px}.toggle small{color:var(--mut)}
.sw{position:relative;width:52px;height:30px;flex:none}
.sw input{opacity:0;width:100%;height:100%;position:absolute;margin:0;cursor:pointer;z-index:2}
.sw span{position:absolute;inset:0;background:#3a1a22;border-radius:999px;transition:.2s}
.sw span::after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;background:#fff;border-radius:50%;transition:.2s}
.sw input:checked+span{background:var(--red)}
.sw input:checked+span::after{transform:translateX(22px)}
.actions{display:flex;gap:10px;margin-top:18px}
.btn{flex:1;min-height:48px;border-radius:12px;border:0;font-size:16px;font-weight:700;cursor:pointer}
.btn.p{background:var(--red);color:#fff}
.btn.s{background:#1c0a10;color:#fff;border:1px solid var(--line)}
.btn:disabled{opacity:.6}
.err{color:#ff8a9b;font-size:14px;min-height:18px;margin-top:10px}
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#fff;color:#111;padding:12px 20px;border-radius:999px;font-weight:700;z-index:99;opacity:0;pointer-events:none;transition:.25s;max-width:90vw;text-align:center}
.toast.show{opacity:1}
@media(prefers-reduced-motion:reduce){.heart{animation:none;opacity:.4}}

/* ===== v3: responsive + profile ===== */
.landing{width:100%;max-width:520px;min-height:max(100vh,560px);min-height:max(100dvh,560px)}
.landing .photo{height:clamp(300px,66dvh,680px)}
.landing .hearts{height:clamp(300px,66dvh,680px);--h:clamp(300px,66dvh,680px)}
@media(min-width:700px){body{background:#050003}.landing{box-shadow:0 0 0 1px #1a0a10}}
@media(max-width:340px){.landing .title{font-size:32px}}

.pwrap{position:relative;width:100%;max-width:520px;margin:0 auto;min-height:100vh;min-height:100dvh}
.phero{position:relative;width:100%;aspect-ratio:1/1;overflow:hidden}
.phero img{width:100%;height:100%;object-fit:cover;object-position:center top;display:block}
.phero::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,#050003 0%,rgba(5,0,3,.92) 14%,rgba(5,0,3,.6) 32%,rgba(5,0,3,.2) 58%,rgba(5,0,3,0) 80%);pointer-events:none}
.phero .hearts{inset:0;height:auto;--h:min(70vw,360px);z-index:2}
.ptop{position:absolute;top:0;left:0;right:0;z-index:6;display:flex;justify-content:space-between;padding:calc(14px + env(safe-area-inset-top)) 14px 14px;direction:ltr}
.ptop .iconbtn{background:rgba(5,0,3,.55);border-color:rgba(255,255,255,.12);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.pinfo{position:relative;z-index:3;margin-top:-84px;padding:0 20px 8px;text-align:center}
.pinfo .title{font-size:clamp(26px,8vw,36px);margin:0 0 8px;font-weight:800}
.pinfo .bio{margin:0 auto 20px}
.pbody{position:relative;z-index:3;padding:8px 18px calc(40px + env(safe-area-inset-bottom))}
@media(min-width:480px){.grid{grid-template-columns:repeat(3,1fr)}}
@media(min-width:700px){.pwrap{box-shadow:0 0 0 1px #1a0a10}}
.avrow img{border-radius:12px}

/* ===== v4: custom google button ===== */
.gbtn{position:relative;overflow:hidden;height:56px;max-width:360px;border:0;border-radius:16px;background:linear-gradient(180deg,#ffffff 0%,#f1f1f3 100%);color:#17171a;font-size:16.5px;font-weight:700;letter-spacing:.2px;box-shadow:0 1px 0 rgba(255,255,255,.9) inset,0 10px 28px rgba(0,0,0,.55),0 0 0 1px rgba(255,255,255,.14);transition:transform .12s ease,box-shadow .2s ease,filter .2s ease}
.gbtn:hover{background:linear-gradient(180deg,#ffffff 0%,#ececef 100%);filter:brightness(1.02)}
.gbtn:active{transform:scale(.975);box-shadow:0 1px 0 rgba(255,255,255,.9) inset,0 4px 14px rgba(0,0,0,.5),0 0 0 1px rgba(255,255,255,.14)}
.gbtn:focus-visible{outline:2px solid var(--red);outline-offset:3px}
.gbtn .gico{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:10px;background:#fff;box-shadow:0 0 0 1px rgba(0,0,0,.08);flex:none}
.gbtn .gico svg{width:20px;height:20px}
.gbtn .glabel{flex:1;text-align:center;padding-inline-end:34px}
.gbtn.loading{pointer-events:none;opacity:.8}
.gbtn.loading .glabel::after{content:"";display:inline-block;width:14px;height:14px;margin-inline-start:10px;border:2px solid rgba(0,0,0,.25);border-top-color:#17171a;border-radius:50%;vertical-align:-2px;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.gnative{position:absolute;inset:0;opacity:0.001;overflow:hidden;display:flex;justify-content:center}
.gnative>div{transform:scale(1.6);transform-origin:center}
