/* Pasture Studio. Charcoal + off-white (never pure black/white), one grass-green action
   colour, and a few cow spots by the name. Fun, organic, not too serious. */
/* fonts ship with the Studio: the page paints without waiting on another site */
@font-face{font-family:'Fraunces';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/fraunces-500-normal.woff2) format('woff2');}
@font-face{font-family:'Fraunces';font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/fraunces-600-normal.woff2) format('woff2');}
@font-face{font-family:'DM Sans';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/dm-sans-400-normal.woff2) format('woff2');}
@font-face{font-family:'DM Sans';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/dm-sans-500-normal.woff2) format('woff2');}
@font-face{font-family:'DM Sans';font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/dm-sans-700-normal.woff2) format('woff2');}
@font-face{font-family:'DM Mono';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/dm-mono-400-normal.woff2) format('woff2');}
@font-face{font-family:'DM Mono';font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/dm-mono-500-normal.woff2) format('woff2');}
:root {
  --paper: #f4f1eb; --paper-2: #ebe6dc; --card: #fbf9f5; --ink: #232221; --mute: #6b665f; --line: #d9d2c6;
  --grass: #4f7a45; --grass-dk: #3e6337; --on-grass: #f4f1eb; --warn: #a8642a; --bad: #a33b2b; --good: #3e6337;
  --serif: "Fraunces", Georgia, serif; --sans: "DM Sans", "Helvetica Neue", Arial, sans-serif; --mono: "DM Mono", ui-monospace, Menlo, monospace;
}
* { box-sizing: border-box; }
[hidden] { display: none !important; }
html, body { height: 100%; }
body { margin: 0; background: var(--paper); color: var(--ink); font: 400 15px/1.5 var(--sans); }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; border: 1px solid var(--line); background: var(--card); border-radius: 999px; padding: 8px 14px; }
button:hover { border-color: var(--ink); }
button.primary { background: var(--grass); border-color: var(--grass); color: var(--on-grass); font-weight: 700; }
button.primary:hover { background: var(--grass-dk); }
button:disabled { opacity: .5; cursor: default; }
:focus-visible { outline: 2px solid var(--grass); outline-offset: 2px; }

.spots { display: inline-block; width: 30px; height: 18px; background:
  radial-gradient(ellipse 6px 4px at 6px 6px, var(--ink) 95%, transparent),
  radial-gradient(ellipse 4px 5px at 11px 10px, var(--ink) 95%, transparent),
  radial-gradient(ellipse 3px 2px at 20px 4px, var(--ink) 95%, transparent),
  radial-gradient(ellipse 5px 3px at 24px 13px, var(--ink) 95%, transparent); }
.brand { display: flex; align-items: center; gap: 8px; }
.brand b { font: 600 1.6rem/1 var(--serif); }
.brand small { font: 500 .7rem/1 var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--mute); }
.brand.small b { font-size: 1.25rem; }

/* login */
/* sign-in: the brand on a charcoal field with a few cow spots, the form on paper beside it */
.loginBrand .mark { position: relative; display: block; width: clamp(130px, 20vw, 210px); height: auto; margin: 0 0 14px -6px; }
.brand .mark { display: block; width: 44px; height: auto; }
.login { min-height: 100%; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.loginBrand { position: relative; overflow: hidden; background: var(--ink); color: var(--paper); display: grid; align-content: end; padding: 48px max(32px, env(safe-area-inset-left)); }
.loginBrand .wordmark { position: relative; display: flex; align-items: center; gap: 12px; font: 600 clamp(2.6rem, 6vw, 4.2rem)/1 var(--serif); letter-spacing: -.01em; }
.loginBrand .spots { width: 48px; height: 29px; background:
  radial-gradient(ellipse 10px 6px at 10px 10px, var(--paper) 95%, transparent), radial-gradient(ellipse 6px 8px at 18px 17px, var(--paper) 95%, transparent),
  radial-gradient(ellipse 5px 3px at 32px 6px, var(--paper) 95%, transparent), radial-gradient(ellipse 8px 5px at 39px 21px, var(--paper) 95%, transparent); }
.loginBrand .tagline { position: relative; margin: 10px 0 0; font: 500 1.25rem/1.3 var(--sans); color: #D9BFA0; }
.login .card { align-self: center; justify-self: center; width: min(420px, calc(100% - 32px)); background: var(--card); border: 1px solid var(--line); border-radius: 18px; padding: 28px; display: grid; gap: 10px; margin: 32px 16px; box-shadow: 0 24px 60px -36px rgba(35,34,33,.5); }
.login h1 { font: 600 2rem/1.1 var(--serif); margin: 0; }
@media (max-width: 760px) {
  .login { grid-template-columns: 1fr; grid-template-rows: auto 1fr; }
  .loginBrand { padding: max(28px, env(safe-area-inset-top)) max(20px, env(safe-area-inset-left)) 26px; }
  .login .card { align-self: start; margin-top: -14px; }
}
.login p { margin: 0; color: var(--mute); }
.login form { display: grid; gap: 10px; margin-top: 10px; }
.login label { font: 500 .75rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--mute); }
.login input { border: 1px solid var(--line); border-radius: 12px; padding: 13px 14px; background: var(--paper); font-family: var(--mono); }
.err { color: var(--bad); min-height: 1.3em; }

/* top bar */
.top { position: sticky; top: 0; z-index: 5; display: flex; align-items: center; gap: 10px 18px; flex-wrap: wrap; padding: 10px max(16px, env(safe-area-inset-left)); padding-top: max(10px, env(safe-area-inset-top)); background: color-mix(in srgb, var(--paper) 94%, transparent); backdrop-filter: blur(8px); border-bottom: 1px solid var(--line); }
.top select { border: 1px solid var(--line); border-radius: 999px; padding: 6px 10px; background: var(--card); }
.tabs { display: flex; gap: 4px; flex-wrap: wrap; flex: 1; }
.tabs button { border: 0; background: transparent; padding: 8px 12px; border-radius: 999px; color: var(--mute); font-weight: 500; }
.tabs button[aria-selected="true"] { background: var(--ink); color: var(--paper); }
.pub { display: flex; align-items: center; gap: 8px; }
.chip { font: 500 .74rem/1 var(--mono); letter-spacing: .04em; padding: 7px 10px; border-radius: 999px; background: var(--paper-2); color: var(--mute); white-space: nowrap; }
.chip.draft { background: #f3e3cf; color: var(--warn); }
.chip.live { background: #dfe9d9; color: var(--good); }

/* edit */
main { padding: 16px max(16px, env(safe-area-inset-left)) 40px; }
.edit { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(320px, 1fr); gap: 16px; align-items: start; }
.previewWrap { min-width: 0; position: sticky; top: 76px; }
.ptools { display: flex; gap: 10px 16px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; font-size: .9rem; }
.ptools a { color: var(--mute); }
.seg { display: inline-flex; background: var(--paper-2); border-radius: 999px; padding: 3px; }
.seg button { border: 0; background: transparent; padding: 6px 12px; }
.seg button[aria-pressed="true"] { background: var(--card); box-shadow: 0 1px 3px rgba(35,34,33,.15); }
.tog { display: inline-flex; gap: 6px; align-items: center; color: var(--mute); }
.frame { background: #2a2928; border-radius: 14px; overflow: hidden; height: calc(100vh - 170px); min-height: 480px; display: grid; place-items: center; }
.frame iframe { width: 100%; height: 100%; border: 0; background: #1c1d1e; }
.frame.phone iframe { width: 390px; max-width: 100%; height: 100%; border-left: 1px solid #444; border-right: 1px solid #444; }
.hint { color: var(--mute); font-size: .85rem; margin: 6px 2px 0; }

.assist { background: var(--card); border: 1px solid var(--line); border-radius: 16px; display: flex; flex-direction: column; height: calc(100vh - 120px); min-height: 520px; min-width: 0; overflow: hidden; }
.assist .thread { flex: 1 1 auto; }
.thread { overflow-y: auto; padding: 16px; display: flex; flex-direction: column; gap: 12px; min-height: 0; }
.msg { max-width: 92%; padding: 10px 13px; border-radius: 14px; line-height: 1.45; white-space: pre-wrap; overflow-wrap: anywhere; }
.msg.me { align-self: flex-end; background: var(--ink); color: var(--paper); border-bottom-right-radius: 4px; }
.msg.them { align-self: flex-start; background: var(--paper-2); border-bottom-left-radius: 4px; }
.msg.sys { align-self: center; background: none; color: var(--mute); font-size: .85rem; text-align: center; }
.proposal { align-self: stretch; border: 1.5px solid var(--grass); border-radius: 14px; padding: 12px 14px; background: #f4f8f1; display: grid; gap: 8px; }
.proposal b { font: 600 1.05rem/1.3 var(--serif); }
.proposal ul { margin: 0; padding-left: 18px; font: 400 .8rem/1.45 var(--mono); color: var(--mute); }
.proposal details summary { cursor: pointer; color: var(--mute); font-weight: 600; width: max-content; min-height: 32px; display: flex; align-items: center; }
.proposal details ul { margin-top: 4px; }
.proposal .acts { display: flex; gap: 8px; flex-wrap: wrap; }
.proposal.done { border-color: var(--line); background: var(--paper); opacity: .8; }
.sugs { display: flex; gap: 6px; flex-wrap: wrap; padding: 0 14px 10px; }
.sugs button { font-size: .82rem; padding: 6px 10px; background: var(--paper); }
.composer { border-top: 1px solid var(--line); padding: 10px; display: grid; gap: 8px; background: var(--card); }
.composer textarea { width: 100%; resize: none; border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; background: var(--paper); min-height: 52px; }
.cbar { display: flex; gap: 8px; align-items: center; }
.cbar .grow { flex: 1; }
.round { width: 40px; height: 40px; border-radius: 50%; display: inline-grid; place-items: center; padding: 0; border: 1px solid var(--line); background: var(--card); cursor: pointer; font-size: 1.2rem; }
.micIcon { width: 12px; height: 18px; border: 2px solid currentColor; border-radius: 8px; position: relative; display: block; }
.micIcon::after { content: ""; position: absolute; left: 50%; bottom: -7px; width: 2px; height: 5px; background: currentColor; transform: translateX(-50%); }
#mic.on { background: var(--bad); border-color: var(--bad); color: var(--paper); animation: pulse 1.2s infinite; }
@keyframes pulse { 50% { box-shadow: 0 0 0 6px rgba(163,59,43,.18); } }
.picked { margin: 0 12px 10px; border: 1px dashed var(--grass); border-radius: 12px; padding: 10px 12px; background: #f4f8f1; display: grid; gap: 8px; }
.picked .lbl { font: 500 .72rem/1 var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--grass-dk); }
.picked textarea, .picked input { width: 100%; border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; background: var(--card); }
.picked .row { display: flex; gap: 8px; flex-wrap: wrap; }

/* pages */
.page { max-width: 980px; margin: 0 auto; }
.page h1 { font: 600 clamp(1.8rem, 4vw, 2.6rem)/1.1 var(--serif); margin: 8px 0 6px; }
.page .sub { color: var(--mute); margin: 0 0 22px; max-width: 64ch; }
.cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 22px; }
.stat { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 14px 16px; display: grid; gap: 4px; }
.stat span { font: 500 .7rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--mute); }
.stat b { font: 600 1.5rem/1.15 var(--serif); }
.stat small { color: var(--mute); }
table { width: 100%; border-collapse: collapse; background: var(--card); border: 1px solid var(--line); border-radius: 14px; overflow: hidden; }
th, td { text-align: left; padding: 12px 14px; border-bottom: 1px solid var(--line); vertical-align: top; }
th { font: 500 .7rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--mute); background: var(--paper-2); }
tr:last-child td { border-bottom: 0; }
td.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.tablewrap { overflow-x: auto; }
.pill { display: inline-block; font: 500 .72rem/1 var(--mono); padding: 5px 8px; border-radius: 999px; background: var(--paper-2); color: var(--mute); white-space: nowrap; }
.pill.yes { background: #dfe9d9; color: var(--good); }
.pill.no { background: #f3e3cf; color: var(--warn); }
.alerts { list-style: none; padding: 0; margin: 18px 0; display: grid; gap: 8px; }
.alerts li { background: var(--card); border: 1px solid var(--line); border-left: 4px solid var(--mute); border-radius: 10px; padding: 10px 12px; }
.alerts li.amber { border-left-color: var(--warn); } .alerts li.red, .alerts li.critical { border-left-color: var(--bad); }
.steps { counter-reset: s; list-style: none; padding: 0; display: grid; gap: 10px; }
.steps li { counter-increment: s; background: var(--card); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px 12px 52px; position: relative; }
.steps li::before { content: counter(s); position: absolute; left: 14px; top: 10px; width: 26px; height: 26px; border-radius: 50%; background: var(--ink); color: var(--paper); display: grid; place-items: center; font: 600 .85rem/1 var(--serif); }
.big-actions { display: flex; gap: 10px; flex-wrap: wrap; margin: 18px 0; }
.big-actions a, .big-actions button { text-decoration: none; display: inline-flex; align-items: center; gap: 8px; border-radius: 999px; padding: 12px 18px; border: 1px solid var(--ink); color: var(--ink); background: var(--card); font-weight: 700; }
.big-actions .primary { background: var(--grass); border-color: var(--grass); color: var(--on-grass); }
.hist { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.hist li { background: var(--card); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; display: grid; grid-template-columns: 1fr auto; gap: 4px 12px; align-items: center; }
.hist .when { font: 400 .8rem/1.3 var(--mono); color: var(--mute); }
.hist .det { grid-column: 1 / -1; font: 400 .78rem/1.4 var(--mono); color: var(--mute); }
.promise { background: var(--ink); color: var(--paper); border-radius: 16px; padding: 18px 20px; margin: 10px 0 22px; }
.promise h2 { font: 600 1.3rem/1.2 var(--serif); margin: 0 0 8px; }
.promise ul { margin: 0; padding-left: 18px; }

.toast { position: fixed; left: 50%; bottom: max(18px, env(safe-area-inset-bottom)); transform: translateX(-50%); background: var(--ink); color: var(--paper); padding: 12px 16px; border-radius: 999px; box-shadow: 0 10px 30px rgba(35,34,33,.3); z-index: 50; max-width: calc(100vw - 32px); display: flex; gap: 12px; align-items: center; }
.toast button { background: transparent; color: var(--paper); border-color: rgba(244,241,235,.4); padding: 5px 10px; }

@media (max-width: 920px) {
  .edit { grid-template-columns: 1fr; }
  .previewWrap { position: static; }
  .frame { height: 62vh; min-height: 360px; }
  .assist { height: auto; min-height: 0; }
  .assist .thread { min-height: 220px; max-height: 46vh; }
  .cards { grid-template-columns: 1fr; }
  .tabs { order: 3; flex-basis: 100%; overflow-x: auto; flex-wrap: nowrap; }
  .tabs button { white-space: nowrap; }
}

/* look panel + "showing it now" */
.picked .looks .opt { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px 6px 8px; background: var(--card); }
.picked .looks .opt[aria-pressed="true"] { border-color: var(--grass); box-shadow: inset 0 0 0 1px var(--grass); }
.picked .sw { display: inline-flex; } .picked .sw i { width: 14px; height: 14px; border-radius: 50%; border: 1px solid var(--line); margin-right: -4px; }
.picked .aa { font-size: 1.15rem; font-weight: 800; line-height: 1; min-width: 26px; }
.picked input[type="color"] { width: 46px; height: 34px; padding: 2px; border-radius: 10px; }
.picked .note { margin: 0; font-size: .82rem; color: var(--mute); }
.proposal .seen { color: var(--grass-dk); font-size: .8rem; }
.sugs .lookBtn { border-color: var(--grass); color: var(--grass-dk); font-weight: 700; }
.frame.trying { outline: 3px solid var(--grass); outline-offset: -3px; }

.openq { background: var(--card); border: 1px dashed var(--warn); border-radius: 14px; padding: 14px 18px; margin: 18px 0; }
.openq h2 { font: 600 1.1rem/1.2 var(--serif); margin: 0 0 6px; }
.openq ul { margin: 0; padding-left: 18px; color: var(--mute); }

/* phone first (Bates edits from his phone): the site stays in view at the top, the
   composer stays at the bottom, and the conversation scrolls between them. */
@media (max-width: 640px) {
  .top { position: static; gap: 8px 10px; padding-block: max(8px, env(safe-area-inset-top)) 8px; }
  .brand.small b { font-size: 1.1rem; }
  .pub { margin-left: auto; }
  .pub .chip { font-size: .68rem; padding: 6px 8px; }
  .pub .primary { padding: 7px 14px; }
  .tabs { scrollbar-width: none; margin: 0 -4px; }
  .tabs::-webkit-scrollbar { display: none; }
  .tabs button { padding: 7px 11px; font-size: .92rem; }
  main { padding-top: 8px; padding-bottom: 0; }
  .edit { gap: 10px; }
  .ptools, .hint { display: none; }
  .previewWrap { position: sticky; top: 0; z-index: 4; background: var(--paper); padding-block: env(safe-area-inset-top, 0px) 8px; margin-inline: -4px; }
  .frame { height: 40vh; min-height: 250px; border-radius: 12px; }
  .frame.phone iframe { width: 100%; border: 0; }
  .assist { overflow: visible; border-radius: 14px; }
  .assist .thread { max-height: none; min-height: 0; overflow: visible; padding: 12px; }
  .msg { max-width: 100%; }
  .sugs { padding: 0 12px 8px; }
  .composer { position: sticky; bottom: 0; z-index: 3; background: var(--card); border-radius: 0 0 14px 14px; padding-bottom: max(10px, env(safe-area-inset-bottom)); box-shadow: 0 -8px 16px -12px rgba(35,34,33,.35); }
  .composer textarea { font-size: 16px; } /* 16px stops iPhone zooming into the box */
  .thread > * { scroll-margin-bottom: 170px; } /* a new card stops above the typing box, so Yes is always in reach */
  .proposal ul { font-size: .74rem; }
  /* tables on What I own / Costs become one card per row, so nothing hides off the right edge */
  .page table, .page tbody, .page tr, .page td { display: block; width: 100%; }
  .page thead { display: none; }
  .page tr { padding: 12px 14px; border-bottom: 1px solid var(--line); }
  .page tr:last-child { border-bottom: 0; }
  .page td { border: 0; padding: 2px 0; }
  .page td.num { text-align: left; white-space: normal; font-weight: 700; }
  .login input { font-size: 16px; }
  .toast { left: 16px; right: 16px; transform: none; max-width: none; border-radius: 16px; flex-wrap: wrap; }
}

/* readable on a phone (Casey 2026-11-03: no tiny fonts for clients): body 17px, nothing under 14px */
@media (max-width: 640px) {
  body, input, select, textarea { font-size: 17px; }
  button { font-size: 15px; }
  small, label, th, td, .chip, .pill, .lbl, .stat span, .stat small, .when, .det, .proposal ul, .proposal .seen, .picked .note,
  .msg.sys, .brand small, .sugs button, .tabs button, .hint, .err, .alerts li, .openq ul, .pub .chip, .login label { font-size: 14px !important; }
  .msg, .login p { font-size: 17px; }
  /* notes sit just above the typing box: never over it, never over the Publish button */
  .toast { top: auto; bottom: calc(env(safe-area-inset-bottom, 0px) + 172px); z-index: 60; }
}
.boot { min-height: 100%; display: grid; place-items: center; color: var(--mute); font: 500 1.05rem/1.4 var(--sans); padding: 24px; }

/* nothing a client reads is under 14px, at any width (Casey 2026-11-03) */
small, label, th, .chip, .pill, .lbl, .stat span, .stat small, .when, .det, .proposal ul, .proposal .seen, .picked .note,
.msg.sys, .brand small, .sugs button, .hint, .err, .alerts li, .openq ul, .login label, .ptools, .tog { font-size: max(14px, 1em) !important; }
.login label, .chip, .pill, .lbl, th, .stat span { font-size: 14px !important; }

/* app: the offline page, and the "put Pasture on your phone" bar */
.offline { min-height: 100%; max-width: 30rem; margin: 0 auto; display: grid; align-content: center; gap: 12px; padding: max(32px, env(safe-area-inset-top)) 24px max(32px, env(safe-area-inset-bottom)); }
.offline h1 { font: 600 1.9rem/1.15 var(--serif); margin: 18px 0 0; }
.offline p { margin: 0; color: var(--mute); font-size: 17px; }
.offline button { justify-self: start; margin-top: 8px; }
.install { display: flex; align-items: center; gap: 12px; margin: 0 0 14px; padding: 12px 14px; background: var(--card); border: 1px solid var(--line); border-radius: 16px; }
.install img { width: 44px; height: 44px; border-radius: 10px; flex: 0 0 auto; }
.install div { flex: 1 1 auto; min-width: 0; }
.install b { display: block; font-size: 16px; }
.install span { display: block; color: var(--mute); font-size: 15px; }
.install span b { display: inline; font-size: inherit; color: var(--ink); }
.install .shareIcon { display: inline-block; width: 15px; height: 18px; vertical-align: -3px; margin: 0 2px; background: currentColor; -webkit-mask: url(/share-ios.svg) center / contain no-repeat; mask: url(/share-ios.svg) center / contain no-repeat; }
.install .x { border: 0; background: none; padding: 6px 8px; color: var(--mute); font-size: 20px; line-height: 1; }

/* talk to Casey */
.talk { max-width: 720px; }
.bubbles { display: flex; flex-direction: column; gap: 10px; margin: 6px 0 16px; }
.bubble { max-width: 86%; padding: 10px 14px; border-radius: 18px; background: var(--card); border: 1px solid var(--line); }
.bubble p { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 17px; }
.bubble small { display: block; margin-top: 4px; color: var(--mute); font-size: 14px; }
.bubble.casey { align-self: flex-start; border-bottom-left-radius: 6px; }
.bubble.them { align-self: flex-end; background: var(--paper-2); border-bottom-right-radius: 6px; }
.talkForm { display: grid; gap: 8px; position: sticky; bottom: 0; padding: 10px 0 max(10px, env(safe-area-inset-bottom)); background: var(--paper); }
.talkForm textarea { width: 100%; border: 1px solid var(--line); border-radius: 14px; padding: 12px 14px; background: var(--card); font-size: 17px; resize: vertical; }
.notify { display: flex; align-items: center; gap: 12px; padding: 12px 14px; margin: 0 0 16px; background: var(--card); border: 1px solid var(--line); border-radius: 16px; }
.notify div { flex: 1 1 auto; min-width: 0; }
.notify b { display: block; font-size: 16px; }
.notify span { display: block; color: var(--mute); font-size: 15px; }
.notify button { white-space: nowrap; flex: 0 0 auto; }

/* home: the Pasture app's tiles (D-048). Base tiles are solid cards; add-ons not on yet are dashed.
   One line-icon style (tiles.mjs). Shepherd sits in a dock at the bottom, Barn takes a dropped file. */
.home { max-width: 980px; margin: 0 auto; padding-bottom: calc(96px + env(safe-area-inset-bottom, 0px)); }
.home h1 { font: 600 clamp(2rem, 5vw, 2.8rem)/1.05 var(--serif); margin: 10px 0 4px; }
.home .sub { color: var(--mute); margin: 0 0 16px; }
.tilesHead { font: 600 1.4rem/1.2 var(--serif); margin: 30px 0 2px; }
.tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 210px), 1fr)); gap: 12px; }
.tile { text-align: left; display: grid; gap: 6px; align-content: start; background: var(--card); border: 1px solid var(--line); border-radius: 20px; padding: 16px; color: var(--ink); font-weight: 400; }
button.tile:hover { border-color: var(--ink); }
.tile p { margin: 0; color: var(--mute); }
.tileName { font: 600 1.25rem/1.15 var(--serif); }
.tileIco { display: block; width: 48px; height: 48px; color: var(--ink); }
.tileIco .ico { width: 48px; height: 48px; display: block; }
.tileTop { display: flex; gap: 12px; align-items: center; }
.tileTop > div { display: grid; gap: 2px; min-width: 0; }
.drop { min-height: 96px; }
.tile.addon { background: transparent; border: 1.5px dashed var(--line); }
.tile.addon .tileIco { opacity: .75; }
.tile.addon.on { background: var(--card); border-style: solid; }
.tile.addon.on .tileIco { opacity: 1; }
.tile details summary { cursor: pointer; color: var(--grass-dk); font-weight: 600; min-height: 32px; display: flex; align-items: center; width: max-content; }
.tile details p { color: var(--ink); margin: 2px 0 6px; }
.tile > button, .tile > .pill { justify-self: start; }
.pill.soon { background: #ece4d4; color: #6b4a2d; }
.draftTag { display: inline-block; font: 500 14px/1 var(--mono); letter-spacing: .04em; padding: 5px 8px; border-radius: 999px; background: #f3e3cf; color: var(--warn); }
.drop { display: grid; place-items: center; gap: 2px; min-height: 110px; border: 1.5px solid #c9d5bf; background: #f1f5ed; border-radius: 16px; padding: 14px; text-align: center; cursor: pointer; }
.drop b { font-size: 16px; } .drop span { color: var(--mute); }
.drop.over { border-color: var(--grass); background: #e4eddd; }
.today { color: var(--mute); }
.dock { position: fixed; left: 50%; transform: translateX(-50%); bottom: max(14px, env(safe-area-inset-bottom)); z-index: 6; width: min(640px, calc(100vw - 24px)); display: flex; gap: 8px; align-items: center; padding: 8px 8px 8px 10px; background: var(--ink); color: var(--paper); border-radius: 999px; box-shadow: 0 16px 40px -18px rgba(35,34,33,.6); }
.dock .tileIco { width: 36px; height: 36px; color: var(--paper); flex: 0 0 auto; }
.dock .tileIco .ico { width: 36px; height: 36px; }
.dock input { flex: 1 1 auto; min-width: 0; border: 0; border-radius: 999px; padding: 11px 14px; background: color-mix(in srgb, var(--paper) 12%, var(--ink)); color: var(--paper); font-size: 16px; }
.dock input::placeholder { color: #bdb6aa; }
.dock .primary { flex: 0 0 auto; }
#tab-home[hidden] + * .dock, .tab[hidden] .dock { display: none; }
@media (max-width: 640px) {
  .tiles { grid-template-columns: 1fr 1fr; gap: 10px; }
  .tile { padding: 14px; border-radius: 18px; }
  .tile.addon, .tile.wide { grid-column: 1 / -1; }
  .tileName { font-size: 1.15rem; }
  .tile p { font-size: 15px; }
}
/* the not-found and error pages: a link that looks like the primary button */
a.btnLink { justify-self: start; display: inline-flex; align-items: center; min-height: 48px; padding: 0 22px; margin-top: 8px; border-radius: 999px; text-decoration: none; font-weight: 700; background: var(--grass); color: var(--on-grass); }
a.btnLink:hover { background: var(--grass-dk); }
/* sign-in: "Forgot your password?" (A-to-Z row 9) */
.linkish { border: 0; background: none; padding: 6px 0; color: var(--grass-dk); text-decoration: underline; text-underline-offset: 3px; font-size: 15px; justify-self: start; }
.login .card > .linkish { margin-top: -10px; }
#forgotForm { display: grid; gap: 10px; }
#forgotForm[hidden] { display: none; }
.login label, .resetForm label, .danger label { font-size: max(14px, .75rem); }
/* the reset page */
.resetForm { display: grid; gap: 10px; margin-top: 6px; }
.resetForm label { font: 500 14px/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--mute); }
.resetForm input, .danger input { font-size: 16px; padding: 12px 14px; border: 1px solid var(--line); border-radius: 12px; background: var(--card); }
/* What I own: delete my account */
.danger { margin-top: 40px; padding: 22px; border: 1px solid var(--line); border-radius: 16px; background: var(--card); display: grid; gap: 10px; max-width: 640px; }
.danger h2 { margin: 0; font: 600 1.35rem/1.2 var(--serif); }
.danger p { margin: 0; color: var(--mute); font-size: 15px; }
.danger form { display: grid; gap: 10px; }
.danger form[hidden] { display: none; }
.danger label { font: 500 14px/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--mute); }
.danger .row { display: flex; gap: 10px; flex-wrap: wrap; }
button.warn { justify-self: start; border-color: var(--bad); color: var(--bad); background: transparent; font-weight: 700; }
button.warn:hover { background: var(--bad); color: var(--card); }
/* Home: what we need from the client (Flock's list) */
.todo { margin: 18px 0 22px; padding: 18px; border: 1px solid var(--line); border-radius: 18px; background: var(--card); max-width: 760px; }
.todoHead { display: flex; gap: 14px; align-items: center; margin-bottom: 10px; }
.todoHead h2 { margin: 0; font: 600 1.25rem/1.2 var(--serif); }
.todoHead p { margin: 2px 0 0; color: var(--mute); font-size: 15px; }
.todoRing { flex: none; width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center; background: conic-gradient(var(--grass) calc(var(--p) * 1%), var(--line) 0); }
.todoRing b { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 50%; background: var(--card); font: 700 14px/1 var(--sans); }
.todo ol { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.todo li { display: flex; gap: 12px; padding: 10px 0; border-top: 1px solid var(--line); }
.todo li .tick { flex: none; width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid var(--mute); display: grid; place-items: center; font-size: 14px; color: var(--on-grass); margin-top: 1px; }
.todo li.done .tick { background: var(--grass); border-color: var(--grass); }
.todo li b { display: block; font-weight: 600; }
.todo li.done b { color: var(--mute); text-decoration: line-through; text-decoration-color: var(--line); }
.todo li p { margin: 2px 0 0; color: var(--mute); font-size: 15px; }
.todo li small { display: block; margin-top: 2px; color: var(--grass-dk); font-size: 14px; }
/* Casey's admin view (row 16): every client, and the "viewing as" bar */
.clientGrid { display: grid; gap: 14px; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); margin-top: 16px; }
.client { border: 1px solid var(--line); border-radius: 18px; background: var(--card); padding: 18px; display: grid; gap: 12px; }
.clientTop { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; }
.clientTop h2 { margin: 0; font: 600 1.3rem/1.2 var(--serif); }
.clientTop p { margin: 2px 0 0; color: var(--mute); font-size: 15px; }
.client dl { margin: 0; display: grid; gap: 6px; }
.client dl div { display: grid; grid-template-columns: 8.5em 1fr; gap: 8px; font-size: 15px; }
.client dt { color: var(--mute); }
.client dd { margin: 0; }
.client dd.hot { color: var(--bad); font-weight: 700; }
.client .row { display: flex; flex-wrap: wrap; gap: 8px; }
.viewAs { position: sticky; top: 0; z-index: 30; display: flex; justify-content: center; align-items: center; gap: 14px; padding: 10px 16px; padding-top: max(10px, env(safe-area-inset-top)); background: var(--ink); color: var(--paper); font-size: 15px; }
.viewAs button { background: transparent; color: var(--paper); border-color: color-mix(in srgb, var(--paper) 50%, transparent); }
html.viewing .top { padding-top: 10px; }
.learning .switchRow { display: flex; gap: 10px; align-items: center; font: 500 15px/1.3 var(--sans); text-transform: none; letter-spacing: 0; color: var(--ink); }
.learning .switchRow input { width: 22px; height: 22px; accent-color: var(--grass); }
.danger[hidden] { display: none; }
/* inside the App Store app (?embed=1): the native tab bar owns navigation, so the web one steps aside */
html.embed .top nav.tabs, html.embed .top .brand { display: none; }
html.embed .top { padding-top: max(10px, env(safe-area-inset-top)); }
