/* Meet Birdie: buttons, pills, avatars, cards, chips, sheets, toasts, the error popup. Moved verbatim from the approved prototype. */

.iconbtn{width:40px;height:40px;border-radius:14px;display:grid;place-items:center;background:var(--card);border:1px solid var(--line);color:var(--text);flex:none}
.iconbtn:active,.btn:active,.qr button:active{transform:scale(.95)}
.btn{height:50px;border-radius:16px;padding:0 20px;font-weight:800;font-size:16px;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .1s}
.btn.primary{background:linear-gradient(180deg,#3ff0b3,var(--mint2));color:#04261a;box-shadow:0 8px 24px rgba(46,230,166,.28),inset 0 1px 0 rgba(255,255,255,.4)}
.btn.ghost{background:var(--card2);border:1px solid var(--line2)}
.btn.lav{background:linear-gradient(180deg,#b57cf7,#8d47e0);color:#fff;box-shadow:0 8px 20px rgba(163,92,240,.3)}
.btn.block{width:100%}
.btn.sm{height:38px;border-radius:12px;font-size:14px;padding:0 13px}
.btn:disabled{opacity:.45}
.pill{display:inline-flex;align-items:center;gap:5px;height:24px;padding:0 9px;border-radius:999px;font-size:11.5px;font-weight:800;background:rgba(255,255,255,.07);color:var(--muted);white-space:nowrap}
.pill.green{background:rgba(46,230,166,.14);color:var(--mint)}
.pill.sun{background:rgba(246,195,67,.14);color:var(--sun)}
.pill.lav{background:rgba(163,92,240,.2);color:var(--lav)}
.pill.red{background:rgba(255,122,122,.14);color:var(--red)}
.av{display:inline-grid;place-items:center;border-radius:50%;font-weight:800;color:#06223b;flex:none;object-fit:cover}
.avstack{display:flex}
.avstack .av{box-shadow:0 0 0 2px var(--card);margin-left:-8px}
.avstack .av:first-child{margin-left:0}
.tile{width:52px;height:52px;border-radius:17px;display:grid;place-items:center;font-size:25px;flex:none}
.sec{display:flex;align-items:center;justify-content:space-between;margin:22px 4px 8px}
.sec h3{margin:0;font-size:12.5px;letter-spacing:1.2px;text-transform:uppercase;color:var(--muted);font-weight:800}
.link{color:var(--mint);font-weight:800;font-size:14px;cursor:pointer}
.card{background:linear-gradient(180deg,var(--card),rgba(14,42,76,.75));border:1px solid var(--line);border-radius:var(--r);padding:16px}
.list{background:var(--card);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.li{display:flex;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid var(--line);width:100%;text-align:left}
.li:last-child{border-bottom:0}
.toggle{width:52px;height:32px;border-radius:16px;background:rgba(255,255,255,.12);position:relative;flex:none;transition:background .2s}
.toggle::after{content:"";position:absolute;top:3px;left:3px;width:26px;height:26px;border-radius:50%;background:#fff;transition:transform .2s}
.toggle.on{background:var(--mint)}
.toggle.on::after{transform:translateX(20px)}
.bub{padding:9px 13px;border-radius:20px;background:var(--card2);font-size:15.5px;line-height:1.38;word-wrap:break-word;white-space:pre-wrap}
.cardm{margin-top:6px;width:min(300px,74vw);background:var(--card);border:1px solid rgba(46,230,166,.22);border-radius:20px;padding:12px;text-align:left}
.cardm.lottery{border-color:rgba(163,92,240,.4);background:radial-gradient(120% 90% at 100% 0%,rgba(163,92,240,.16),transparent 60%),var(--card)}
.dateblk{width:50px;flex:none;border-radius:14px;background:linear-gradient(180deg,var(--fair),var(--deep));display:flex;flex-direction:column;align-items:center;justify-content:center;padding:6px 0;box-shadow:inset 0 1px 0 rgba(255,255,255,.2)}
.dateblk.lottery{background:linear-gradient(180deg,#9b59ef,#5b2aa3)}
.dateblk small{font-size:10.5px;font-weight:800;letter-spacing:1px;opacity:.85}
.dateblk b{font-size:21px;line-height:1.05}
.dateblk em{font-style:normal;font-size:10px;font-weight:800;opacity:.8}
.spots{display:flex;gap:4px;margin-top:9px}
.spots i{flex:1;height:6px;border-radius:3px;background:rgba(255,255,255,.1)}
.spots i.in{background:var(--mint)}
.spots i.maybe{background:var(--sun)}
.rsvp{display:grid;grid-template-columns:1fr 1fr 1fr;gap:7px;margin-top:10px}
.rsvp button{height:38px;border-radius:12px;font-weight:800;background:var(--card2);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;gap:5px;font-size:13.5px}
.rsvp button.on.in{background:rgba(46,230,166,.18);border-color:var(--mint);color:var(--mint)}
.rsvp button.on.maybe{background:rgba(246,195,67,.16);border-color:var(--sun);color:var(--sun)}
.rsvp button.on.out{background:rgba(255,122,122,.14);border-color:var(--red);color:var(--red)}
.track{display:flex;align-items:center;margin:11px 2px 2px}
.track span{display:flex;flex-direction:column;align-items:center;gap:4px;flex:none;width:56px}
.track span i{width:14px;height:14px;border-radius:50%;border:2px solid rgba(255,255,255,.2);background:var(--bg2)}
.track span.done i{background:var(--lav);border-color:var(--lav)}
.track span.now i{border-color:var(--lav);box-shadow:0 0 0 4px rgba(163,92,240,.25)}
.track span b{font-size:10px;color:var(--dim);font-weight:800;text-align:center;line-height:1.15}
.track span.done b,.track span.now b{color:var(--lav)}
.track em{flex:1;height:2px;background:rgba(255,255,255,.12);margin:0 -14px 16px}
.track em.done{background:var(--lav)}
.stagebox{margin-top:10px;padding:9px 11px;border-radius:13px;background:rgba(163,92,240,.12);font-size:13px;line-height:1.4;color:#e3d2ff}
.stagebox.green{background:rgba(46,230,166,.1);color:#c9fbe6}
.stagebox .btns{display:flex;gap:7px;margin-top:8px;flex-wrap:wrap}
.poll .opt{position:relative;display:flex;align-items:center;gap:10px;width:100%;padding:11px 12px;border-radius:14px;background:var(--bg2);border:1px solid var(--line);margin-top:8px;overflow:hidden;text-align:left}
.poll .opt .fill{position:absolute;left:0;top:0;bottom:0;background:rgba(46,230,166,.13);transition:width .35s}
.poll .opt.mine{border-color:var(--mint)}
.poll .opt > *{position:relative}
.poll .ck{width:22px;height:22px;border-radius:7px;border:2px solid var(--line2);display:grid;place-items:center;color:transparent;flex:none}
.poll .opt.mine .ck{background:var(--mint);border-color:var(--mint);color:#04261a}
.sugg-btns{display:flex;flex-direction:column;gap:7px}
.used{font-size:12.5px;font-weight:800;color:var(--dim);display:flex;align-items:center;gap:6px}
.fchips{display:flex;flex-wrap:wrap;gap:7px;margin-top:4px}
.fchip{height:36px;padding:0 12px 0 4px;border-radius:999px;background:var(--bg2);border:1px solid var(--line);display:inline-flex;align-items:center;gap:7px;font-weight:800;font-size:13.5px}
.fchip.on{border-color:var(--mint);background:rgba(46,230,166,.14);color:var(--mint)}
.codebox{border-radius:16px;padding:12px;text-align:center;background:radial-gradient(120% 120% at 50% 0%,rgba(46,230,166,.16),transparent 70%),var(--bg2);border:1px dashed rgba(46,230,166,.45)}
.codebox b{display:block;font-size:24px;letter-spacing:4px;color:var(--mint);font-family:ui-monospace,Menlo,monospace}
.share3{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:9px}
.share3 button{height:56px;border-radius:14px;background:var(--card2);border:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-weight:800;font-size:12px;color:var(--mint)}
.backdrop{position:absolute;inset:0;z-index:50;opacity:0;transition:opacity .25s;background:rgba(2,10,20,.6)}
.backdrop.show{opacity:1}
.sheet{position:absolute;left:0;right:0;bottom:0;max-height:92%;display:flex;flex-direction:column;background:linear-gradient(180deg,#10305a,#0a2342 30%);border-radius:28px 28px 0 0;border-top:1px solid var(--line2);z-index:51;transform:translateY(100%);transition:transform .32s cubic-bezier(.2,.9,.25,1);box-shadow:0 -20px 60px rgba(0,0,0,.5)}
.sheet.show{transform:none}
.grab{padding:10px 0 4px;display:grid;place-items:center;touch-action:none;position:relative}
.grab i{width:42px;height:5px;border-radius:3px;background:rgba(255,255,255,.22)}
.sbody{overflow-y:auto;padding:4px 20px calc(24px + var(--sb));overscroll-behavior:contain;-webkit-overflow-scrolling:touch;transform:translateZ(0)}
.sheet h2{margin:6px 0 4px;font-size:23px;letter-spacing:-.3px}
.field{margin-top:16px}
.field label{display:block;font-size:12.5px;font-weight:800;color:var(--muted);letter-spacing:.6px;text-transform:uppercase;margin:0 0 7px 2px}
.input{width:100%;height:52px;border-radius:15px;border:1px solid var(--line2);background:var(--bg2);padding:0 16px;outline:0}
/* Dropdowns: our own chevron, so the field looks like the others. */
select.input{appearance:none;-webkit-appearance:none;cursor:pointer;padding-right:44px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%238fa6c2' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 16px center}
select.input:invalid{color:var(--muted)}
.input:focus{border-color:var(--mint);box-shadow:0 0 0 4px rgba(46,230,166,.12)}
.pick{display:flex;align-items:center;gap:12px;width:100%;padding:13px;border-radius:16px;background:var(--bg2);border:1px solid var(--line);text-align:left;margin-bottom:8px}
.pick.on{border-color:var(--mint);background:rgba(46,230,166,.09)}
.check{width:24px;height:24px;border-radius:8px;border:2px solid var(--line2);display:grid;place-items:center;flex:none;color:transparent}
.pick.on .check{background:var(--mint);border-color:var(--mint);color:#04261a}
.months{display:grid;grid-template-columns:repeat(6,1fr);gap:7px}
.months button{height:42px;border-radius:12px;background:var(--bg2);border:1px solid var(--line);font-weight:800;font-size:13.5px}
.months button.on{background:linear-gradient(180deg,rgba(34,197,94,.35),rgba(22,163,74,.25));border-color:var(--green);color:#d9ffe9}
.chips{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{height:36px;padding:0 14px;border-radius:12px;background:var(--card2);border:1px solid var(--line);font-weight:700;font-size:14px;white-space:nowrap;flex:none}
.chip.on{background:rgba(46,230,166,.16);border-color:var(--mint);color:var(--mint)}
.sbar{display:grid;grid-template-columns:repeat(12,1fr);gap:4px;margin-top:12px}
.sbar span{display:flex;flex-direction:column;align-items:center;gap:5px}
.sbar i{height:8px;width:100%;border-radius:4px;background:rgba(255,255,255,.08)}
.sbar span.on i{background:linear-gradient(90deg,var(--fair),var(--mint))}
.sbar span.cur i{box-shadow:0 0 0 2px var(--sun)}
.sbar b{font-size:10px;color:var(--dim);font-weight:800}
.sbar span.cur b{color:var(--sun)}
.steps{counter-reset:s;margin:10px 0 0;padding:0;list-style:none}
.steps li{counter-increment:s;display:flex;gap:12px;align-items:flex-start;padding:9px 0;font-size:15px;line-height:1.4}
.steps li::before{content:counter(s);width:28px;height:28px;border-radius:9px;background:rgba(46,230,166,.15);color:var(--mint);display:grid;place-items:center;font-weight:900;flex:none}
.rules{padding:12px 14px;border-radius:16px;background:rgba(163,92,240,.1);border:1px solid rgba(163,92,240,.28);font-size:13.5px;line-height:1.5;color:#e3d2ff}
.toast{position:absolute;left:50%;top:calc(var(--st) + 12px);transform:translate(-50%,-160%);background:rgba(16,48,90,.96);border:1px solid rgba(46,230,166,.4);padding:11px 16px;border-radius:14px;font-weight:800;font-size:14px;z-index:90;transition:transform .3s cubic-bezier(.2,.9,.25,1);display:flex;gap:8px;align-items:center;white-space:nowrap;box-shadow:0 10px 30px rgba(0,0,0,.4)}
.toast.show{transform:translate(-50%,0)}
#errpop{position:absolute;inset:0;z-index:100;display:none;place-items:center;background:rgba(2,10,20,.7);padding:24px}
#errpop.show{display:grid}
#errpop .box{background:#14223a;border:1px solid rgba(255,122,122,.4);border-radius:22px;padding:22px;max-width:340px;text-align:center}
#errpop .box b{display:block;font-size:19px;margin:8px 0 6px}
.vtag{position:absolute;top:calc(var(--st) + 4px);right:8px;font-size:9.5px;font-weight:900;letter-spacing:1px;color:var(--dim);z-index:4;pointer-events:none}
.sx{position:absolute;right:14px;top:8px;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:rgba(255,255,255,.08);color:var(--text)}
.game{margin-top:6px;width:min(310px,76vw);background:var(--card);border:1px solid rgba(46,230,166,.25);border-radius:20px;padding:13px;text-align:left}
.game.lottery{border-color:rgba(163,92,240,.45);background:radial-gradient(120% 90% at 100% 0%,rgba(163,92,240,.15),transparent 60%),var(--card)}
.game .when{font-size:18px;font-weight:800;letter-spacing:-.2px}
.game .where{font-size:13px;color:var(--muted);margin-top:2px}
.count{display:flex;align-items:center;gap:9px;margin-top:11px}
.count b{font-size:14px}
.status{margin-top:11px;padding:10px 12px;border-radius:14px;background:rgba(255,255,255,.05);font-size:14px;line-height:1.4;display:flex;gap:9px;align-items:flex-start}
.status.lav{background:rgba(163,92,240,.14);color:#eadcff}
.status.green{background:rgba(46,230,166,.11);color:#d4fbea}
.status.red{background:rgba(255,122,122,.11);color:#ffd6d6}
.status .si{font-size:16px;line-height:1.3;flex:none}
.status .acts{display:flex;gap:7px;margin-top:9px;flex-wrap:wrap}
.chipline{display:flex;align-items:center;gap:9px;margin-top:6px;padding:8px 12px;border-radius:14px;background:rgba(255,255,255,.05);border:1px solid var(--line2);font-size:13.5px;font-weight:700;text-align:left;max-width:min(310px,76vw)}
.chipline .dim{font-weight:700}
.gamerow{display:block;width:100%;text-align:left;padding:13px 14px;border-radius:18px;background:var(--card);border:1px solid var(--line);margin-bottom:9px}
.gamerow.ask{border-color:rgba(246,195,67,.35);background:radial-gradient(120% 120% at 100% 0%,rgba(246,195,67,.09),transparent 60%),var(--card)}
.gamerow .rsvp{margin-top:10px}
.gamerow .meta{font-size:13px;color:var(--muted);margin-top:2px}
.days{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.day{height:62px;border-radius:14px;background:var(--bg2);border:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;position:relative}
.day small{font-size:10.5px;font-weight:800;color:var(--muted)}
.day b{font-size:19px}
.day i{font-style:normal;font-size:9.5px;font-weight:800;color:var(--lav);height:12px}
.day.on{border-color:var(--mint);background:rgba(46,230,166,.15)}
.day.on small,.day.on b{color:var(--mint)}
.day.wk small{color:var(--sky)}
.optrow{display:flex;gap:8px;flex-wrap:wrap}
.opt2{height:40px;padding:0 14px;border-radius:13px;background:var(--bg2);border:1px solid var(--line);font-weight:800;font-size:14px}
.opt2.on{border-color:var(--mint);background:rgba(46,230,166,.15);color:var(--mint)}
.checkrow{display:flex;align-items:center;gap:12px;margin-top:16px;padding:13px;border-radius:15px;background:var(--bg2);border:1px solid var(--line);width:100%;text-align:left}
.checkrow .check{border-radius:8px}
.checkrow.on .check{background:var(--mint);border-color:var(--mint);color:#04261a}
.invcard{margin-top:16px;border-radius:24px;padding:18px;background:radial-gradient(120% 100% at 100% 0%,rgba(46,230,166,.16),transparent 60%),linear-gradient(160deg,#103560,#0b2646);border:1px solid rgba(46,230,166,.25)}
.steps3{list-style:none;padding:0;margin:12px 0 0}
.steps3 li{display:flex;gap:12px;padding:9px 0;align-items:flex-start}
.steps3 li span{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;flex:none;font-size:13px;font-weight:900;border:2px solid rgba(255,255,255,.18);color:var(--dim)}
.steps3 li.done span{background:var(--lav);border-color:var(--lav);color:#fff}
.steps3 li.now span{border-color:var(--lav);color:var(--lav);box-shadow:0 0 0 4px rgba(163,92,240,.2)}

/* ---------- Readability for our golfers (see base.css) ---------- */
.btn.sm{height:44px;font-size:15px;padding:0 15px}
.rsvp button{height:46px;font-size:15px}
.opt2{height:46px;font-size:15px;padding:0 15px}
.chip{height:42px;font-size:15px}
.months button{height:48px;font-size:15px}
.day{height:66px}
.day b{font-size:20px}
.day small{font-size:11.5px}
.sec h3{font-size:13px}
.pill{height:26px;font-size:12.5px}
.li{min-height:56px}
.iconbtn{width:44px;height:44px}
.sx{width:40px;height:40px}
.pick{min-height:60px}
.share3 button{height:60px;font-size:13px}
.status{font-size:15px}
.dateblk small{font-size:11px}
.chipline{font-size:14.5px;min-height:44px}

/* Hover and pressed states for mouse and touch (polish standard). */
@media (hover:hover){
  .btn:hover{filter:brightness(1.08)}
  .btn.ghost:hover,.chip:hover,.opt2:hover,.pick:hover,.day:hover,.months button:hover,.rsvp button:hover,.li:hover,.chipline:hover{background-color:var(--card3)}
  .chat-row:hover,.gamerow:hover{background-color:rgba(255,255,255,.03)}
  .link:hover{text-decoration:underline}
  .iconbtn:hover,.sx:hover{background:var(--card2)}
}
.btn,.chip,.opt2,.pick,.day,.months button,.rsvp button,.li,.chipline,.chat-row,.gamerow,.qr button,.send,.planbtn,.fab,.toggle{transition:background-color .18s ease,border-color .18s ease,transform .1s ease,filter .18s ease,opacity .18s ease}
.rsvp button:active,.chip:active,.opt2:active,.pick:active,.day:active,.months button:active,.li:active,.chat-row:active,.gamerow:active,.fab:active,.send:active{transform:scale(.97)}
.btn:disabled,.send:disabled{cursor:default;filter:none;transform:none}

/* Inline form errors, and the busy state of a button waiting on the server. */
.formerr{color:var(--red);font-size:14.5px;font-weight:700;min-height:20px;margin:10px 4px 0;line-height:1.4}
.btn.busy{position:relative;color:transparent !important}
.btn.busy::after{content:"";position:absolute;width:20px;height:20px;border-radius:50%;border:3px solid rgba(4,38,26,.35);border-top-color:#04261a;animation:spin .7s linear infinite}
.btn.ghost.busy::after{border-color:rgba(255,255,255,.25);border-top-color:#fff}
@keyframes spin{to{transform:rotate(360deg)}}

/* The close button hangs below the grab bar; the sheet body (translateZ(0))
   stacked above it and swallowed taps on the X's lower half. Keep the X on top. */
.grab{z-index:2}
.sx{z-index:3}
/* A link that looks like a button (Add to calendar): button colors, one line. */
a.btn{color:var(--text);white-space:nowrap;text-decoration:none}
a.btn.primary{color:#04261a}

/* ---------- Moov's card form (billing sheet) ----------
   Moov draws a fixed 360px dark-grey box; make it fill the card, taller,
   in our colors, with a clear mint ring while he types. */
.cardform{padding:12px}
.cardform iframe{color-scheme:light}   /* same scheme as Moov's page, or the browser paints the frame white */
.cardform moov-card-link{display:block;color-scheme:light;--moov-color-background-secondary:var(--bg2);--moov-color-background-tertiary:var(--line2);--moov-color-tertiary:var(--muted);--moov-color-primary:var(--mint);--moov-color-danger:var(--red);--moov-radius-large:14px}
.cardform moov-card-link .iframeWrapper{width:100% !important;height:58px !important;padding:16px 14px !important;border-width:2px !important}
.cardform moov-card-link .errorMessage{font-size:15px;color:var(--red);margin:8px 2px 0}

/* Celebrations (celebrate.dart): confetti and golf balls, the "full!" /
   "booked!" banner, faces popping into a card, the count bumping. */
.confetti{position:fixed;inset:0;pointer-events:none;z-index:150;overflow:hidden}
.confetti span{position:absolute;display:block;will-change:transform,opacity}
.confetti .bit{width:10px;height:15px;border-radius:2px;box-shadow:0 0 6px rgba(255,255,255,.25)}
.confetti .bit.round{width:11px;height:11px;border-radius:50%}
.confetti .ball{width:15px;height:15px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff 0 60%,#e9eef4 85%,#cfd8e2)}
.confetti .emo{font-size:22px;line-height:1}
.cheer-banner{position:fixed;z-index:160;pointer-events:none;white-space:nowrap;padding:12px 20px;border-radius:999px;font-weight:900;font-size:20px;letter-spacing:-.2px;
  color:#04261a;background:linear-gradient(135deg,#2ee6a6,#9ef0cf 55%,#c9a2ff);box-shadow:0 12px 34px rgba(0,0,0,.45),0 0 0 3px rgba(255,255,255,.18)}
.game.cheer,.gamerow.cheer{animation:cheerGlow 1.6s ease-out}
@keyframes cheerGlow{0%{box-shadow:0 0 0 0 rgba(46,230,166,.0)}20%{box-shadow:0 0 0 4px rgba(46,230,166,.55),0 0 36px rgba(46,230,166,.45)}100%{box-shadow:0 0 0 0 rgba(46,230,166,0)}}
.av.pop-in{animation:popIn .7s cubic-bezier(.2,1.6,.4,1) both}
@keyframes popIn{0%{transform:scale(0)}60%{transform:scale(1.3);box-shadow:0 0 0 3px var(--mint)}100%{transform:scale(1)}}
.count b.bump{display:inline-block;animation:bump .6s ease-out}
@keyframes bump{0%{transform:scale(1)}35%{transform:scale(1.18);color:var(--mint)}100%{transform:scale(1)}}
.rsvp button.in.pop{animation:popBtn .5s cubic-bezier(.2,1.6,.4,1)}
@keyframes popBtn{0%{transform:scale(.92)}50%{transform:scale(1.08)}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.av.pop-in,.count b.bump,.rsvp button.in.pop,.game.cheer,.gamerow.cheer{animation:none}}

/* "A new version of Birdie is ready" (update.dart) */
#updbar{position:absolute;left:12px;right:12px;top:calc(var(--st) + 66px);z-index:90;display:flex;gap:10px;align-items:center;padding:10px 10px 10px 14px;border-radius:16px;
  background:linear-gradient(135deg,rgba(46,230,166,.2),rgba(201,162,255,.18)),var(--card2);border:1px solid rgba(46,230,166,.45);box-shadow:0 10px 30px rgba(0,0,0,.45);
  font-weight:800;font-size:15px;animation:fade .3s ease-out}
#updbar .dim{min-width:40px;min-height:40px;font-size:18px}

/* Sheets sit above the on-screen keyboard (sheet.dart sets --kb on iPhone;
   Android shrinks the page itself: interactive-widget=resizes-content). */
.sheet{bottom:var(--kb,0px);max-height:calc(92% - var(--kb,0px))}
