/* Parea — стили. Перенесено из design/mockup.html без правок.
   Палитры и переменные живут в tokens.css. */

  *{box-sizing:border-box}
  html,body{margin:0;padding:0}
  body{
    background:var(--bg); color:var(--ink); font-family:var(--sans);
    font-size:16px; line-height:1.55; -webkit-font-smoothing:antialiased;
    transition:background .3s ease, color .3s ease; position:relative; overflow-x:hidden;
  }
  /* праздничное свечение фона */
  body::before{
    content:"";position:fixed;inset:-20% -10% auto -10%;height:70vh;z-index:0;pointer-events:none;
    background:
      radial-gradient(42vw 34vh at 18% 8%, var(--glow-1) 0%, transparent 62%),
      radial-gradient(38vw 30vh at 82% 2%, var(--glow-2) 0%, transparent 60%),
      radial-gradient(34vw 26vh at 52% 26%, var(--glow-3) 0%, transparent 64%);
    opacity:.85; filter:blur(6px); transition:opacity .3s ease;
  }
  [data-theme="dark"] body::before{opacity:.55}
  button{font:inherit;cursor:pointer}
  input{font:inherit}

  /* ---------- гирлянда ---------- */
  .garland{position:fixed;top:0;left:0;width:100%;height:34px;z-index:55;pointer-events:none}
  .garland svg{width:100%;height:100%;display:block}
  /* Светлая тема — флажки на золотом шнуре. Тёмная — лампочки, и провод
     уходит в тень, чтобы не спорить со свечением. */
  .wire{stroke:var(--gold);stroke-width:1.6;opacity:.55}
  [data-theme="dark"] .wire{stroke:var(--border-2);stroke-width:1.4;opacity:.9}

  /* ---------- переключатель макета ---------- */
  .chrome{
    position:sticky; top:0; z-index:60; display:flex; gap:10px; align-items:center;
    padding:16px 18px 10px; background:color-mix(in srgb, var(--bg) 82%, transparent);
    backdrop-filter:blur(12px); border-bottom:1px solid var(--border); flex-wrap:wrap;
  }
  .chrome .label{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
  .seg{display:flex;background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:3px;gap:2px;box-shadow:var(--shadow)}
  .seg button{border:0;background:transparent;color:var(--muted);padding:6px 14px;border-radius:999px;font-size:13.5px;font-weight:600;transition:all .18s ease}
  .seg button:hover{color:var(--ink)}
  .seg button[aria-selected="true"]{background:linear-gradient(135deg,var(--accent),var(--plum));color:#fff}
  .icon-btn{
    margin-left:auto;display:inline-flex;align-items:center;gap:7px;border:1px solid var(--border);
    background:var(--surface);color:var(--ink-2);border-radius:999px;padding:7px 14px;font-size:13.5px;font-weight:600;transition:all .18s ease
  }
  .icon-btn:hover{border-color:var(--border-2);color:var(--ink)}
  .icon-btn svg{width:16px;height:16px}

  .sm{display:none}
  .stage{max-width:1080px;margin:0 auto;padding:0 24px 140px;position:relative;z-index:1}
  .screen{display:none;animation:fade .3s ease}
  .screen.on{display:block}
  @keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

  /* ---------- шапка ---------- */
  .hero{padding:52px 0 34px;text-align:center;position:relative}
  .ava-wrap{position:relative;width:96px;margin:0 auto 20px}
  .ava{
    width:96px;height:96px;border-radius:50%;display:grid;place-items:center;
    background:conic-gradient(from 210deg,var(--gold),var(--accent),var(--plum),var(--fir),var(--gold));
    color:#fff;font-family:var(--display);font-size:38px;
    box-shadow:0 10px 30px -10px rgba(224,51,95,.55); position:relative
  }
  .ava::after{content:"";position:absolute;inset:5px;border-radius:50%;background:var(--surface);}
  .ava span{position:relative;z-index:1;background:linear-gradient(135deg,var(--accent),var(--plum));-webkit-background-clip:text;background-clip:text;color:transparent}
  .spark{position:absolute;color:var(--gold);animation:tw 2.6s ease-in-out infinite}
  .spark svg{width:100%;height:100%;display:block}
  .spark.a{width:22px;height:22px;top:-6px;right:-10px}
  .spark.b{width:15px;height:15px;bottom:2px;left:-14px;animation-delay:.9s}
  .spark.c{width:12px;height:12px;top:26px;right:-20px;animation-delay:1.7s;color:var(--accent)}
  @keyframes tw{0%,100%{opacity:.35;transform:scale(.8) rotate(0)}50%{opacity:1;transform:scale(1.15) rotate(20deg)}}

  .hero h1{font-family:var(--display);font-weight:400;font-size:clamp(32px,4.8vw,48px);line-height:1.12;margin:0 0 12px;letter-spacing:-.01em}
  .hero h1 em{font-style:normal;background:linear-gradient(120deg,var(--accent),var(--plum) 55%,var(--gold));-webkit-background-clip:text;background-clip:text;color:transparent}
  .hero p{margin:0 auto;max-width:46ch;color:var(--ink-2);font-size:16.5px;opacity:.85}
  .badges{display:flex;gap:9px;justify-content:center;flex-wrap:wrap;margin-top:20px}
  .pill{display:inline-flex;align-items:center;padding:8px 16px;border-radius:999px;font-size:13.5px;font-weight:650;white-space:nowrap}
  .pill svg{width:15px;height:15px;margin-right:8px;flex:0 0 auto}
  .pill .lg{margin-right:.3em}
  .pill.date{background:var(--accent-soft);color:var(--accent)}
  .pill.days{background:var(--gold-soft);color:var(--gold)}

  /* ---------- панель ---------- */
  .toolbar{display:flex;align-items:center;gap:12px;padding:18px 0 22px;border-bottom:1px dashed var(--border-2);margin-bottom:26px;flex-wrap:wrap}
  .count{font-size:14px;color:var(--muted)}
  .count b{color:var(--ink);font-weight:700}
  .chips{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap}
  .chip{border:1px solid var(--border);background:var(--surface);color:var(--muted);border-radius:999px;padding:6px 13px;font-size:13px;font-weight:600;transition:all .18s ease}
  .chip:hover{color:var(--ink);border-color:var(--border-2)}
  .chip[aria-pressed="true"]{background:linear-gradient(135deg,var(--accent),var(--plum));border-color:transparent;color:#fff}

  /* ---------- карточки ---------- */
  .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:22px}
  .card{
    background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;
    display:flex;flex-direction:column;box-shadow:var(--shadow);position:relative;
    transition:transform .22s cubic-bezier(.2,.8,.3,1), box-shadow .22s ease
  }
  .card:hover{transform:translateY(-4px) rotate(-.35deg);box-shadow:var(--shadow-lg)}
  .thumb{position:relative;aspect-ratio:4/3;display:grid;place-items:center;overflow:hidden}
  .thumb::after{content:"";position:absolute;inset:0;background:radial-gradient(70% 60% at 50% 22%, rgba(255,255,255,.5), transparent 70%)}
  .thumb svg.art{width:52%;height:52%;position:relative;z-index:1}
  .price{position:absolute;left:12px;bottom:12px;z-index:2;background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:4px 12px;font-size:13px;font-weight:800;letter-spacing:-.01em}
  .store{position:absolute;right:12px;top:12px;z-index:2;background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:3px 10px;font-size:11.5px;font-weight:650;color:var(--muted)}
  .body{padding:16px 17px 17px;display:flex;flex-direction:column;flex:1;gap:9px}
  .card h3{margin:0;font-size:16.5px;line-height:1.3;font-weight:680;letter-spacing:-.01em}
  .note{margin:0;font-size:13.5px;color:var(--ink-2);border-left:2px solid var(--gold);padding-left:10px;font-style:italic;opacity:.9}
  .row{display:flex;gap:8px;align-items:center;margin-top:auto;padding-top:6px}
  .btn{
    flex:1;border:0;border-radius:12px;padding:11px 14px;font-size:14px;font-weight:700;min-height:44px;
    background:linear-gradient(135deg,var(--accent),color-mix(in srgb, var(--accent) 74%, #fff));color:var(--accent-ink);
    box-shadow:0 6px 16px -8px var(--accent);
    transition:filter .18s ease, transform .12s ease, box-shadow .18s ease
  }
  .btn:hover{filter:brightness(1.07);box-shadow:0 10px 22px -8px var(--accent)}
  .btn:active{transform:scale(.985)}
  .btn.ghost{background:transparent;box-shadow:none;color:var(--ink-2);border:1px solid var(--border);flex:0 0 auto;padding:11px 13px;display:grid;place-items:center}
  .btn.ghost:hover{border-color:var(--accent);color:var(--accent);filter:none}
  .btn.ghost svg{width:17px;height:17px;display:block}

  /* лента «уже дарят» */
  .card.taken .thumb{filter:saturate(.35)}
  .card.taken .store{opacity:0;transition:opacity .3s ease}
  .card.taken .thumb::before{content:"";position:absolute;inset:0;background:color-mix(in srgb, var(--surface) 55%, transparent);z-index:1}
  .ribbon{
    position:absolute;top:16px;right:-42px;z-index:3;transform:rotate(38deg);
    background:linear-gradient(135deg,var(--fir),#3FA189);color:#fff;
    padding:6px 46px;font-size:11.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;
    box-shadow:0 6px 14px -6px rgba(0,0,0,.4)
  }
  .taken-flag{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--fir);background:var(--fir-soft);border-radius:999px;padding:6px 12px;align-self:flex-start}
  .taken-flag svg{width:14px;height:14px}

  .owner-meta{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted);font-weight:650}
  .dot{width:7px;height:7px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 3px var(--gold-soft)}
  .dot.g{background:var(--fir);box-shadow:0 0 0 3px var(--fir-soft)}

  .share{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:12px 12px 12px 16px;box-shadow:var(--shadow);flex-wrap:wrap}
  .share code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px;color:var(--ink-2);flex:1;min-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .share .btn{flex:0 0 auto}
  .add{display:flex;gap:10px;background:var(--surface);border:1.5px dashed var(--border-2);border-radius:var(--r);padding:12px;margin-bottom:20px;flex-wrap:wrap}
  .add input{flex:1;min-width:200px;border:1px solid var(--border);background:var(--bg);color:var(--ink);border-radius:11px;padding:12px 14px;font-size:14.5px;outline:none;transition:border-color .18s}
  .add input:focus{border-color:var(--accent)}
  .add .btn{flex:0 0 auto}
  .hint{font-size:13px;color:var(--muted);margin:0 0 24px;display:flex;gap:8px;align-items:flex-start}
  .hint svg{width:15px;height:15px;flex:0 0 auto;margin-top:3px;color:var(--gold)}

  /* ---------- вход ---------- */
  .login-wrap{min-height:72vh;display:grid;place-items:center;padding:36px 0}
  .login{width:100%;max-width:408px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:38px 32px;box-shadow:var(--shadow-lg);text-align:center;position:relative;overflow:hidden}
  .login::before{content:"";position:absolute;inset:0 0 auto 0;height:5px;background:linear-gradient(90deg,var(--accent),var(--gold),var(--fir),var(--plum),var(--accent))}
  .mark{width:56px;height:56px;border-radius:17px;margin:0 auto 20px;display:grid;place-items:center;background:linear-gradient(135deg,var(--accent),var(--plum));color:#fff;box-shadow:0 10px 24px -10px var(--accent)}
  .mark svg{width:28px;height:28px}
  .login h2{font-family:var(--display);font-weight:400;font-size:28px;margin:0 0 8px}
  .login p{margin:0 0 24px;color:var(--muted);font-size:14.5px}
  .field{text-align:left;margin-bottom:16px}
  .field label{display:block;font-size:13px;font-weight:700;margin-bottom:7px;color:var(--ink-2)}
  .field input{width:100%;border:1px solid var(--border);background:var(--bg);color:var(--ink);border-radius:11px;padding:13px 14px;font-size:15px;outline:none;transition:border-color .18s}
  .field input:focus{border-color:var(--accent)}
  .login .btn{width:100%}
  .fine{margin-top:18px;font-size:12.5px;color:var(--muted);line-height:1.5}
  .sent{display:none}
  .sent.on{display:block}
  .sent .mark{background:linear-gradient(135deg,var(--fir),#3FA189);box-shadow:0 10px 24px -10px var(--fir)}

  /* ---------- модалка ---------- */
  .veil{position:fixed;inset:0;background:rgba(26,10,20,.55);backdrop-filter:blur(4px);display:none;place-items:center;z-index:80;padding:20px}
  .veil.on{display:grid}
  .modal{width:100%;max-width:396px;background:var(--surface);border-radius:var(--r-lg);padding:28px;box-shadow:var(--shadow-lg);animation:pop .24s cubic-bezier(.2,.9,.3,1.1);position:relative;overflow:hidden}
  .modal::before{content:"";position:absolute;inset:0 0 auto 0;height:5px;background:linear-gradient(90deg,var(--accent),var(--gold),var(--fir))}
  @keyframes pop{from{opacity:0;transform:scale(.95) translateY(10px)}to{opacity:1;transform:none}}
  .modal h3{font-family:var(--display);font-weight:400;font-size:23px;margin:0 0 8px}
  .modal p{margin:0 0 20px;font-size:14.5px;color:var(--muted)}
  .modal .btn{width:100%;margin-bottom:9px}

  .toast{position:fixed;left:50%;bottom:calc(104px + env(safe-area-inset-bottom));transform:translate(-50%,20px);opacity:0;pointer-events:none;background:linear-gradient(135deg,var(--accent),var(--plum));color:#fff;padding:12px 22px;border-radius:999px;font-size:14px;font-weight:650;transition:all .25s ease;z-index:95;box-shadow:var(--shadow-lg)}
  .toast.on{opacity:1;transform:translate(-50%,0)}
  body:has(.veil.on) .toast{bottom:auto;top:calc(14px + env(safe-area-inset-top));transform:translate(-50%,-14px)}
  body:has(.veil.on) .toast.on{transform:translate(-50%,0)}
  #confetti{position:fixed;inset:0;z-index:90;pointer-events:none}
  .sect-note{font-size:13px;color:var(--muted);text-align:center;margin:44px auto 0;max-width:56ch;line-height:1.6}


  /* ================= ПРИГЛАШЕНИЕ ================= */
  .invite{
    position:relative;display:flex;background:var(--surface);border:1px solid var(--border);
    border-radius:var(--r-lg);box-shadow:var(--shadow-lg);overflow:hidden;margin:6px 0 4px
  }
  .invite::before{
    content:"";position:absolute;inset:0 0 auto 0;height:6px;
    background:repeating-linear-gradient(90deg,var(--accent) 0 22px,var(--gold) 22px 44px,var(--fir) 44px 66px,var(--plum) 66px 88px)
  }
  /* корешок билета */
  .stub{
    flex:0 0 108px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;
    background:linear-gradient(160deg,var(--accent),var(--plum));color:#fff;padding:26px 12px 22px;position:relative
  }
  .stub b{font-family:var(--display);font-size:44px;line-height:1;font-weight:400}
  .stub span{font-size:14px;font-weight:700;text-transform:uppercase;letter-spacing:.14em;opacity:.9;margin-top:4px}
  .stub i{font-style:normal;font-size:12px;opacity:.8;margin-top:8px;letter-spacing:.08em}
  /* перфорация */
  .perf{
    position:absolute;top:0;bottom:0;right:-7px;width:14px;z-index:2;
    background:radial-gradient(circle at 50% 0, var(--surface) 6px, transparent 6.5px) 0 0/14px 18px repeat-y
  }
  .inv-main{flex:1;padding:22px 22px 20px;min-width:0}
  .kicker{font-size:11.5px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin:0 0 6px}
  .invite h2{font-family:var(--display);font-weight:400;font-size:27px;margin:0 0 12px;line-height:1.15}
  .facts{list-style:none;margin:0 0 14px;padding:0;display:flex;flex-direction:column;gap:8px}
  .facts li{display:flex;align-items:flex-start;gap:9px;font-size:14.5px;color:var(--ink-2)}
  .facts svg{width:16px;height:16px;flex:0 0 auto;margin-top:3px;color:var(--gold)}
  .facts b{font-weight:700;color:var(--ink)}
  .inv-note{margin:0 0 16px;font-size:14px;font-style:italic;color:var(--ink-2);border-left:2px solid var(--gold);padding-left:11px}
  .rsvp{display:flex;gap:8px;flex-wrap:wrap}
  .rsvp .btn{flex:1 1 120px}
  .btn.soft{
    background:var(--surface);color:var(--ink-2);border:1px solid var(--border);box-shadow:none;font-weight:650
  }
  .btn.soft:hover{border-color:var(--accent);color:var(--accent);filter:none}
  .btn.soft[aria-pressed="true"]{background:linear-gradient(135deg,var(--fir),#3FA189);color:#fff;border-color:transparent}
  .going{
    display:flex;align-items:center;gap:10px;margin-top:14px;font-size:13.5px;color:var(--muted);flex-wrap:wrap
  }
  .faces{display:flex}
  .faces i{
    width:26px;height:26px;border-radius:50%;margin-left:-8px;border:2px solid var(--surface);
    display:grid;place-items:center;font-size:11px;font-weight:800;color:#fff;font-style:normal
  }
  .faces i:first-child{margin-left:0}
  @keyframes ticketIn{0%{opacity:0;transform:translateY(18px) rotate(-1.4deg) scale(.96)}60%{opacity:1;transform:translateY(-5px) rotate(.5deg) scale(1.01)}100%{opacity:1;transform:none}}
  .invite{animation:ticketIn .7s cubic-bezier(.28,1.3,.45,1) both}
  .invite .shine{inset:0 0 0 0}
  .invite:hover .shine{animation:sheen 1.2s ease}
  @keyframes stampIn{from{opacity:0;transform:rotate(-16deg) scale(1.5)}to{opacity:1;transform:rotate(-11deg) scale(1)}}
  .stamp{
    position:absolute;right:14px;top:14px;z-index:3;transform:rotate(-11deg);
    border:2.5px solid var(--fir);color:var(--fir);border-radius:10px;padding:5px 11px;
    font-size:12.5px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;opacity:.92;
    animation:stampIn .4s cubic-bezier(.3,1.6,.5,1) both
  }

  /* блок приглашения у владельца */
  .inv-edit{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:16px;box-shadow:var(--shadow);margin-bottom:20px}
  .inv-edit h4{margin:0 0 4px;font-size:15px;font-weight:750}
  .inv-edit .sub{margin:0 0 14px;font-size:13px;color:var(--muted)}
  .fields{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
  .fields label{display:block;font-size:12px;font-weight:700;color:var(--muted);margin-bottom:5px}
  .fields input{width:100%;border:1px solid var(--border);background:var(--bg);color:var(--ink);border-radius:10px;padding:10px 12px;font-size:14px;outline:none}
  .fields input:focus{border-color:var(--accent)}
  .fields .wide{grid-column:1/-1}
  .tally{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
  .tally span{font-size:12.5px;font-weight:700;border-radius:999px;padding:6px 12px}
  .t-yes{background:var(--fir-soft);color:var(--fir)}
  .t-no{background:var(--accent-soft);color:var(--accent)}
  .t-mute{background:var(--surface-2);color:var(--muted)}
  .switch{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--ink-2);cursor:pointer}
  .switch input{appearance:none;width:42px;height:24px;border-radius:99px;background:var(--border-2);position:relative;transition:background .25s;flex:0 0 auto;cursor:pointer}
  .switch input::after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:transform .28s cubic-bezier(.34,1.5,.5,1)}
  .switch input:checked{background:linear-gradient(135deg,var(--accent),var(--plum))}
  .switch input:checked::after{transform:translateX(18px)}

  @media (max-width:640px){
    .invite{flex-direction:column}
    .stub{flex:0 0 auto;flex-direction:row;align-items:baseline;justify-content:center;gap:9px;padding:18px 14px 16px}
    .stub b{font-size:34px}
    .stub span{margin-top:0}
    .stub i{margin-top:0;margin-left:6px}
    .perf{top:auto;bottom:-7px;left:0;right:0;width:auto;height:14px;
      background:radial-gradient(circle at 0 50%, var(--surface) 6px, transparent 6.5px) 0 0/18px 14px repeat-x}
    .inv-main{padding:18px 16px 18px}
    .invite h2{font-size:23px}
    .fields{grid-template-columns:1fr}
    .stamp{position:static;transform:rotate(-3deg);margin-top:14px;align-self:flex-start;display:inline-block}
    .rsvp .btn{flex:1 1 calc(50% - 4px)}
    .rsvp .btn:first-child,.rsvp #cal{flex:1 1 100%}
  }


  /* ================= КАРТА ================= */
  .mapcard{
    display:block;position:relative;margin:0 0 16px;border-radius:16px;overflow:hidden;
    border:1px solid var(--border);background:var(--surface-2);text-decoration:none;color:inherit;cursor:pointer
  }
  .mapart{display:block;width:100%;height:auto}
  .pin{
    position:absolute;left:50%;top:44%;transform:translate(-50%,-100%);z-index:2;
    animation:drop .7s cubic-bezier(.3,1.5,.5,1) .25s both
  }
  .pin svg{width:34px;height:34px;display:block;filter:drop-shadow(0 4px 6px rgba(0,0,0,.3))}
  @keyframes drop{0%{opacity:0;transform:translate(-50%,-190%) scale(.7)}70%{opacity:1;transform:translate(-50%,-92%) scale(1.05)}100%{opacity:1;transform:translate(-50%,-100%) scale(1)}}
  .ping{
    position:absolute;left:50%;top:44%;width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;
    background:var(--accent);opacity:.35;animation:ping 2.4s ease-out infinite 1s
  }
  @keyframes ping{0%{transform:scale(.4);opacity:.5}80%{transform:scale(2.6);opacity:0}100%{opacity:0}}
  .ppin{position:absolute;left:22%;top:66%;transform:translate(-50%,-50%);z-index:2;animation:drop .7s cubic-bezier(.3,1.5,.5,1) .45s both}
  .ppin svg{width:24px;height:24px;display:block;filter:drop-shadow(0 3px 5px rgba(0,0,0,.32))}
  .maplabel{
    position:absolute;left:10px;right:10px;bottom:10px;z-index:3;display:flex;align-items:center;gap:8px;
    background:color-mix(in srgb, var(--surface) 92%, transparent);backdrop-filter:blur(8px);
    border:1px solid var(--border);border-radius:12px;padding:9px 12px;font-size:13.5px;font-weight:650
  }
  .maplabel b{margin-left:auto;color:var(--accent);white-space:nowrap;display:inline-flex;align-items:center;gap:5px}
  .maplabel svg{width:15px;height:15px;color:var(--muted);flex:0 0 auto}
  .mapcard:hover .maplabel b{gap:9px}
  .maplabel b{transition:gap .2s ease}

  /* ================= СОСТАВ ГОСТЕЙ ================= */
  .who-sum{
    display:flex;align-items:center;gap:9px;background:var(--surface-2);border-radius:12px;
    padding:11px 13px;font-size:14px;font-weight:650;margin-bottom:16px
  }
  .who-sum svg{width:17px;height:17px;color:var(--accent);flex:0 0 auto}
  .stepper{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--border)}
  .stepper .lbl{font-size:15px;font-weight:650}
  .stepper .lbl small{display:block;font-size:12.5px;font-weight:500;color:var(--muted);margin-top:2px}
  .pm{display:flex;align-items:center;gap:6px;flex:0 0 auto}
  .pm button{
    width:44px;height:44px;border-radius:13px;border:1px solid var(--border);background:var(--surface);
    color:var(--ink);font-size:22px;line-height:1;display:grid;place-items:center;transition:all .16s ease
  }
  .pm button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
  .pm button:active:not(:disabled){transform:scale(.9)}
  .pm button:disabled{opacity:.35;cursor:default}
  .pm .num{min-width:30px;text-align:center;font-size:19px;font-weight:750;font-variant-numeric:tabular-nums}
  @keyframes bump{0%{transform:scale(1)}40%{transform:scale(1.35)}100%{transform:scale(1)}}
  .pm .num.bump{animation:bump .32s cubic-bezier(.3,1.5,.5,1)}

  .kid{
    display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:9px;
    background:var(--surface-2);border-radius:14px;padding:10px;margin-top:9px;
    animation:kidIn .34s cubic-bezier(.3,1.4,.5,1) both
  }
  @keyframes kidIn{from{opacity:0;transform:translateX(-14px)}to{opacity:1;transform:none}}
  .kid.out{animation:kidOut .24s ease both}
  @keyframes kidOut{to{opacity:0;transform:translateX(16px) scale(.94)}}
  .sexes{display:flex;background:var(--surface);border:1px solid var(--border);border-radius:13px;padding:3px;gap:3px;flex:0 0 auto}
  .sexes button{
    border:0;background:transparent;color:var(--muted);border-radius:10px;width:42px;height:42px;
    display:grid;place-items:center;transition:all .2s cubic-bezier(.3,1.4,.5,1)
  }
  .sexes button svg{width:24px;height:24px}
  .sexes button[aria-pressed="true"]{color:#fff;transform:scale(1.04)}
  .sexes button[data-sex="m"][aria-pressed="true"]{background:linear-gradient(135deg,#3C7DD9,#5B4EC4)}
  .sexes button[data-sex="f"][aria-pressed="true"]{background:linear-gradient(135deg,var(--accent),var(--plum))}
  .kid-name{
    width:100%;border:1px solid var(--border);background:var(--surface);color:var(--ink);
    border-radius:11px;padding:11px 12px;font-size:15px;min-height:44px;outline:none;min-width:0
  }
  .kid-name:focus{border-color:var(--accent)}
  .kid-age{
    grid-column:2/-1;display:flex;align-items:center;gap:7px;justify-content:flex-end
  }
  .kid-age .lab{font-size:13px;color:var(--muted);font-weight:650;margin-right:auto;white-space:nowrap}
  .kid-age button{
    width:38px;height:38px;border-radius:11px;border:1px solid var(--border);background:var(--surface);
    color:var(--ink);font-size:19px;line-height:1;display:grid;place-items:center;transition:all .16s
  }
  .kid-age button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
  .kid-age button:active:not(:disabled){transform:scale(.9)}
  .kid-age button:disabled{opacity:.35;cursor:default}
  .kid-age .yrs{min-width:66px;text-align:center;font-size:15px;font-weight:750;font-variant-numeric:tabular-nums}
  .kid .rm{
    width:42px;height:42px;border-radius:11px;border:1px solid var(--border);
    background:var(--surface);color:var(--muted);display:grid;place-items:center;transition:all .16s
  }
  .kid .rm:hover{border-color:var(--accent);color:var(--accent)}
  .kid .rm svg{width:16px;height:16px}
  .addkid{
    width:100%;border:1.5px dashed var(--border-2);background:transparent;color:var(--ink-2);
    border-radius:12px;padding:11px;font-size:14px;font-weight:650;margin-top:8px;min-height:46px;
    display:flex;align-items:center;justify-content:center;gap:8px;transition:all .18s
  }
  .addkid:hover{border-color:var(--accent);color:var(--accent)}
  .addkid svg{width:16px;height:16px}
  .sheet-scroll{max-height:52vh;overflow-y:auto;margin:0 -4px 16px;padding:0 4px}

  /* сводка у владельца */
  .guest-rows{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
  .guest-row{display:flex;align-items:center;gap:10px;font-size:13.5px;padding:9px 11px;background:var(--surface-2);border-radius:11px}
  .guest-row i{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:800;color:#fff;font-style:normal;flex:0 0 auto}
  .guest-row b{font-weight:700}
  .guest-row span{color:var(--muted);margin-left:auto;text-align:right;font-size:12.5px}



  /* ================= ПРОГРАММА ================= */
  .agenda{margin:0 0 16px;border:1px solid var(--border);border-radius:14px;overflow:hidden;background:var(--surface)}
  .ag-toggle{
    width:100%;display:flex;align-items:center;gap:10px;border:0;background:transparent;color:var(--ink);
    padding:13px 14px;font-size:14.5px;font-weight:700;min-height:48px;text-align:left
  }
  .ag-toggle .ic{width:18px;height:18px;color:var(--gold);flex:0 0 auto}
  .ag-toggle .cnt{margin-left:auto;font-size:12.5px;font-weight:650;color:var(--muted)}
  .ag-toggle .chev{width:18px;height:18px;color:var(--muted);transition:transform .34s cubic-bezier(.3,1.3,.5,1);flex:0 0 auto}
  .agenda.open .chev{transform:rotate(180deg)}
  .ag-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows .42s cubic-bezier(.3,1.1,.4,1)}
  .agenda.open .ag-body{grid-template-rows:1fr}
  .ag-inner{overflow:hidden;min-height:0}
  .ag-list{list-style:none;margin:0;padding:4px 16px 16px}
  .ag-item{position:relative;display:flex;gap:13px;padding:0 0 15px 0;opacity:0;transform:translateX(-10px)}
  .agenda.open .ag-item{animation:agIn .42s cubic-bezier(.3,1.3,.5,1) both;animation-delay:calc(var(--i,0) * 70ms)}
  @keyframes agIn{to{opacity:1;transform:none}}
  .ag-item:last-child{padding-bottom:2px}
  .ag-time{
    flex:0 0 54px;font-size:13.5px;font-weight:800;color:var(--accent);font-variant-numeric:tabular-nums;padding-top:1px
  }
  .ag-dot{
    position:absolute;left:60px;top:6px;width:9px;height:9px;border-radius:50%;
    background:var(--surface);border:2.5px solid var(--gold);z-index:1
  }
  .ag-item::after{
    content:"";position:absolute;left:64px;top:15px;bottom:-1px;width:2px;background:var(--border-2)
  }
  .ag-item:last-child::after{display:none}
  .ag-what{padding-left:26px;font-size:14.5px;color:var(--ink-2)}
  .ag-what b{display:block;color:var(--ink);font-weight:680;font-size:15px;margin-bottom:1px}

  /* редактор программы */
  .ag-row{display:flex;gap:8px;margin-bottom:8px;align-items:center}
  .ag-row input.t{flex:0 0 82px;text-align:center;font-variant-numeric:tabular-nums}
  .ag-row input{border:1px solid var(--border);background:var(--bg);color:var(--ink);border-radius:10px;padding:10px 11px;font-size:14px;min-width:0;flex:1;outline:none;min-height:42px}
  .ag-row input:focus{border-color:var(--accent)}
  .ag-row .rm{flex:0 0 auto;width:42px;height:42px;border-radius:10px;border:1px solid var(--border);background:transparent;color:var(--muted);display:grid;place-items:center}
  .ag-row .rm:hover{border-color:var(--accent);color:var(--accent)}
  .ag-row .rm svg{width:15px;height:15px}


  /* ================= ТИП СОБЫТИЯ + ЧТО ПРИВЕЗТИ ================= */
  .types{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:2px 0 10px;margin-bottom:4px}
  .types::-webkit-scrollbar{display:none}
  .type{
    flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:6px;width:82px;padding:11px 6px;
    border:1px solid var(--border);border-radius:16px;background:var(--surface);color:var(--muted);
    font-size:11.5px;font-weight:700;line-height:1.2;text-align:center;transition:all .22s cubic-bezier(.3,1.3,.5,1)
  }
  .type svg{width:26px;height:26px;transition:transform .3s cubic-bezier(.3,1.6,.5,1)}
  .type:hover{border-color:var(--border-2);color:var(--ink)}
  .type[aria-pressed="true"]{
    background:linear-gradient(135deg,var(--accent),var(--plum));border-color:transparent;color:#fff;
    box-shadow:0 8px 18px -8px var(--accent)
  }
  .type[aria-pressed="true"] svg{transform:scale(1.14) rotate(-6deg)}
  .kicker-ic{width:15px;height:15px;vertical-align:-2px;margin-right:6px}

  .bring{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow);padding:18px 18px 16px;margin:16px 0 4px}
  .bring h3{font-family:var(--display);font-weight:400;font-size:23px;margin:0 0 4px}
  .bring .lead{margin:0 0 14px;font-size:13.5px;color:var(--muted)}
  .bar{height:7px;border-radius:99px;background:var(--surface-2);overflow:hidden;margin-bottom:16px}
  .bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--gold),var(--fir));transition:width .6s cubic-bezier(.3,1.2,.4,1)}
  .br-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
  .br-item{
    display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:13px;background:var(--surface-2);
    animation:kidIn .34s cubic-bezier(.3,1.4,.5,1) both;animation-delay:calc(var(--i,0) * 45ms)
  }
  .br-what{flex:1;min-width:0;font-size:14.5px;font-weight:650;line-height:1.25}
  .br-what small{display:block;font-size:12.5px;font-weight:500;color:var(--muted);margin-top:1px}
  .br-item .btn{flex:0 0 auto;max-width:106px;min-height:40px;padding:9px 14px;font-size:13.5px}
  .br-item.done{background:var(--fir-soft)}
  .br-who{
    flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:750;color:var(--fir)
  }
  .br-who svg{width:15px;height:15px}
  @keyframes checkPop{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.2)}100%{transform:scale(1);opacity:1}}
  .br-item.done .br-who{animation:checkPop .4s cubic-bezier(.3,1.5,.5,1) both}
  .br-mine{border:1px dashed var(--border-2);background:transparent}


  /* ================= SOS: ЗАБЫЛИ ПРИВЕЗТИ ================= */
  .sos-bar{
    display:flex;align-items:center;gap:10px;flex-wrap:wrap;
    background:var(--surface-2);border-radius:14px;padding:10px 12px;margin-bottom:14px
  }
  .sos-bar .me{font-size:13px;font-weight:700;color:var(--muted);flex:0 0 auto}
  .status{display:flex;background:var(--surface);border:1px solid var(--border);border-radius:11px;padding:3px;gap:2px}
  .status button{
    border:0;background:transparent;color:var(--muted);border-radius:9px;padding:8px 12px;
    font-size:13px;font-weight:700;min-height:38px;transition:all .2s cubic-bezier(.3,1.3,.5,1);
    display:inline-flex;align-items:center;gap:6px
  }
  .status button svg{width:15px;height:15px}
  .status button[aria-pressed="true"]{color:#fff;background:linear-gradient(135deg,var(--accent),var(--plum))}
  .enroute{margin-left:auto;font-size:12.5px;font-weight:700;color:var(--fir);display:inline-flex;align-items:center;gap:6px}
  .enroute .live{width:7px;height:7px;border-radius:50%;background:var(--fir);animation:pulse 1.8s ease-in-out infinite}
  @keyframes pulse{0%,100%{opacity:.35;transform:scale(.8)}50%{opacity:1;transform:scale(1.15)}}

  .sos-btn{
    width:100%;border:1.5px solid #E04A32;background:transparent;color:#E04A32;border-radius:13px;
    padding:12px;font-size:14.5px;font-weight:750;min-height:48px;margin-top:10px;
    display:flex;align-items:center;justify-content:center;gap:9px;transition:all .2s
  }
  .sos-btn svg{width:18px;height:18px}
  .sos-btn:hover{background:#E04A32;color:#fff}
  [data-theme="dark"] .sos-btn{border-color:#FF7A5E;color:#FF7A5E}
  [data-theme="dark"] .sos-btn:hover{background:#FF7A5E;color:#1A0A08}

  .br-item.urgent{
    background:#FDE9E4;border:1px solid #F3B9AC;
    animation:kidIn .34s cubic-bezier(.3,1.4,.5,1) both, urgentGlow 2.4s ease-in-out .4s infinite
  }
  [data-theme="dark"] .br-item.urgent{background:#331A14;border-color:#5C2A1E}
  @keyframes urgentGlow{0%,100%{box-shadow:0 0 0 0 rgba(224,74,50,0)}50%{box-shadow:0 0 0 5px rgba(224,74,50,.13)}}
  .br-item.urgent.done{background:var(--fir-soft);border-color:transparent;animation:none}
  .urg-tag{
    display:flex;width:fit-content;align-items:center;gap:6px;font-size:11.5px;font-weight:800;color:#E04A32;
    text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px
  }
  [data-theme="dark"] .urg-tag{color:#FF7A5E}
  .urg-tag .live{width:6px;height:6px;border-radius:50%;background:currentColor;animation:pulse 1.4s ease-in-out infinite}
  .br-item.urgent .btn{background:linear-gradient(135deg,#E04A32,#C2410C);box-shadow:0 6px 16px -8px #E04A32;color:#fff}
  .quick{display:flex;gap:7px;flex-wrap:wrap;margin:2px 0 16px}
  .quick button{
    border:1px solid var(--border);background:var(--surface);color:var(--ink-2);border-radius:999px;
    padding:8px 13px;font-size:13.5px;font-weight:650;min-height:40px;transition:all .18s
  }
  .quick button:hover{border-color:var(--accent);color:var(--accent)}


  /* ================= СЦЕНКА ПОД ТИП СОБЫТИЯ ================= */
  .scene{
    position:relative;height:84px;margin:-22px -22px 16px;overflow:hidden;
    background:linear-gradient(180deg, color-mix(in srgb, var(--accent-soft) 70%, transparent), var(--surface));
    border-bottom:1px solid var(--border)
  }
  .scene svg{position:absolute;inset:0;width:100%;height:100%;display:block}
  .flame{transform-origin:50% 100%;animation:flick 1.1s ease-in-out infinite alternate}
  .flame2{transform-origin:50% 100%;animation:flick 1.4s ease-in-out .3s infinite alternate}
  @keyframes flick{
    0%{transform:scaleY(.86) scaleX(1.06) translateY(1px);opacity:.85}
    100%{transform:scaleY(1.1) scaleX(.94) translateY(-1px);opacity:1}
  }
  .smoke{animation:smoke 3.4s ease-in-out infinite}
  .smoke2{animation:smoke 3.4s ease-in-out 1.2s infinite}
  .smoke3{animation:smoke 3.4s ease-in-out 2.2s infinite}
  @keyframes smoke{
    0%{opacity:0;transform:translate(0,0) scale(.6)}
    25%{opacity:.5}
    100%{opacity:0;transform:translate(-6px,-30px) scale(1.5)}
  }
  .sway{transform-origin:50% 100%;animation:sway 4.5s ease-in-out infinite alternate}
  .sway2{transform-origin:50% 100%;animation:sway 5.6s ease-in-out .6s infinite alternate}
  @keyframes sway{0%{transform:rotate(-1.4deg)}100%{transform:rotate(1.4deg)}}
  .snow{animation:snow 6s linear infinite}
  .snow2{animation:snow 7.5s linear .8s infinite}
  .snow3{animation:snow 8.5s linear 2s infinite}
  @keyframes snow{0%{transform:translateY(-14px);opacity:0}15%{opacity:.85}100%{transform:translateY(96px);opacity:0}}
  .twinkle{animation:tw 2.2s ease-in-out infinite}
  .float-b{animation:floatb 3.6s ease-in-out infinite alternate}
  .float-b2{animation:floatb 4.4s ease-in-out .7s infinite alternate}
  @keyframes floatb{0%{transform:translateY(2px)}100%{transform:translateY(-6px)}}
  @media (max-width:640px){ .scene{height:76px;margin:-18px -16px 14px} }

  /* ================= АНИМАЦИЯ ПЛИТОК ================= */
  .card.pre{opacity:0}
  @keyframes cardIn{
    0%{opacity:0;transform:translateY(30px) scale(.9) rotate(var(--rot,-2deg))}
    58%{opacity:1;transform:translateY(-7px) scale(1.03) rotate(calc(var(--rot,-2deg) * -.18))}
    80%{transform:translateY(2px) scale(.995)}
    100%{opacity:1;transform:none}
  }
  .card.enter{animation:cardIn .66s cubic-bezier(.28,1.35,.45,1) both;animation-delay:calc(var(--i,0) * 75ms)}

  /* иконка внутри плитки тихо парит, у каждой свой ритм */
  @keyframes floaty{from{transform:translateY(3px) rotate(-2.5deg)}to{transform:translateY(-7px) rotate(2.5deg)}}
  .thumb svg.art{animation:floaty 3.8s ease-in-out infinite alternate;animation-delay:calc(var(--i,0) * -420ms)}
  @keyframes wiggle{
    0%,100%{transform:rotate(0) scale(1)}
    20%{transform:rotate(-9deg) scale(1.1)}
    45%{transform:rotate(7deg) scale(1.12)}
    70%{transform:rotate(-4deg) scale(1.05)}
  }
  .card:hover svg.art{animation:wiggle .75s cubic-bezier(.3,1.2,.5,1)}

  /* блик пробегает по картинке */
  .shine{
    position:absolute;inset:-30% -60%;z-index:2;pointer-events:none;transform:translateX(-115%) rotate(8deg);
    background:linear-gradient(100deg,transparent 38%,rgba(255,255,255,.72) 50%,transparent 62%)
  }
  [data-theme="dark"] .shine{background:linear-gradient(100deg,transparent 38%,rgba(255,255,255,.4) 50%,transparent 62%)}
  @keyframes sheen{from{transform:translateX(-115%) rotate(8deg)}to{transform:translateX(115%) rotate(8deg)}}
  .card:hover .shine,.card.enter .shine{animation:sheen 1.15s ease .12s}
  .card.just .shine{animation:sheen .9s ease .1s}

  /* ценник качается, как бирка на подарке */
  @keyframes swing{0%,100%{transform:rotate(0)}25%{transform:rotate(-5deg)}60%{transform:rotate(3deg)}85%{transform:rotate(-1.5deg)}}
  .price{transform-origin:8px -6px}
  .card:hover .price{animation:swing .9s ease}

  /* момент брони: плитка радостно вздрагивает, лента раскатывается */
  @keyframes wobble{
    0%{transform:scale(1)}18%{transform:scale(1.045) rotate(-1.8deg)}
    38%{transform:scale(1.01) rotate(1.5deg)}58%{transform:rotate(-.9deg)}
    78%{transform:rotate(.4deg)}100%{transform:none}
  }
  .card.just{animation:wobble .78s cubic-bezier(.3,1.2,.5,1);z-index:4}
  @keyframes unroll{from{transform:rotate(38deg) scaleX(0);opacity:0}to{transform:rotate(38deg) scaleX(1);opacity:1}}
  .card.just .ribbon{animation:unroll .5s cubic-bezier(.25,1.5,.45,1) .14s both;transform-origin:center}
  .thumb{transition:filter .55s ease}
  .card,.invite,.bring,.agenda,.dock,.chip,.pill,.btn,.share,.inv-edit,.br-item,.kid{transition:background-color .45s ease, border-color .45s ease, color .45s ease}
  @keyframes flagIn{from{opacity:0;transform:translateY(8px) scale(.85)}to{opacity:1;transform:none}}
  .card.just .taken-flag{animation:flagIn .42s cubic-bezier(.3,1.4,.5,1) .2s both}
  .card:active{transform:scale(.986)}



  /* волна перекраски */
  .wipe{
    position:fixed;z-index:200;width:10px;height:10px;border-radius:50%;pointer-events:none;
    background:radial-gradient(circle, var(--accent) 0%, var(--plum) 55%, transparent 72%);
    transform:translate(-50%,-50%) scale(0);animation:wipe .82s cubic-bezier(.25,.8,.3,1) forwards
  }
  @keyframes wipe{
    0%{transform:translate(-50%,-50%) scale(0);opacity:.55}
    70%{opacity:.28}
    100%{transform:translate(-50%,-50%) scale(340);opacity:0}
  }

  /* ================= МЕНЮ-ДОК ================= */
  .dock{
    position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom));transform:translateX(-50%);
    z-index:75;display:flex;align-items:center;gap:2px;
    background:color-mix(in srgb, var(--surface) 88%, transparent);backdrop-filter:blur(16px) saturate(1.4);
    border:1px solid var(--border);border-radius:999px;padding:7px;
    box-shadow:0 10px 34px -12px rgba(70,30,50,.45), 0 2px 6px rgba(70,30,50,.08);
    width:min(432px, calc(100% - 24px));justify-content:space-between
  }
  [data-theme="dark"] .dock{box-shadow:0 10px 34px -10px rgba(0,0,0,.85)}
  .blob{
    position:absolute;top:7px;bottom:7px;left:0;width:0;border-radius:999px;
    background:linear-gradient(135deg,var(--accent),var(--plum));
    transition:transform .48s cubic-bezier(.34,1.5,.5,1), width .38s cubic-bezier(.34,1.5,.5,1);
    z-index:0
  }
  .tab{
    position:relative;z-index:1;flex:1;border:0;background:transparent;color:var(--muted);
    display:flex;flex-direction:column;align-items:center;gap:3px;
    padding:9px 4px 8px;border-radius:999px;min-height:52px;transition:color .25s ease
  }
  .tab svg{width:22px;height:22px;transition:transform .3s cubic-bezier(.34,1.6,.5,1)}
  .tab b{font-size:10.5px;font-weight:700;letter-spacing:.01em;opacity:.75;transition:opacity .25s}
  .tab[aria-current="true"]{color:#fff}
  .tab[aria-current="true"] b{opacity:1}
  .tab:not([aria-current="true"]):hover{color:var(--ink)}
  .tab.pop svg{animation:jump .52s cubic-bezier(.28,1.5,.4,1)}
  @keyframes jump{
    0%{transform:translateY(0) scale(1)}
    28%{transform:translateY(-9px) scale(1.18,.86)}
    55%{transform:translateY(1px) scale(.9,1.12)}
    78%{transform:translateY(-3px) scale(1.04,.97)}
    100%{transform:none}
  }

  /* кнопка + и её лепестки */
  .fab-slot{position:relative;z-index:2;flex:0 0 auto;width:60px;display:grid;place-items:center}
  .fab{
    width:52px;height:52px;border-radius:50%;border:0;display:grid;place-items:center;
    background:linear-gradient(135deg,var(--gold),var(--accent) 70%);color:#fff;
    box-shadow:0 8px 20px -6px var(--accent);
    transition:transform .42s cubic-bezier(.34,1.6,.5,1), box-shadow .3s ease
  }
  .fab svg{width:24px;height:24px;transition:transform .42s cubic-bezier(.34,1.6,.5,1)}
  .fab:hover{box-shadow:0 12px 26px -6px var(--accent)}
  .fab.open{transform:rotate(135deg) scale(1.06)}
  .petal{
    position:absolute;left:50%;bottom:6px;margin-left:-26px;width:52px;
    display:flex;flex-direction:column;align-items:center;gap:5px;
    opacity:0;pointer-events:none;transform:translateY(0) scale(.4);
    transition:transform .44s cubic-bezier(.34,1.55,.5,1), opacity .28s ease
  }
  .petal i{
    width:52px;height:52px;border-radius:50%;display:grid;place-items:center;
    background:var(--surface);border:1px solid var(--border);color:var(--accent);
    box-shadow:var(--shadow-lg);cursor:pointer
  }
  .petal i svg{width:22px;height:22px}
  .petal span{
    font-size:11px;font-weight:700;color:var(--ink);background:var(--surface);
    border:1px solid var(--border);border-radius:999px;padding:3px 9px;white-space:nowrap;
    box-shadow:var(--shadow)
  }
  .dock.menu-open .petal{opacity:1;pointer-events:auto}
  .dock.menu-open .p1{transform:translate(-96px,-108px) scale(1);transition-delay:.02s}
  .dock.menu-open .p2{transform:translate(0,-186px) scale(1);transition-delay:.08s}
  .dock.menu-open .p3{transform:translate(96px,-108px) scale(1);transition-delay:.14s}
  .scrim{
    position:fixed;inset:0;z-index:74;background:rgba(26,10,20,.42);backdrop-filter:blur(3px);
    opacity:0;pointer-events:none;transition:opacity .3s ease
  }
  .scrim.on{opacity:1;pointer-events:auto}
  @media (max-width:400px){
    .dock.menu-open .p1{transform:translate(-80px,-104px) scale(1)}
    .dock.menu-open .p3{transform:translate(80px,-104px) scale(1)}
    .petal span{font-size:10px}
  }

  @media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

  /* ================= ТЕЛЕФОН ================= */
  @media (max-width:640px){
    body{font-size:16.5px}
    .garland{height:22px}
    .chrome{padding:10px 12px 8px;gap:8px;position:sticky}
    .chrome .label{display:none}
    .seg{flex:1;justify-content:space-between}
    .seg button{padding:8px 6px;font-size:13px;flex:1;min-height:40px;white-space:nowrap}
    .lg{display:none}
    .sm{display:inline}
    .badges{flex-wrap:nowrap}
    .icon-btn{margin-left:0;padding:8px;min-width:40px;min-height:40px;justify-content:center}
    .icon-btn span{display:none}

    .stage{padding:0 14px calc(150px + env(safe-area-inset-bottom))}

    /* компактная шапка — экран маленький, список важнее */
    .hero{padding:26px 0 20px}
    .ava-wrap{width:64px;margin-bottom:14px}
    .ava{width:64px;height:64px;font-size:26px}
    .ava::after{inset:4px}
    .spark.a{width:16px;height:16px;top:-4px;right:-6px}
    .spark.b{width:11px;height:11px;bottom:0;left:-9px}
    .spark.c{display:none}
    .hero h1{font-size:29px;margin-bottom:8px}
    .hero p{font-size:15px;max-width:34ch}
    .badges{gap:7px;margin-top:14px}
    .pill{padding:7px 13px;font-size:12.5px}

    /* фильтры уезжают вбок, а не переносятся в три строки */
    .toolbar{
      padding:14px 0 14px;margin:0 -14px 18px;padding-left:14px;padding-right:14px;
      gap:10px;flex-wrap:nowrap;align-items:center;overflow:hidden
    }
    .count{flex:0 0 auto;font-size:13px}
    .chips{
      margin-left:auto;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
      -webkit-overflow-scrolling:touch;padding-right:14px;scroll-snap-type:x proximity
    }
    .chips::-webkit-scrollbar{display:none}
    .chip{flex:0 0 auto;min-height:38px;scroll-snap-align:start}

    /* карточки в одну колонку, картинка ниже — меньше мотать */
    .grid{grid-template-columns:1fr;gap:16px}
    .card:hover{transform:none}
    .card:active{transform:scale(.99)}
    .thumb{aspect-ratio:16/10}
    .thumb svg.art{width:42%;height:42%}
    .body{padding:15px 16px 16px;gap:8px}
    .card h3{font-size:17px}
    .note{font-size:14px}
    .btn{min-height:50px;font-size:15.5px;border-radius:14px}
    .btn.ghost{min-width:50px;padding:11px}
    .ribbon{top:14px;right:-40px;padding:6px 42px}

    .share{padding:10px 10px 10px 14px;gap:9px}
    .share code{font-size:13px;min-width:0}
    .share .btn{max-width:none;flex:1 0 100%}
    .add{flex-wrap:nowrap;gap:8px}
    .add input{min-width:0;font-size:16px}
    .add .btn{max-width:120px;padding:11px 16px}
    #owner .hint{margin-bottom:18px}

    /* модалка — шторкой снизу, как в приложениях */
    .veil{place-items:end center;padding:0}
    .modal{
      max-width:none;border-radius:24px 24px 0 0;padding:24px 20px calc(24px + env(safe-area-inset-bottom));
      animation:sheet .28s cubic-bezier(.2,.9,.3,1)
    }
    .modal::after{
      content:"";position:absolute;top:11px;left:50%;transform:translateX(-50%);
      width:38px;height:4px;border-radius:99px;background:var(--border-2)
    }
    .modal h3{margin-top:8px;font-size:21px}
    @keyframes sheet{from{transform:translateY(100%)}to{transform:none}}

    .login-wrap{min-height:auto;padding:14px 0 30px}
    .login{padding:30px 20px calc(30px + env(safe-area-inset-bottom));border-radius:22px}
    .field input{font-size:16px;padding:14px}

    .toast{bottom:calc(96px + env(safe-area-inset-bottom));width:calc(100% - 32px);text-align:center;border-radius:16px}
    .sect-note{margin-top:32px;font-size:12.5px}
  }
  /* планшет в портрете / очень широкий телефон */
  @media (max-width:640px) and (min-width:540px){
    .grid{grid-template-columns:1fr 1fr;gap:14px}
    .thumb{aspect-ratio:1/1}
    .card h3{font-size:15.5px}
    .note{-webkit-line-clamp:2;line-clamp:2;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;font-size:13px}
  }

  /* ================= ДОБАВЛЕНО ПРИЛОЖЕНИЕМ =================
     Экраны, которых не было в макете: список событий, флеш-сообщения,
     кнопка темы. Язык тот же — только переменные из tokens.css. */

  .flash{
    margin:14px 0 0;padding:12px 16px;border-radius:var(--r);
    background:var(--gold-soft);border:1px solid var(--border);
    color:var(--ink-2);font-size:14.5px;font-weight:600
  }

  .theme-toggle{
    position:fixed;right:16px;top:calc(16px + env(safe-area-inset-top));z-index:70;
    width:44px;height:44px;display:grid;place-items:center;
    border:1px solid var(--border);border-radius:999px;
    background:var(--surface);color:var(--ink-2);box-shadow:var(--shadow-lg);
    transition:color .18s ease, border-color .18s ease
  }
  .theme-toggle:hover{color:var(--ink);border-color:var(--border-2)}
  .theme-toggle svg{width:19px;height:19px}

  /* ---------- список событий ---------- */
  .ev-list{display:flex;flex-direction:column;gap:10px}
  .ev-row{
    display:flex;align-items:center;gap:14px;padding:14px 16px;min-height:50px;
    background:var(--surface);border:1px solid var(--border);border-radius:var(--r);
    box-shadow:var(--shadow);text-decoration:none;color:inherit;
    transition:transform .18s cubic-bezier(.3,1.3,.5,1), border-color .18s ease
  }
  .ev-row:hover{transform:translateY(-2px);border-color:var(--border-2)}
  .ev-ic{
    flex:0 0 auto;width:38px;height:38px;display:grid;place-items:center;border-radius:999px;
    background:var(--accent-soft);color:var(--accent)
  }
  .ev-ic svg{width:20px;height:20px}
  .ev-main{display:flex;flex-direction:column;min-width:0}
  .ev-main b{font-size:16.5px;font-weight:680;color:var(--ink)}
  .ev-main small{font-size:13px;color:var(--muted)}
  .ev-days{
    margin-left:auto;flex:0 0 auto;font-size:12.5px;font-weight:700;color:var(--gold);
    background:var(--gold-soft);padding:5px 11px;border-radius:999px;white-space:nowrap
  }

  .types-grid{flex-wrap:wrap;overflow:visible}

  .edit-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
  .edit-actions .btn{flex:1 1 190px}

  .logout-form{margin:28px 0 0;text-align:center}
  .linky{
    border:0;background:none;color:var(--muted);font-size:13.5px;
    text-decoration:underline;text-underline-offset:3px
  }
  .linky:hover{color:var(--ink-2)}

  /* Ссылка входа, пока почта не подключена. Живёт только в разработке. */
  .dev-link{
    margin:16px 0;padding:14px;border-radius:var(--r);text-align:left;
    background:var(--gold-soft);border:1px dashed var(--border-2)
  }
  .dev-link b{display:block;font-size:13.5px;color:var(--ink);margin-bottom:4px}
  .dev-link p{margin:0 0 8px;font-size:13px;color:var(--muted)}
  .dev-link a{font-size:12.5px;color:var(--accent);word-break:break-all}

  /* Плашка на карте рассчитана на одну строку: длинный адрес режем. */
  .maplabel .addr{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}

  /* Место под плавающую кнопку темы. */
  .stage{padding-top:8px}
  .hero{padding-right:56px}
  @media (min-width:640px){ .hero{padding-right:0} }

  /* .btn в макете живёт внутри флекс-строки и тянется через flex:1.
     Отдельно стоящей кнопке и ссылке это мешает — отсюда модификатор. */
  a.btn{text-decoration:none}
  .btn-block{
    display:flex;align-items:center;justify-content:center;
    width:100%;flex:0 0 auto;text-decoration:none
  }
  .btn.ghost.btn-block{display:flex}

  /* Длинные названия и адреса не должны рвать строку списка. */
  .ev-main b,
  .ev-main small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
  @media (max-width:420px){
    .ev-row{display:grid;grid-template-columns:38px 1fr;gap:0 14px;align-items:center}
    .ev-days{grid-column:2;justify-self:start;margin:7px 0 0}
  }

  /* Железное правило: поле ввода меньше 16px заставляет Safari зумить
     страницу при фокусе. В макете до 16px поднято только поле входа. */
  @media (max-width:640px){
    .fields input,
    .ag-row input,
    .add input,
    .field input,
    input[type="text"],
    input[type="email"],
    input[type="datetime-local"]{font-size:16px}
  }

  /* Шторка состава в режиме «не смогу»: спрашиваем только имя. */
  .veil.only-name #party-body,
  .veil.only-name .who-sum{display:none}

  /* Аватарки в строке «кто идёт». Буквы, а не картинки: фото мы не храним. */
  .faces i{color:#fff}
  .face-0{background:var(--accent)}
  .face-1{background:var(--gold)}
  .face-2{background:var(--fir)}
  .face-3{background:var(--plum)}
  .face-rest{background:var(--surface-2);color:var(--muted)}
