:root {
  --sky:   #bfe6f2;
  --sky2:  #eaf7fc;
  --grass: #5aa02c;
  --grass-d:  #3f7d1e;
  --grass-dd: #2f6415;
  --sun:   #ffd23f;
  --teal:  #17a2b8;
  --coral: #ff6b6b;
  --green: #2e7d32;   /* brand green (headings) */
  --green-d: #1b5e20;
  --gold:  #f4a72c;   /* sunny accent (buttons) */
  --amber: #e8891a;
  --good:  #2a9d8f;
  --bad:   #e76f51;
  --card:  #ffffff;
  --text:  #1b2430;
  --muted: #6b7785;
  --frost: #eef6ee;
}

* { box-sizing: border-box; }
html, body { margin: 0; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  color: var(--text);
  background: var(--frost);
  -webkit-text-size-adjust: 100%;
}

/* ---------------- Hero / scenery ---------------- */
.hero { position: relative; overflow: hidden; color: #fff; }
.scenery { position: relative; height: 210px;
  background: linear-gradient(180deg, var(--sky2) 0%, var(--sky) 55%, #d8eeb6 78%, #cfe8a6 100%); }

.sun { position: absolute; top: 22px; right: 34px; width: 58px; height: 58px; border-radius: 50%;
  background: radial-gradient(circle at 50% 50%, #fff3b0, var(--sun) 60%, #f7b733);
  box-shadow: 0 0 30px 10px rgba(255,210,63,0.55); animation: pulse 6s ease-in-out infinite; }
@keyframes pulse { 0%,100% { transform: scale(1); opacity: .95; } 50% { transform: scale(1.06); opacity: 1; } }

.cloud { position: absolute; height: 20px; border-radius: 20px; background: #ffffff; opacity: .9;
  box-shadow: 18px 4px 0 -2px #fff, 38px 2px 0 -4px #fff; filter: blur(.3px); }
.cloud::after { content:""; position:absolute; top:-9px; left:14px; width:26px; height:20px; border-radius:50%; background:#fff; }
.c1 { top: 34px; left: -60px; width: 46px; animation: cloud 40s linear infinite; }
.c2 { top: 66px; left: -80px; width: 34px; opacity:.75; animation: cloud 58s linear infinite 8s; }
@keyframes cloud { from { transform: translateX(0); } to { transform: translateX(140vw); } }

/* Rolling hills */
.hills { position: absolute; bottom: 0; left: 0; width: 100%; height: 150px; }
.hill { stroke: none; }
.hill.h3 { fill: #9cc96a; }
.hill.h2 { fill: #6fae3a; }
.hill.h1 { fill: var(--grass-d); }

/* The cyclist in the Hawaiian shirt, pedalling over the hills */
.rider { position: absolute; bottom: 8px; left: 0; width: 122px; height: 92px;
  animation: ride 10s linear infinite; will-change: transform; }
@keyframes ride {
  0%   { transform: translate(-170px, 10px) rotate(-2deg); }
  14%  { transform: translate(12vw, -4px)  rotate(-7deg); }  /* climbing */
  28%  { transform: translate(28vw, 8px)   rotate(4deg);  }  /* over the crest */
  46%  { transform: translate(46vw, -10px) rotate(-8deg); }  /* the big one */
  64%  { transform: translate(66vw, 6px)   rotate(4deg);  }
  82%  { transform: translate(88vw, -2px)  rotate(-4deg); }
  100% { transform: translate(118vw, 10px) rotate(-2deg); }
}
.rider .tyre  { fill: none; stroke: #22303a; stroke-width: 2.4; }
.rider .spokes line { stroke: #9fb0bb; stroke-width: 1; }
.rider .spokes { transform-box: fill-box; transform-origin: center; animation: spin .7s linear infinite; }
.rider .hub   { fill: #22303a; }
.rider .frame { fill: none; stroke: #c0392b; stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }
.rider .crank { stroke: #22303a; stroke-width: 2; stroke-linecap: round; }
.rider .leg, .rider .arm { fill: none; stroke: #e6b98a; stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; }
.rider .head  { fill: #e6b98a; }
.rider .helmet{ fill: #2e7d32; }
.rider .torso { fill: var(--teal); }
.rider .sleeve{ fill: #0f7a8c; transform-box: fill-box; transform-origin: 62px 34px; animation: flap 1.4s ease-in-out infinite; }
.rider .floral.f-a { fill: var(--coral); }
.rider .floral.f-b { fill: var(--sun); }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes flap { 0%,100% { transform: rotate(0deg); } 50% { transform: rotate(-10deg); } }

.hero-text { padding: 14px 18px 18px; background: var(--green); }
.hero-text h1 { margin: 0; font-size: 1.7rem; letter-spacing: 0.5px; }
.tagline { margin: 4px 0 10px; color: #d7f0c4; font-size: 0.95rem; }

/* Hawaiian shirt on a hanger, swaying in the breeze */
.shirt-badge { display: flex; align-items: center; gap: 12px; }
.shirt-badge .hanger { position: relative; width: 26px; height: 12px; border: 2px solid #d9dde2;
  border-bottom: none; border-radius: 14px 14px 0 0; }
.shirt-badge .hanger::before { content:""; position:absolute; top:-6px; left:50%; width:6px; height:8px;
  border: 2px solid #d9dde2; border-bottom:none; border-radius:6px 6px 0 0; transform: translateX(-50%); }
.shirt.hang { width: 44px; height: 44px; margin-left: -30px; transform-origin: top center;
  animation: sway 3.2s ease-in-out infinite; filter: drop-shadow(0 2px 3px rgba(0,0,0,0.3)); }
@keyframes sway { 0%,100% { transform: rotate(-5deg); } 50% { transform: rotate(5deg); } }
.cheers { font-weight: 700; color: var(--sun); }

/* ---------------- Stat strip ---------------- */
.stat-strip { text-align: center; background: var(--green-d); color: #eaf7d9;
  font-size: 0.85rem; padding: 8px 12px; }

/* ---------------- Tabs ---------------- */
.tabs { display: flex; position: sticky; top: 0; z-index: 5;
  background: var(--card); box-shadow: 0 2px 6px rgba(0,0,0,0.08); }
.tab { flex: 1; padding: 12px 4px; border: none; background: none; font-size: 0.9rem; cursor: pointer;
  color: var(--muted); border-bottom: 3px solid transparent; }
.tab.active { color: var(--green); border-bottom-color: var(--gold); font-weight: 700; }

main { max-width: 720px; margin: 0 auto; padding: 16px; position: relative; z-index: 1; }
.panel { display: none; }
.panel.active { display: block; }
h2 { color: var(--green); margin: 6px 0 14px; display: flex; align-items: center; justify-content: center; gap: 10px; }

/* shirt decorations */
.shirt-deco { width: 22px; height: 22px; flex: none; filter: drop-shadow(0 1px 1px rgba(0,0,0,0.15)); }
.shirt-deco.tiny { width: 20px; height: 20px; opacity: 0.9; margin-top: 2px; }
.shirt-divider { display: flex; gap: 16px; justify-content: center; align-items: center; margin: 14px 0 4px; }
.shirt-divider .shirt-deco { width: 26px; height: 26px; opacity: .9; }
.shirt-divider .shirt-deco:nth-child(2n) { filter: hue-rotate(140deg) drop-shadow(0 1px 1px rgba(0,0,0,0.15)); }
.shirt-divider .shirt-deco:nth-child(3n) { filter: hue-rotate(-70deg) drop-shadow(0 1px 1px rgba(0,0,0,0.15)); }

/* background drifting Hawaiian shirts */
.bg-shirts { position: fixed; inset: 0; pointer-events: none; z-index: 0; overflow: hidden; }
.shirt.bg { position: absolute; opacity: 0.14; }
.s1 { top: 26%; left: -10%; width: 90px;  animation: drift-shirt 46s linear infinite; }
.s2 { top: 54%; left: -10%; width: 60px;  animation: drift-shirt 60s linear infinite 7s;  filter: hue-rotate(130deg); }
.s3 { top: 70%; left: -10%; width: 120px; animation: drift-shirt 72s linear infinite 14s; filter: hue-rotate(-60deg); }
.s4 { top: 14%; left: -10%; width: 50px;  animation: drift-shirt 52s linear infinite 22s; filter: hue-rotate(60deg); }
.s5 { top: 84%; left: -10%; width: 74px;  animation: drift-shirt 64s linear infinite 4s;  filter: hue-rotate(200deg); }
.s6 { top: 40%; left: -10%; width: 44px;  animation: drift-shirt 80s linear infinite 30s; filter: hue-rotate(-30deg); }
@keyframes drift-shirt {
  0%   { transform: translateX(0) translateY(0) rotate(-8deg); }
  25%  { transform: translateX(32vw) translateY(-18px) rotate(6deg); }
  50%  { transform: translateX(64vw) translateY(10px) rotate(-6deg); }
  75%  { transform: translateX(96vw) translateY(-14px) rotate(8deg); }
  100% { transform: translateX(128vw) translateY(6px) rotate(-8deg); }
}

/* ---------------- Forms / cards ---------------- */
.card { background: var(--card); border-radius: 14px; padding: 16px; box-shadow: 0 4px 14px rgba(46,125,50,0.10); }
label { display: block; font-size: 0.85rem; color: var(--muted); margin-bottom: 12px; font-weight: 600; }
input, select { width: 100%; padding: 12px; margin-top: 5px; border: 1px solid #cdd6df; border-radius: 10px;
  font-size: 1rem; background: #fff; color: var(--text); }
input:focus, select:focus { outline: 2px solid var(--teal); border-color: var(--teal); }
.hint { color: var(--muted); font-size: 0.8rem; margin: 2px 0 12px; }
.formmsg { font-size: 0.9rem; margin: 8px 0 0; min-height: 1.1em; }
.formmsg.ok { color: var(--good); } .formmsg.err { color: var(--bad); }

.splitters { border: 1px solid #e1e8ef; border-radius: 10px; padding: 10px 12px; margin-bottom: 14px; }
.splitters legend { color: var(--green); font-weight: 700; font-size: 0.85rem; padding: 0 6px; }
.check { display: flex; align-items: center; gap: 10px; margin: 0; font-weight: 600; color: var(--text); }
.check input { width: auto; margin: 0; }

/* split mode toggle */
.split-mode { display: inline-flex; background: var(--frost); border-radius: 10px; padding: 3px; margin-bottom: 10px; }
.seg { border: none; background: none; padding: 7px 16px; border-radius: 8px; font-size: 0.85rem; font-weight: 700;
  color: var(--muted); cursor: pointer; }
.seg.active { background: var(--green); color: #fff; box-shadow: 0 2px 6px rgba(46,125,50,0.25); }

/* participant rows */
.prow { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 7px 0; border-bottom: 1px dashed #e6ecf2; }
.prow:last-child { border-bottom: none; }
.pshare { display: none; align-items: center; gap: 6px; }
.splitters.custom .pshare { display: flex; }
.pshare .cursym { color: var(--muted); font-size: 0.85rem; font-weight: 700; }
.pshare .pamt { width: 110px; margin: 0; padding: 8px 10px; }
/* in percentage mode the % reads better after the number */
.splitters.pct .pshare .cursym { order: 2; }

.split-hint { font-size: 0.82rem; margin: 8px 2px 0; color: var(--muted); font-weight: 600; }
.split-hint.good { color: var(--good); }
.split-hint.bad { color: var(--bad); }

button.primary { width: 100%; padding: 14px; border: none; border-radius: 12px; cursor: pointer;
  background: linear-gradient(180deg, var(--gold), var(--amber)); color: #4a2a00; font-size: 1.05rem; font-weight: 800;
  box-shadow: 0 4px 10px rgba(232,137,26,0.4); }
button.primary:active { transform: translateY(1px); }

/* ---------------- Balances ---------------- */
.bal-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; border-bottom: 1px solid #eef2f6; }
.bal-row:last-child { border-bottom: none; }
.bal-name { font-weight: 700; color: var(--green); }
.bal-sub { font-size: 0.78rem; color: var(--muted); }
.pos { color: var(--good); font-weight: 800; }
.neg { color: var(--bad); font-weight: 800; }
.settle { margin-top: 16px; }
.settle h3 { color: var(--green); margin: 0 0 8px; }
.settle-item { background: var(--frost); border-left: 4px solid var(--gold); border-radius: 8px;
  padding: 10px 12px; margin-bottom: 8px; font-weight: 600; }
.settle-item b { color: var(--green); }
.total-line { margin-top: 14px; text-align: center; color: var(--muted); font-size: 0.85rem; }

/* ---------------- History ---------------- */
.exp { background: var(--card); border-radius: 12px; padding: 12px 14px; margin-bottom: 10px;
  box-shadow: 0 2px 8px rgba(46,125,50,0.08); display: flex; gap: 12px; align-items: flex-start; }
.exp-main { flex: 1; }
.exp-title { font-weight: 700; color: var(--green); }
.exp-meta { font-size: 0.78rem; color: var(--muted); margin-top: 3px; }
.exp-amt { text-align: right; white-space: nowrap; }
.exp-gbp { font-weight: 800; color: var(--green); }
.tag { display: inline-block; background: var(--frost); color: var(--green-d); border-radius: 20px;
  padding: 1px 9px; font-size: 0.72rem; margin-right: 4px; }
.exp-actions { display: flex; gap: 2px; justify-content: flex-end; margin-top: 2px; }
.edit { background: none; border: none; color: var(--green-d); cursor: pointer; font-size: 1.05rem; padding: 2px 6px; }
.del { background: none; border: none; color: var(--bad); cursor: pointer; font-size: 1.1rem; padding: 2px 6px; }

/* edit-in-progress banner on the Add form */
.edit-banner[hidden] { display: none; }
.edit-banner { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  background: #fff3d6; border: 1px solid #f0d28a; color: #8a5a00; border-radius: 10px;
  padding: 9px 12px; margin-bottom: 14px; font-size: 0.85rem; font-weight: 600; }
.link-btn { background: none; border: none; color: var(--teal); cursor: pointer; font: inherit; text-decoration: underline; }
.link-btn.dark { color: #8a5a00; }

.shirt.foot { width: 24px; height: 24px; vertical-align: middle; opacity: 0.85; }

footer { text-align: center; color: var(--muted); font-size: 0.8rem; padding: 22px 16px 34px;
  display: flex; align-items: center; justify-content: center; gap: 8px; }

@media (min-width: 560px) {
  .hero-text h1 { font-size: 2rem; }
}

/* Respect users who prefer less motion */
@media (prefers-reduced-motion: reduce) {
  .rider, .rider .spokes, .rider .sleeve, .sun, .cloud,
  .shirt.bg, .shirt.hang { animation: none !important; }
}
