:root{
  --ink:#f6eef2; --muted:#c9b6c4; --line:rgba(255,255,255,.13);
  --a1:#f1cf95; --a2:#f3a6bf; --btn-ink:#2b0f1d;
  --page-bg:#140c1d; --bg-dim:0; --bg-blur:0px;
  --chat-bg:transparent; --bme:#c4527f; --bme-ink:#fff; --bhim:#3a2b45; --bhim-ink:#fff;
  --paper:#fbf5ec; --paper-ink:#3a2a2f;
  --serif:'Cormorant Garamond',Georgia,'Times New Roman',serif;
  --sans:'Manrope',system-ui,-apple-system,'Segoe UI',sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%}
body{background:#140c1d;color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;min-height:100vh;overflow-x:hidden}
main{position:relative;z-index:1;min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:24px 16px calc(24px + env(safe-area-inset-bottom))}
[hidden]{display:none!important}

/* фон */
.bgl{position:fixed;inset:-30px;z-index:0;background:var(--page-bg);filter:blur(var(--bg-blur));transition:background .4s}
.bgdim{position:fixed;inset:0;z-index:0;background:rgba(10,5,14,var(--bg-dim));pointer-events:none}
.fx{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.fx .tw{position:absolute;width:3px;height:3px;border-radius:50%;background:#fff;opacity:0;animation:tw 6s infinite ease-in-out}
@keyframes tw{0%,100%{opacity:0}50%{opacity:.85}}
.fx .fall{position:absolute;top:-40px;color:var(--a2);animation-name:fall,sway;animation-timing-function:linear,ease-in-out;animation-iteration-count:infinite;will-change:transform}
.fx .fall.snow,.fx .fall.sparkles{color:#fff}
@keyframes fall{to{top:calc(100% + 40px)}}
@keyframes sway{0%,100%{transform:translateX(-14px) rotate(-12deg)}50%{transform:translateX(14px) rotate(12deg)}}
@media (prefers-reduced-motion:reduce){.fx{display:none}}

/* окно */
.win{position:relative;width:100%;max-width:480px;padding:34px 30px;border-radius:22px;
  background:linear-gradient(160deg,rgba(255,255,255,.1),rgba(255,255,255,.035));border:1px solid var(--line);
  box-shadow:0 30px 80px rgba(0,0,0,.45),inset 0 1px 0 rgba(255,255,255,.08);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.win.in{animation:rise .55s cubic-bezier(.2,.8,.2,1)}
@keyframes rise{from{opacity:0;transform:translateY(18px) scale(.985)}to{opacity:1;transform:none}}
.win.bare{background:none;border:0;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;padding:0}
.win.center{text-align:center}
.eyebrow{font-size:.72em;letter-spacing:.22em;text-transform:uppercase;color:var(--a2);font-weight:700;margin-bottom:10px}
h1,h2{font-family:var(--serif);font-weight:600;line-height:1.08;margin:0 0 12px}
h1{font-size:2.6em}h2{font-size:2em}
.muted{color:var(--muted);line-height:1.55;margin:0 0 22px}
.stack{display:flex;flex-direction:column;gap:12px}
.row{display:flex;gap:10px;flex-wrap:wrap}.row.end{justify-content:flex-end}.row.center{justify-content:center}
.grow{flex:1;min-width:0}

input,textarea{width:100%;font:inherit;color:var(--ink);background:rgba(0,0,0,.25);border:1px solid var(--line);
  border-radius:14px;padding:14px 16px;outline:none;transition:border-color .2s,box-shadow .2s}
input:focus,textarea:focus{border-color:var(--a2);box-shadow:0 0 0 4px color-mix(in srgb,var(--a2) 18%,transparent)}
input::placeholder,textarea::placeholder{color:#9c8796}

.btn{position:relative;font:inherit;font-weight:700;cursor:pointer;border:0;border-radius:14px;padding:14px 22px;color:var(--btn-ink);
  background:linear-gradient(135deg,var(--a1),var(--a2));box-shadow:0 10px 30px color-mix(in srgb,var(--a2) 30%,transparent);transition:transform .15s,box-shadow .2s,opacity .2s}
.btn:hover{transform:translateY(-1px)}
.btn:active{transform:translateY(1px)}
.btn:disabled{opacity:.55;cursor:default;transform:none}
.btn.ghost{background:rgba(255,255,255,.08);color:var(--ink);box-shadow:none;border:1px solid var(--line)}
.badge{position:absolute;top:-8px;right:-8px;min-width:24px;height:24px;padding:0 7px;border-radius:12px;background:#ff4d6d;color:#fff;font-size:13px;line-height:24px;box-shadow:0 0 0 3px #1a0f20;animation:pop .3s}
.link{background:none;border:0;color:var(--muted);font:inherit;font-size:.85em;margin-top:18px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.back{background:none;border:0;color:var(--muted);font:inherit;cursor:pointer;padding:0;margin-bottom:14px}
.err{color:#ffb0b8;min-height:1.4em;margin-top:12px;font-size:.92em}
.shake{animation:shake .4s}
@keyframes shake{20%,60%{transform:translateX(-7px)}40%,80%{transform:translateX(7px)}}

/* вопросы */
.dots{display:flex;gap:6px;margin:0 0 18px}
.dots span{height:4px;flex:1;border-radius:4px;background:rgba(255,255,255,.12)}
.dots span.on{background:linear-gradient(90deg,var(--a1),var(--a2))}
#q-text{margin-bottom:22px}
.choices{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.choice{font:inherit;font-size:1.1em;font-weight:600;cursor:pointer;padding:18px;border-radius:16px;color:var(--ink);
  background:rgba(255,255,255,.06);border:1px solid var(--line);transition:all .18s}
.choice:hover{background:color-mix(in srgb,var(--a2) 15%,transparent);border-color:var(--a2)}
.hint{margin-top:14px;padding:14px 16px;border-radius:14px;background:color-mix(in srgb,var(--a1) 10%,transparent);border:1px dashed color-mix(in srgb,var(--a1) 55%,transparent);color:var(--a1);line-height:1.5}
.hint b{display:block;font-size:.72em;letter-spacing:.18em;text-transform:uppercase;margin-bottom:4px}

/* открытка */
.postcard{perspective:1600px;width:100%}
.pc-inner{position:relative;width:100%;min-height:420px;transition:transform 1s cubic-bezier(.3,.9,.3,1);transform-style:preserve-3d}
.postcard.open .pc-inner{transform:rotateY(180deg)}
.pc-face{position:absolute;inset:0;border-radius:inherit;backface-visibility:hidden;-webkit-backface-visibility:hidden;
  display:flex;flex-direction:column;align-items:center;justify-content:center;padding:34px 30px;text-align:center}
.pc-front{font:inherit;color:#fff;cursor:pointer;border:0;width:100%;
  background:radial-gradient(circle at 30% 20%,rgba(255,255,255,.25),transparent 45%),linear-gradient(145deg,#c85a85,#7d2c5c 60%,#4a1940);
  box-shadow:0 30px 70px rgba(0,0,0,.5),inset 0 0 0 10px rgba(255,255,255,.06),inset 0 0 0 11px rgba(255,255,255,.18)}
.pc-front:hover .seal{transform:scale(1.08) rotate(-6deg)}
.pc-stamp{position:absolute;top:22px;right:24px;width:54px;height:64px;border:2px dashed rgba(255,255,255,.55);display:grid;place-items:center;font-size:22px;color:var(--a1)}
.pc-front .pc-title{font-family:var(--serif);font-size:2.1em;font-weight:600;margin:22px 0 8px}
.pc-tap{font-size:.85em;opacity:.8;animation:pulse 2s infinite}
@keyframes pulse{50%{opacity:.4}}
.pc-back{transform:rotateY(180deg);background:var(--paper);color:var(--paper-ink);justify-content:flex-start;overflow:auto;
  box-shadow:0 30px 70px rgba(0,0,0,.5);background-image:repeating-linear-gradient(transparent 0 31px,rgba(122,80,90,.12) 31px 32px)}
.pc-back .pc-title{font-family:var(--serif);font-size:1.9em;font-weight:700;color:#8a2f57;margin:6px 0 14px}
.pc-text{font-family:var(--serif);font-size:1.25em;line-height:1.6;white-space:pre-wrap;flex:1;width:100%}
.pc-back .btn{margin-top:22px}
.seal{display:inline-grid;place-items:center;width:64px;height:64px;border-radius:50%;font-size:26px;color:#fff;
  background:radial-gradient(circle at 35% 30%,#e8667f,#a3203f 70%);box-shadow:0 6px 18px rgba(0,0,0,.35),inset 0 -3px 6px rgba(0,0,0,.25);transition:transform .3s}
.seal.big{width:84px;height:84px;font-size:32px}
.seal.static{margin:0 auto 18px}

/* конверт */
.envelope{position:relative;display:block;width:240px;height:160px;margin:26px auto 28px;border:0;padding:0;cursor:pointer;background:none}
.env-body{position:absolute;inset:0;border-radius:10px;background:linear-gradient(160deg,#f6e7d6,#e7cfb7);box-shadow:0 20px 50px rgba(0,0,0,.45)}
.env-body::before{content:"";position:absolute;inset:0;border-radius:10px;background:linear-gradient(to top right,transparent 49.5%,rgba(0,0,0,.08) 50%,transparent 50.5%),linear-gradient(to top left,transparent 49.5%,rgba(0,0,0,.08) 50%,transparent 50.5%)}
.env-flap{position:absolute;left:0;right:0;top:0;height:90px;z-index:2;background:linear-gradient(#ecd6be,#dcbf9f);clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;transition:transform .6s}
.envelope .seal{position:absolute;left:50%;top:62px;transform:translateX(-50%);z-index:3}
.envelope:hover .env-flap{transform:rotateX(25deg)}
.envelope.opening .env-flap{transform:rotateX(180deg)}
.envelope.opening .seal{opacity:0;transition:opacity .3s}

/* письмо */
.win.paper{background:var(--paper);color:var(--paper-ink);border:0;backdrop-filter:none;-webkit-backdrop-filter:none;padding:48px 44px}
.letter-title{color:#8a2f57;text-align:center;margin-bottom:26px}
.letter{font-family:var(--serif);font-size:1.22em;line-height:1.75}
.letter h1,.letter h2,.letter h3{color:#8a2f57}
.letter p{margin:0 0 1em}
.letter img{max-width:100%;border-radius:10px}
.letter a{color:#a3335f}
.letter blockquote{margin:1em 0;padding:.2em 1em;border-left:3px solid #d6a2b6;color:#6b4a55;font-style:italic}
.win.paper .btn{margin-top:20px}
.readbar{position:fixed;left:0;top:0;height:3px;width:0;z-index:20;background:linear-gradient(90deg,var(--a1),var(--a2));transition:width .15s}

/* контакты */
.ct{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:16px;background:rgba(255,255,255,.06);border:1px solid var(--line);color:var(--ink);text-decoration:none;transition:all .18s}
.ct:hover{border-color:var(--a2);transform:translateX(3px)}
.ct .ci{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;font-size:20px;background:rgba(255,255,255,.08);flex:none}
.ct b{display:block}.ct small{color:var(--muted);word-break:break-all}

/* чат */
.win.chat{padding:0;display:flex;flex-direction:column;overflow:hidden;height:min(640px,calc(100dvh - 48px))}
.chat-head{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line);background:rgba(0,0,0,.22);position:relative;z-index:2}
.chat-head .back{margin:0;font-size:1.3em;padding:4px 8px}
.ava{position:relative;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--a2),#7d2c5c);flex:none}
.online{position:absolute;right:0;bottom:0;width:12px;height:12px;border-radius:50%;background:#4ade80;box-shadow:0 0 0 2px #24162c}
.chat-title{font-weight:700}.chat-sub{font-size:.78em;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chat-sub.typing{color:var(--a2)}
.msgs{flex:1;overflow-y:auto;padding:14px 16px;display:flex;flex-direction:column;gap:6px;background:var(--chat-bg);overscroll-behavior:contain}
.empty{margin:auto;color:var(--muted);text-align:center;font-size:.92em;background:rgba(0,0,0,.25);padding:10px 16px;border-radius:14px}
.day{align-self:center;font-size:.75em;color:#fff;background:rgba(0,0,0,.3);padding:4px 12px;border-radius:12px;margin:8px 0;backdrop-filter:blur(6px)}
.mw{display:flex;align-items:flex-end;gap:6px;max-width:82%}
.mw.me{align-self:flex-end;flex-direction:row-reverse}
.mw.him{align-self:flex-start}
.m{position:relative;padding:8px 12px 6px;border-radius:18px;line-height:1.45;word-wrap:break-word;overflow-wrap:anywhere;animation:pop .25s;min-width:64px;user-select:text;-webkit-user-select:text;-webkit-touch-callout:none}
@keyframes pop{from{opacity:0;transform:translateY(6px) scale(.97)}}
.mw.me .m{background:var(--bme);color:var(--bme-ink);border-bottom-right-radius:6px}
.mw.him .m{background:var(--bhim);color:var(--bhim-ink);border-bottom-left-radius:6px}
.m .tx{white-space:pre-wrap}
.m .meta{display:flex;gap:4px;justify-content:flex-end;align-items:center;font-size:.7em;opacity:.75;margin-top:2px}
.tick{font-weight:700;letter-spacing:-3px;padding-right:3px}
.tick.read{color:#8fe3ff;opacity:1}
.m img,.m video{display:block;max-width:100%;max-height:340px;border-radius:12px;margin-bottom:4px;background:#0003}
.m video.round{width:220px;height:220px;max-height:none;border-radius:50%;object-fit:cover}
.m audio{width:250px;max-width:100%;display:block;margin-bottom:2px}
.m .file{display:flex;align-items:center;gap:8px;color:inherit;text-decoration:none;font-weight:600}
.m.media-only{background:none!important;padding:0}
.m.media-only .meta{position:absolute;right:8px;bottom:8px;background:rgba(0,0,0,.45);color:#fff;padding:1px 7px;border-radius:10px;opacity:1}
.m.sticker .meta{position:static;width:fit-content;margin-left:auto}
.stk{width:160px;height:160px;display:grid;place-items:center;font-size:90px;line-height:1}
.stk img,.stk video{width:100%;height:100%;object-fit:contain;background:none!important;border-radius:0;max-height:none;margin:0}
.reacts{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}
.reacts span{display:inline-flex;align-items:center;gap:3px;font-size:.92em;padding:1px 8px;border-radius:12px;background:rgba(0,0,0,.22);animation:pop .3s}
.reacts span.mine{background:rgba(255,255,255,.28);box-shadow:inset 0 0 0 1px rgba(255,255,255,.5);cursor:pointer}
.reacts small{font-size:.7em;opacity:.8}
.m.sticker .reacts,.m.media-only .reacts{margin-top:4px}
.rbtn{flex:none;width:30px;height:30px;border-radius:50%;border:0;background:rgba(0,0,0,.3);color:#fff;cursor:pointer;opacity:0;transition:opacity .15s;font-size:15px}
.mw:hover .rbtn{opacity:.9}
@media (pointer:coarse){.rbtn{display:none}}
.m.pending{opacity:.85}
.bar{height:4px;border-radius:4px;background:rgba(255,255,255,.2);overflow:hidden;margin-top:6px}.bar i{display:block;height:100%;width:0;background:#fff;transition:width .2s}
.picker{position:fixed;z-index:35;display:flex;gap:2px;padding:6px;border-radius:26px;background:#2b1d35;border:1px solid var(--line);box-shadow:0 12px 40px #000a;animation:pop .18s;flex-wrap:wrap;max-width:300px;justify-content:center}
.picker button{width:38px;height:38px;border:0;border-radius:50%;background:none;font-size:22px;cursor:pointer;transition:transform .12s}
.picker button:hover{transform:scale(1.25);background:rgba(255,255,255,.08)}
.picker button.on{background:rgba(255,255,255,.16)}

.composer{display:flex;align-items:flex-end;gap:4px;padding:8px 10px;border-top:1px solid var(--line);background:rgba(0,0,0,.25);position:relative;z-index:2}
.composer textarea{resize:none;max-height:140px;padding:11px 14px;border-radius:20px;line-height:1.35}
.ic{flex:none;width:42px;height:42px;border-radius:50%;border:0;background:transparent;color:var(--muted);cursor:pointer;display:grid;place-items:center;transition:all .15s}
.ic:hover,.ic.on{color:var(--ink);background:rgba(255,255,255,.08)}
.ic svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.ic.send{background:linear-gradient(135deg,var(--a1),var(--a2));color:var(--btn-ink)}
.ic.send svg{fill:currentColor;stroke:none}
.panel{border-top:1px solid var(--line);background:rgba(20,12,26,.92);height:250px;display:flex;flex-direction:column;position:relative;z-index:2}
.tabs{display:flex;gap:4px;padding:6px 8px 0}
.tabs button{font:inherit;font-size:.85em;font-weight:600;border:0;background:none;color:var(--muted);padding:6px 12px;border-radius:10px;cursor:pointer}
.tabs button.on{background:rgba(255,255,255,.1);color:var(--ink)}
.grid{flex:1;overflow-y:auto;padding:8px;display:grid;gap:2px;align-content:start}
.grid.emoji{grid-template-columns:repeat(auto-fill,minmax(40px,1fr))}
.grid.emoji button{font-size:24px;height:42px;border:0;background:none;border-radius:10px;cursor:pointer}
.grid.emoji button:hover{background:rgba(255,255,255,.08)}
.grid.stickers{grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:6px}
.grid.stickers button{height:84px;border:0;background:none;border-radius:12px;cursor:pointer;padding:4px;display:grid;place-items:center;font-size:44px}
.grid.stickers button:hover{background:rgba(255,255,255,.08)}
.grid.stickers img,.grid.stickers video,.grid.stickers .lot{width:100%;height:100%;object-fit:contain;pointer-events:none}
.grid .none{grid-column:1/-1;color:var(--muted);text-align:center;padding:30px 10px;font-size:.9em}

/* запись */
.rec{position:fixed;inset:0;z-index:30;display:grid;place-items:center;background:rgba(10,5,14,.85);backdrop-filter:blur(8px)}
.rec-box{text-align:center;padding:20px}
.rec-video{width:min(300px,78vw);height:min(300px,78vw);border-radius:50%;object-fit:cover;transform:scaleX(-1);box-shadow:0 0 0 4px var(--a2),0 20px 60px #000a;background:#000}
.rec-mic{width:120px;height:120px;margin:0 auto;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,var(--a2),#7d2c5c);animation:beat 1.2s infinite}
.rec-mic svg{width:50px;height:50px;fill:none;stroke:#fff;stroke-width:1.8;stroke-linecap:round}
@keyframes beat{50%{box-shadow:0 0 0 18px rgba(255,255,255,.12)}}
.rec-time{font-size:1.4em;font-weight:700;margin:22px 0;display:flex;gap:10px;align-items:center;justify-content:center}
.rec-time .dot{width:10px;height:10px;border-radius:50%;background:#ff4d6d;animation:pulse 1s infinite}

.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:40;background:#2b1533;border:1px solid var(--line);padding:12px 18px;border-radius:12px;box-shadow:0 10px 40px #0008;max-width:calc(100% - 32px)}

@media (max-width:520px){
  h1{font-size:2.15em}h2{font-size:1.7em}
  .win{padding:28px 20px}
  .win.paper{padding:34px 22px}
  .win.chat{height:calc(100dvh - 24px)}
  main{padding:12px 12px calc(12px + env(safe-area-inset-bottom))}
  .mw{max-width:90%}
  .ic{width:38px;height:38px}
  .composer{padding:6px}
}


