/* Chorebook — single stylesheet. Burgundy & brass, light + dark. */

:root{
  --ink:#3A1E27;
  --wine:#6E2639;
  --wine-strong:#57202E;
  --brass:#B8905F;
  --brass-deep:#96703F;
  --brass-bright:#D9B278;
  --bg:#F7F2E9;
  --paper:#FFFFFF;
  --line:#E2D8C8;
  --text:#332830;
  --muted:#7A7069;
  --rust:#A34129;
  --rust-bg:#FAEFEA;
  --rust-line:#E7CBBE;
  --track:#EADFCE;
  --favor-bg-1:#42222C;
  --favor-bg-2:#3A1E27;
  --favor-track:#573440;
  --head:#3A1E27;
  --appbar-text:#F7F2E9;
  --appbar-sub:#D8C6CB;
  --shadow:0 10px 30px rgba(58,30,39,.12);
}
html[data-theme="dark"]{
  --bg:#1C1216; --paper:#2A1B21; --line:#43303A; --text:#EFE6E0; --muted:#A9989E;
  --head:#EBD8B8; --track:#3B282F; --rust-bg:#3A2119; --rust-line:#5C3527; --rust:#E08A6B;
  --favor-bg-1:#42222C; --favor-bg-2:#2A151C; --favor-track:#4C2F3A;
  --shadow:0 10px 30px rgba(0,0,0,.4);
}
@media (prefers-color-scheme: dark){
  html:not([data-theme="light"]):not([data-theme="dark"]){
    --bg:#1C1216; --paper:#2A1B21; --line:#43303A; --text:#EFE6E0; --muted:#A9989E;
    --head:#EBD8B8; --track:#3B282F; --rust-bg:#3A2119; --rust-line:#5C3527; --rust:#E08A6B;
    --favor-bg-1:#42222C; --favor-bg-2:#2A151C; --favor-track:#4C2F3A;
    --shadow:0 10px 30px rgba(0,0,0,.4);
  }
}

*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{
  background:var(--bg);color:var(--text);
  font-family:'Alegreya Sans',-apple-system,sans-serif;font-size:16px;line-height:1.5;
  padding-bottom:env(safe-area-inset-bottom);
  overscroll-behavior-y:contain;
}
button{font:inherit;border:0;background:none;color:inherit;cursor:pointer}
input,select,textarea{font:inherit;color:var(--text);background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:10px 12px;width:100%}
input:focus,select:focus,textarea:focus,button:focus-visible{outline:2px solid var(--brass);outline-offset:2px}
h1,h2,h3,.serif{font-family:'Cinzel',serif;color:var(--head);letter-spacing:.03em;font-weight:600}
.hide{display:none!important}

/* ---------- app bar ---------- */
.appbar{
  position:sticky;top:0;z-index:20;background:var(--ink);color:var(--appbar-text);
  padding:calc(10px + env(safe-area-inset-top)) 16px 10px;
  display:flex;align-items:center;gap:10px;
}
.appbar .brand{font-family:'Cinzel',serif;color:var(--brass);font-size:16px;font-weight:700;letter-spacing:.08em}
.appbar .sub{margin-left:auto;font-size:13px;color:var(--appbar-sub)}
.appbar .gear{font-size:19px;padding:4px 2px 4px 10px;color:var(--appbar-sub)}

/* ---------- layout ---------- */
.page{max-width:560px;margin:0 auto;padding:0 0 40px}
.greet{padding:18px 16px 4px}
.greet h2{font-size:22px}
.greet p{color:var(--muted);font-size:14px}
.section-label{font-family:'Cinzel',serif;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);padding:18px 16px 6px}

/* ---------- progress ---------- */
.progress{margin:12px 16px 2px;background:var(--track);border-radius:99px;height:10px;overflow:hidden}
.progress i{display:block;height:100%;background:linear-gradient(90deg,var(--brass),var(--brass-deep));border-radius:99px;transition:width .5s cubic-bezier(.2,.8,.2,1)}
.plabel{margin:2px 16px 0;font-size:12px;color:var(--muted);text-align:right}

/* ---------- tabs ---------- */
.tabs{display:flex;gap:8px;padding:12px 16px 4px}
.tab{flex:1;text-align:center;padding:9px 0;border-radius:99px;font-weight:700;font-size:14px;border:1px solid var(--line);color:var(--muted);background:var(--paper)}
.tab.on{background:var(--wine);border-color:var(--wine);color:#fff}

/* ---------- chores ---------- */
.chores{padding:10px 12px 4px;display:flex;flex-direction:column;gap:9px}
.chore{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:12px;display:flex;gap:12px;align-items:flex-start;box-shadow:var(--shadow)}
.chore.due-later{opacity:.65}
.box{
  width:28px;height:28px;border-radius:8px;border:2px solid var(--wine);flex:none;margin-top:1px;
  display:grid;place-items:center;background:var(--paper);font-weight:800;transition:transform .12s;
}
.box:active{transform:scale(.88)}
.box.done{background:var(--brass);border-color:var(--brass-deep);color:#fff}
.box.miss{border-color:var(--rust);background:var(--rust-bg);color:var(--rust)}
.chore .body{flex:1;min-width:0}
.chore .t{font-weight:700;font-size:15.5px;color:var(--head)}
.chore.is-done .t{text-decoration:line-through;color:var(--muted)}
.chore .d{font-size:12.5px;color:var(--muted)}
.chore .cant{font-size:12.5px;font-weight:700;color:var(--rust);padding:4px 2px 0;display:inline-block}
.reason-wrap{margin-top:8px}
.reason-wrap select{font-size:14px;background:var(--bg)}
.reason-tag{display:inline-block;margin-top:6px;font-size:12px;font-weight:700;color:var(--rust);background:var(--rust-bg);border:1px solid var(--rust-line);border-radius:99px;padding:2px 10px}
.ruled{font-size:11.5px;color:var(--muted);margin-left:6px}
.empty{padding:26px 16px;text-align:center;color:var(--muted);font-style:italic}

/* ---------- Royal Favor ---------- */
.favor{
  margin:16px 12px;border-radius:18px;padding:15px 16px;color:#F3E7DC;
  background:linear-gradient(180deg,var(--favor-bg-1),var(--favor-bg-2));
  border:1px solid #5A3441;box-shadow:var(--shadow);
}
.favor .fh{display:flex;align-items:baseline;gap:8px}
.favor .fh b{font-family:'Cinzel',serif;font-size:13px;letter-spacing:.14em;color:var(--brass)}
.favor .fh span{margin-left:auto;font-family:'Cinzel',serif;font-size:26px;color:#fff;font-weight:700}
.favor .bar{margin-top:9px;height:13px;border-radius:99px;background:var(--favor-track);overflow:hidden}
.favor .bar i{display:block;height:100%;background:linear-gradient(90deg,var(--brass-deep),var(--brass-bright));border-radius:99px;transition:width .6s cubic-bezier(.2,.8,.2,1)}
.favor .fx{display:flex;justify-content:space-between;font-size:10.5px;color:#C9B3BA;margin-top:5px;letter-spacing:.08em}
.favor .fnote{font-size:13px;color:#E4D4D9;margin-top:8px}
.favor .fnote em{color:var(--brass-bright);font-style:normal;font-weight:700}
.favor .ask{margin-top:12px;width:100%;background:var(--brass);color:#2A151C;font-weight:800;border-radius:12px;padding:11px;letter-spacing:.04em;font-size:14px}

/* ---------- cards / admin ---------- */
.card{background:var(--paper);border:1px solid var(--line);border-radius:16px;margin:9px 12px;padding:13px;box-shadow:var(--shadow)}
.kidcard{border-left:4px solid var(--brass)}
.kidcard h3{font-size:16px;display:flex;align-items:baseline}
.kidcard h3 .fv{margin-left:auto;color:var(--brass-deep);font-size:15px;font-family:'Cinzel',serif}
.kidcard .meta{font-size:13px;color:var(--muted);margin:2px 0 8px}
.mini{background:var(--track);border-radius:99px;height:8px;overflow:hidden}
.mini i{display:block;height:100%;background:var(--wine);border-radius:99px}
.row{display:flex;gap:8px;margin-top:11px}
.btn{flex:1;text-align:center;font-size:13.5px;font-weight:800;padding:10px 4px;border-radius:11px;letter-spacing:.02em}
.btn.brass{background:var(--brass);color:#2A151C}
.btn.wine{background:var(--wine);color:#fff}
.btn.ghost{border:1.5px solid var(--wine);color:var(--wine)}
html[data-theme="dark"] .btn.ghost{border-color:var(--brass);color:var(--brass-bright)}
@media (prefers-color-scheme: dark){
  html:not([data-theme="light"]):not([data-theme="dark"]) .btn.ghost{border-color:var(--brass);color:var(--brass-bright)}
}
.btn.danger{border:1.5px solid var(--rust);color:var(--rust)}
.btn:disabled{opacity:.5}
.chip{margin:9px 12px 0;background:var(--rust-bg);border:1px solid var(--rust-line);color:var(--rust);border-radius:12px;padding:10px 12px;font-size:13.5px}
.fab{
  position:fixed;right:18px;bottom:calc(18px + env(safe-area-inset-bottom));z-index:15;
  background:var(--ink);color:var(--brass);border-radius:16px;padding:13px 18px;
  font-weight:800;letter-spacing:.05em;font-size:14px;box-shadow:0 8px 24px rgba(0,0,0,.35);
}
.reqcard .rt{font-weight:800;color:var(--head);font-size:15px}
.reqcard .rd{font-size:12.5px;color:var(--muted)}
.odds{margin-top:6px;font-size:13.5px}
.odds b{font-family:'Cinzel',serif;color:var(--wine);font-size:17px}
html[data-theme="dark"] .odds b{color:var(--brass-bright)}
.pill{display:inline-block;font-size:11.5px;font-weight:800;border-radius:99px;padding:2px 10px;letter-spacing:.04em}
.pill.granted{background:#E8F0E4;color:#3E6B33;border:1px solid #C9DCC1}
.pill.denied{background:var(--rust-bg);color:var(--rust);border:1px solid var(--rust-line)}
.pill.pending{background:var(--track);color:var(--muted)}
.pill.size{background:transparent;border:1px solid var(--line);color:var(--muted)}

/* ---------- login ---------- */
.login{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px 20px;gap:4px}
.login h1{font-size:26px;margin-top:12px}
.login .sub{color:var(--muted);font-size:14px}
.avatars{display:flex;gap:14px;margin:20px 0 4px;flex-wrap:wrap;justify-content:center}
.av{width:68px;display:flex;flex-direction:column;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--muted)}
.av i{width:56px;height:56px;border-radius:50%;background:var(--track);border:2px solid transparent;display:grid;place-items:center;font-style:normal;font-family:'Cinzel',serif;font-size:20px;color:var(--wine)}
.av.on i{border-color:var(--brass);background:var(--ink);color:var(--brass)}
.av.on{color:var(--head)}
.dots{display:flex;gap:14px;margin:16px 0 2px;min-height:16px}
.dots i{width:14px;height:14px;border-radius:50%;border:2px solid var(--wine)}
.dots i.f{background:var(--wine)}
html[data-theme="dark"] .dots i{border-color:var(--brass)} html[data-theme="dark"] .dots i.f{background:var(--brass)}
.pad{display:grid;grid-template-columns:repeat(3,72px);gap:11px;margin-top:12px}
.key{height:56px;border-radius:15px;background:var(--paper);border:1px solid var(--line);display:grid;place-items:center;font-weight:800;font-size:19px;color:var(--head);box-shadow:var(--shadow)}
.key:active{transform:scale(.94)}
.bio{margin-top:16px;font-size:14.5px;color:var(--wine);font-weight:800}
html[data-theme="dark"] .bio{color:var(--brass-bright)}
.shake{animation:shake .35s}
@keyframes shake{20%{transform:translateX(-7px)}40%{transform:translateX(7px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}

/* ---------- modal ---------- */
.overlay{position:fixed;inset:0;background:rgba(20,10,14,.55);z-index:40;display:flex;align-items:flex-end;justify-content:center}
.sheet{background:var(--bg);border-radius:22px 22px 0 0;width:100%;max-width:560px;padding:20px 18px calc(24px + env(safe-area-inset-bottom));max-height:88dvh;overflow:auto}
.sheet h3{font-size:18px;margin-bottom:12px}
.field{margin-bottom:12px}
.field label{display:block;font-size:13px;font-weight:700;color:var(--muted);margin-bottom:5px;letter-spacing:.03em}
.seg{display:flex;gap:7px}
.seg button{flex:1;padding:9px 4px;border-radius:11px;border:1.5px solid var(--line);font-weight:700;font-size:13.5px;color:var(--muted);background:var(--paper)}
.seg button.on{border-color:var(--wine);background:var(--wine);color:#fff}

/* ---------- settings ---------- */
.setrow{display:flex;align-items:center;gap:10px;padding:13px 4px;border-bottom:1px solid var(--line)}
.setrow:last-child{border:0}
.setrow .sl{flex:1}
.setrow .sl b{display:block;font-size:15px;color:var(--head)}
.setrow .sl span{font-size:12.5px;color:var(--muted)}
.setrow .btn{flex:none;padding:8px 14px}

/* ---------- toast ---------- */
#toast{
  position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(20px);
  background:var(--ink);color:var(--brass-bright);font-weight:700;font-size:14px;
  padding:11px 18px;border-radius:99px;opacity:0;pointer-events:none;transition:all .25s;z-index:60;
  max-width:88vw;text-align:center;box-shadow:0 8px 24px rgba(0,0,0,.4);
}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

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

/* active bonuses inside the Favor card */
.fbon{margin-top:8px;padding-top:8px;border-top:1px solid #5A3441;font-size:12.5px;color:#E4D4D9;display:flex;flex-direction:column;gap:3px}

/* ---------- dice roll overlay ---------- */
.dicebox{background:linear-gradient(180deg,var(--favor-bg-1),var(--favor-bg-2));border:1px solid #5A3441;border-radius:22px;padding:26px 22px;margin:auto;width:min(88vw,340px);text-align:center;color:#F3E7DC;position:relative;overflow:hidden}
.overlay:has(.dicebox){align-items:center}
.dicebox .dt{font-size:14px;color:var(--brass);letter-spacing:.06em;margin-bottom:14px}
.die{font-size:72px;font-weight:700;color:#fff;line-height:1;min-height:76px;text-shadow:0 4px 18px rgba(217,178,120,.35)}
.oddsbar{margin:16px 8px 0;height:12px;border-radius:99px;background:var(--favor-track);overflow:hidden}
.oddsbar i{display:block;height:100%;background:linear-gradient(90deg,var(--brass-deep),var(--brass-bright));border-radius:99px}
.oddstxt{font-size:12.5px;color:#C9B3BA;margin-top:6px;letter-spacing:.04em}
.stamp{position:absolute;top:44%;left:50%;transform:translate(-50%,-50%) rotate(-14deg) scale(3);opacity:0;font-family:'Cinzel',serif;font-weight:700;font-size:34px;letter-spacing:.12em;padding:6px 18px;border:4px solid;border-radius:10px;pointer-events:none;transition:all .28s cubic-bezier(.2,1.4,.4,1)}
.stamp.show{opacity:1;transform:translate(-50%,-50%) rotate(-14deg) scale(1)}
.stamp.granted{color:#8FD08A;border-color:#8FD08A}
.stamp.denied{color:#E08A6B;border-color:#E08A6B}

/* ---------- photo proof & chart ---------- */
.proof{display:block;margin-top:8px;max-width:180px;max-height:130px;border-radius:10px;border:1px solid var(--line);object-fit:cover}
.chart{display:block;width:100%;height:110px}

/* ---------- confetti ---------- */
.cf{position:fixed;top:-14px;width:8px;height:13px;z-index:75;border-radius:2px;pointer-events:none;animation:cfall linear forwards}
@keyframes cfall{to{transform:translateY(106vh) rotate(680deg);opacity:.75}}

/* ---------- the woven banner ---------- */
.flagbox{margin:12px auto 2px;max-width:340px;border-left:4px solid var(--brass-deep);padding-left:9px;text-align:left}
.wv-days,.wv-row{display:grid;grid-template-columns:18px repeat(7,1fr);gap:4px;align-items:center;margin-bottom:4px}
.wv-days span{font-size:10px;color:var(--muted);text-align:center;letter-spacing:.05em}
.wv-row b{font-family:'Cinzel',serif;font-size:12px;color:var(--head)}
.wv{display:block;height:26px;border-radius:5px;border:1px solid var(--line)}
.wv.gold{background:linear-gradient(180deg,#D9B278,#B8905F);border-color:#96703F}
.wv.wine{background:var(--wine);border-color:var(--wine-strong)}
.wv.dark{background:#2A151C;border-color:#43303A}
.wv.future{background:transparent;border-style:dashed}
.wv.today{background:transparent;border:2px solid var(--brass);animation:wvpulse 1.8s ease-in-out infinite}
.wv.free{background:var(--track)}
.wv.rest{background:repeating-linear-gradient(45deg,var(--track),var(--track) 4px,var(--bg) 4px,var(--bg) 8px)}
.wv-key{font-size:10px;color:var(--muted);margin-top:2px;letter-spacing:.02em}
@keyframes wvpulse{50%{opacity:.45}}
