/* Shared Onlast consent component for standalone pages. */
#cookieConsentRoot{--card:#111b12;--text:#f0f4ee;--text-2:#ced6ca;--text-3:#9bad94;--border:#354532;--border-2:#263323;--accent:#c9ff3a;--accent-fg:#c9ff3a;--track:#42533c;font-family:"Hanken Grotesk",sans-serif}
#cookieConsentRoot .ghost{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:999px;padding:12px 20px;cursor:pointer}
.ckbanner{position:fixed;left:0;right:0;bottom:0;z-index:230;
  padding:0 12px calc(12px + env(safe-area-inset-bottom,0px));
  display:flex;justify-content:center;animation:lmsUp .22s ease}
.ckbanner-body{width:100%;max-width:640px;background:var(--card);border:1px solid var(--border);
  border-radius:16px;padding:16px 18px;box-shadow:0 -18px 50px -18px rgba(0,0,0,.55)}
.ckbanner-text{margin:0 0 12px;font-size:13px;line-height:1.55;color:var(--text-2)}
.ckbanner-text b{color:var(--text)}
.ckbanner-acts{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.ckbanner-manage .ckbanner-body{max-height:70vh;max-height:65dvh;overflow:auto;-webkit-overflow-scrolling:touch}
/* ACCEPT AND REJECT ARE GENUINELY EQUAL, NOT button.btn NEXT TO button.ghost.
   Found during reconciliation, 11 Sep 2026: the earlier markup put "Accept
   all" on the app's one celebratory accent-fill style and "Reject
   non-essential" on the same subordinate outline style as "Manage" - the
   exact dark pattern a consent gate exists to refuse to be. Neither choice
   gets the lime accent here (that colour is reserved elsewhere for a genuine
   positive outcome, e.g. a Daily Last win) - both share IDENTICAL size,
   weight, border and radius, a solid --text-on-card fill that inverts
   correctly in both themes, and differ only in their words. "Manage" alone
   stays visually lighter (.ghost): it does not decide anything, it opens the
   choices. */
.ckbtn{font-family:'Hanken Grotesk',sans-serif;font-weight:700;font-size:14px;
  color:var(--card);background:var(--text);border:none;border-radius:999px;
  padding:12px 20px;cursor:pointer;box-shadow:none;
  transition:transform .09s ease,box-shadow .16s ease}
.ckbtn:active{transform:translateY(1px) scale(.985)}
.ckbtn:focus-visible{outline:2px solid var(--accent-fg);outline-offset:2px}
.ckrow{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
  padding:10px 0;border-top:1px solid var(--border-2)}
.ckrow:first-of-type{border-top:none}
.cktext{display:flex;flex-direction:column;gap:2px;min-width:0}
.cktext b{font-size:13px;color:var(--text)}
.ckdesc{font-size:12px;line-height:1.5;color:var(--text-3)}
.ckalways{flex:none;font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--accent-fg);font-weight:700;padding-top:3px}
/* A real switch, not a checkbox pretending to be one - the granular categories
   are a permanent control (reopened from the footer, see openCookiePreferences
   in cookie-consent.js), and this is the same on/off metaphor Account
   Preferences already uses for every other toggle in the app. */
.ckswitch{position:relative;flex:none;width:40px;height:24px}
.ckswitch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.ckslider{position:absolute;inset:0;background:var(--track);border-radius:999px;
  transition:background .15s ease}
.ckslider::before{content:"";position:absolute;left:3px;top:3px;width:18px;height:18px;
  border-radius:50%;background:var(--card);box-shadow:0 1px 3px rgba(0,0,0,.35);
  transition:transform .15s ease}
.ckswitch input:checked+.ckslider{background:var(--accent)}
.ckswitch input:checked+.ckslider::before{transform:translateX(16px)}
.ckswitch input:focus-visible+.ckslider{outline:2px solid var(--accent-fg);outline-offset:2px}
@media(max-width:420px){ .ckbanner-acts{justify-content:stretch}
  .ckbanner-acts button{flex:1 1 auto} }


#cookieConsentRoot .btn{font:inherit;font-weight:700;background:var(--accent);color:#111b12;border:0;border-radius:999px;padding:12px 20px;cursor:pointer}
