/* The signed-in app. Builds on site.css tokens. */
body.app { display: flex; flex-direction: column; min-height: 100vh; }
.app-main { flex: 1; padding: 36px 0 64px; }
.app-narrow { max-width: 720px; }
.app-main h1 { font-size: clamp(1.7rem, 4vw, 2.3rem); }
.h3, .app-main h2.h3 { font-family: var(--head); font-size: 1.2rem; margin: 0 0 .6em; }
.app-nav { gap: 18px; }
@media (max-width: 720px) {
  .app-nav a:not(.btn) { display: inline; }
  .app-nav { gap: 6px 14px; font-size: .9rem; flex-wrap: wrap; justify-content: flex-end; }
  body.app .site-head .wrap { height: auto; min-height: 64px; padding-block: 10px; }
}
@media (max-width: 420px) { body.app .logo span { display: none; } .group-head .lock { display: none; } }
.inline { display: inline; margin: 0; }
.linkish { background: none; border: 0; padding: 0; color: var(--ink); font: inherit; cursor: pointer; }
.linkish:hover { color: var(--brand); text-decoration: underline; }
.app-foot { padding: 22px 0; border-top: 1px solid var(--line); color: var(--muted); font-size: .85rem; }
.app-foot a { color: var(--muted); }
.muted { color: var(--muted); }
.small { font-size: .88rem; }
.fine { color: var(--muted); font-size: .85rem; margin: 0; }
.row-between { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
.stack { display: flex; flex-direction: column; gap: 14px; }
.stack > * { margin: 0; }
.card + .card, .card + section, section + .card { margin-top: 18px; }
.empty { text-align: center; padding: 36px 20px; }
.center { text-align: center; }
.actions-inline { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }

/* forms */
label { display: flex; flex-direction: column; gap: 6px; font-weight: 600; font-size: .95rem; }
label .muted { font-weight: 400; }
input:not([type=checkbox]):not([type=radio]), textarea, select {
  width: 100%; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px;
  background: var(--bg); color: var(--ink); font: 400 1rem var(--body);
}
input:focus, textarea:focus, select:focus { outline: 2px solid var(--brand); outline-offset: 1px; border-color: transparent; }
textarea { resize: vertical; }
label.check { flex-direction: row; align-items: flex-start; gap: 10px; font-weight: 400; }
label.check input { margin-top: 4px; }
fieldset { border: 0; padding: 0; margin: 0; }
legend { font-weight: 600; margin-bottom: 8px; }
.inline-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 14px; }
.inline-form input, .inline-form select { width: auto; flex: 1 1 180px; }
.type-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 8px; }
.type-pick { flex-direction: row; align-items: center; gap: 8px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px; font-weight: 600; cursor: pointer; }
.type-pick:has(input:checked) { border-color: var(--brand); background: var(--soft); }
.btn.danger { background: #b3261e; border-color: #b3261e; color: #fff; }
.btn.danger:hover { background: #8c1d17; border-color: #8c1d17; }
button.btn { cursor: pointer; font-family: var(--body); font-size: 1rem; }
button.btn.small { font-size: .9rem; }
.danger-zone { border-color: color-mix(in srgb, #b3261e 40%, var(--line)); }

.flash { margin: 0 0 18px; padding: 12px 16px; border-radius: 10px; background: var(--soft); color: var(--ink); border: 1px solid var(--line); }
.flash.error { background: color-mix(in srgb, #b3261e 12%, var(--surface)); border-color: color-mix(in srgb, #b3261e 35%, var(--line)); }
.badge { display: inline-block; min-width: 20px; padding: 0 6px; border-radius: 999px; background: var(--accent); color: #fff; font-size: .75rem; font-weight: 700; text-align: center; line-height: 20px; }

/* group header and tabs */
.group-head { display: flex; align-items: center; gap: 14px; margin-bottom: 14px; }
.group-avatar { flex: none; display: grid; place-items: center; width: 48px; height: 48px; border-radius: 12px; background: var(--brand); color: var(--on-brand); font: 600 1.3rem var(--head); }
.group-name { margin: 0; font-size: clamp(1.4rem, 3.5vw, 1.9rem) !important; }
.group-name a { color: inherit; text-decoration: none; }
.group-head .lock { margin-left: auto; }
.group-tabs { display: flex; gap: 4px; flex-wrap: wrap; margin-bottom: 24px; border-bottom: 1px solid var(--line); }
.group-tabs a { padding: 10px 14px; color: var(--muted); text-decoration: none; font-weight: 600; border-bottom: 3px solid transparent; margin-bottom: -1px; }
.group-tabs a.on, .group-tabs a:hover { color: var(--ink); border-bottom-color: var(--brand); }
.group-tabs a.updated { color: var(--accent); background: var(--warm); border-radius: 8px 8px 0 0; border-bottom-color: var(--accent); }
.group-card { display: flex; gap: 14px; align-items: center; }
.group-card h3 { margin: 0 0 2px; }
.group-card p { margin: 0; }

/* boards */
.board-layout { display: grid; grid-template-columns: 220px 1fr; gap: 28px; align-items: start; }
@media (max-width: 760px) { .board-layout { grid-template-columns: 1fr; } }
.board-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
@media (max-width: 760px) { .board-list { flex-direction: row; flex-wrap: wrap; gap: 6px; } }
.board-list a { display: block; padding: 8px 12px; border-radius: 8px; color: var(--ink); text-decoration: none; }
@media (max-width: 760px) { .board-list a { border: 1px solid var(--line); border-radius: 999px; padding: 6px 12px; font-size: .9rem; } }
.board-list a.on { background: var(--soft); font-weight: 700; }
.board-list a:hover { background: var(--soft); }
.post-list { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); margin-bottom: 14px; }
.post-row { display: block; padding: 14px 18px; border-bottom: 1px solid var(--line); color: var(--ink); text-decoration: none; }
.post-row:last-child { border-bottom: 0; }
.post-row:hover { background: var(--soft); }
.post-row small { display: block; margin-top: 2px; color: var(--muted); }
.tag.pin { background: var(--soft); color: var(--brand); }
.tag.done { background: var(--line); color: var(--muted); }
.price-tag { font-family: var(--body); font-weight: 700; color: var(--brand); white-space: nowrap; }

/* a post */
.crumbs a { text-decoration: none; }
.post-full .post-title { margin: 6px 0 4px; font-size: clamp(1.5rem, 3.5vw, 2rem) !important; }
.post-body { margin: 16px 0; overflow-wrap: anywhere; }
.post-body p:last-child { margin-bottom: 0; }
.replies { margin-top: 28px; }
.reply-list { list-style: none; margin: 0 0 18px; padding: 0; }
.reply-list li { padding: 14px 0; border-bottom: 1px solid var(--line); overflow-wrap: anywhere; }
.reply-list li.removed { opacity: .55; }
.reply-list p { margin: 6px 0; }
.reply-meta { font-size: .95rem; }
details summary { cursor: pointer; color: var(--muted); font-size: .9rem; }
.report-box { position: relative; }
.report-box[open] { flex-basis: 100%; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg); }
.report-box form { margin-top: 10px; }
.contact-box summary { color: var(--brand); font-weight: 700; font-size: 1rem; }
.contact-box form { margin-top: 12px; }
.claim-box .queue { margin: 0; padding-left: 1.4em; }
.claim-box .queue li.me { font-weight: 700; }
blockquote { margin: 10px 0; padding: 10px 14px; border-left: 3px solid var(--line); background: var(--bg); border-radius: 0 8px 8px 0; }
blockquote small { display: block; color: var(--muted); }

/* members, invite, settings */
.member-list { list-style: none; margin: 0; padding: 0; }
.member-list li { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; padding: 12px 0; border-bottom: 1px solid var(--line); }
.member-list li:last-child { border-bottom: 0; }
.member-list small { display: block; }
.member-list .inline-form { margin: 0; flex: 1 1 240px; }
.invite-grid, .settings-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 18px; align-items: start; }
.invite-grid .card + .card, .settings-grid .card + .card, .settings-grid > * + * { margin-top: 0; }
.copy-row { display: flex; gap: 8px; }
.qr svg { width: 200px; height: 200px; background: #fff; padding: 8px; border-radius: 10px; }
.join-card { max-width: 620px; margin: 0 auto; }
.rules { padding: 14px 16px; border-radius: 10px; background: var(--bg); border: 1px solid var(--line); }

/* directory */
.inline-form.flush { margin: 0; }
.dir-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; margin: 18px 0; }
.dir-card { padding: 18px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); overflow-wrap: anywhere; }
.dir-card h3 { margin: 0 0 2px; }
.dir-card p { margin: 6px 0 0; }
.dir-card dl { display: grid; grid-template-columns: 74px 1fr; gap: 4px 10px; margin: 10px 0 0; font-size: .92rem; }
.dir-card dt { color: var(--muted); }
.dir-card dd { margin: 0; }
.print-dir { background: #fff; color: #1d2321; padding: 32px; }
.print-head { text-align: center; margin-bottom: 24px; }
.print-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.print-dir .dir-card { background: #fff; border-color: #ccc; break-inside: avoid; }
.print-dir a { color: inherit; text-decoration: none; }
@media print { .print-dir { padding: 0; } }

/* alerts and safety checks */
.alert-banner { display: flex; flex-wrap: wrap; gap: 4px 12px; align-items: baseline; margin: 0 0 14px; padding: 12px 16px; border-radius: 10px; background: #b3261e; color: #fff; text-decoration: none; }
.alert-banner span { opacity: .9; font-size: .92rem; }
.alert-card { border-left: 4px solid #b3261e; }
.safe-btn { background: #1f7a4a; border-color: #1f7a4a; color: #fff; }
.safety-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; margin-top: 18px; }
.safety-grid .card { margin: 0; }
.help-col { border-color: #b3261e; }
.safe-col { border-color: #1f7a4a; }
ul.plain { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }

/* sign-up sheets and polls */
.kind-extra { border: 1px solid var(--line); border-radius: 10px; padding: 14px; }
.kind-extra[hidden] { display: none; }
.slot-rows { display: grid; gap: 6px; }
.slot-row { display: grid; grid-template-columns: 1fr 150px 70px; gap: 6px; }
@media (max-width: 520px) { .slot-row { grid-template-columns: 1fr 1fr 60px; } }
.date-rows { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 6px; }
.slot-list { list-style: none; margin: 0; padding: 0; }
.slot-list > li { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; flex-wrap: wrap; padding: 12px 0; border-bottom: 1px solid var(--line); }
.slot-list > li:last-child { border-bottom: 0; }
.slot-main { flex: 1 1 260px; }
.slot-main ul { margin-top: 6px; }
.slot.full .slot-main b { color: var(--muted); }
.poll-results { gap: 12px; }
.flush-row { margin: 0; }
.bar { height: 8px; border-radius: 4px; background: var(--line); overflow: hidden; margin: 4px 0; }
.bar span { display: block; height: 100%; width: 0; background: var(--brand); }

/* bill splits */
.split-mode { display: grid; gap: 10px; margin-top: 12px; }
.split-mode[hidden] { display: none; }
.item-rows { display: grid; gap: 6px; }
.item-row { display: grid; grid-template-columns: 1fr 110px; gap: 6px; }
.item-row.extras { grid-template-columns: 1fr 1fr; }
.pay-handles { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; }
.split-form fieldset { border: 0; padding: 0; margin: 14px 0 0; }
.split-mine { border: 1px solid var(--brand); background: var(--soft); border-radius: 10px; padding: 14px; display: grid; gap: 10px; }
.split-mine p { margin: 0; }
.split-mine .owe { font-size: 1.3rem; }
.app-main .split-table { width: 100%; min-width: 0; border-collapse: collapse; font-size: .95rem; }
.split-table th, .split-table td { text-align: left; padding: 8px 6px; border-bottom: 1px solid var(--line); vertical-align: top; }
.split-table .num { text-align: right; white-space: nowrap; }
.split-table tr.me td { background: var(--soft); }
.warn-text { color: var(--accent); }
.pool-bar { height: 12px; border-radius: 6px; }
.pledge-form { gap: 10px; }

/* welcome checklist and seen-by */
.welcome-card { border-left: 4px solid var(--brand); margin-bottom: 18px; }
.seen-box summary { color: var(--ink); font-size: 1rem; }
.seen-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; margin-top: 12px; }

/* spam record in the admin console */
.tag.spam-tag { background: #b3261e; color: #fff; }
.spam-record { border-left: 4px solid #b3261e; }

/* billing banners */
.billing-banner { margin: 0 0 14px; padding: 12px 16px; border-radius: 10px; background: var(--warm); border: 1px solid var(--accent); }
.billing-banner.readonly { background: color-mix(in srgb, #b3261e 14%, var(--surface)); border-color: #b3261e; }

/* legal requests */
.send-steps { padding: 14px; border: 1px solid var(--line); border-radius: 10px; }
code.pw { font-size: 1.1rem; padding: 2px 8px; border-radius: 6px; background: var(--soft); user-select: all; }

/* the Feedback button on signed-in pages */
.feedback-fab { position: fixed; right: 18px; bottom: 18px; z-index: 20; padding: 10px 16px; border-radius: 999px; background: var(--brand); color: var(--on-brand); font-weight: 700; font-size: .92rem; text-decoration: none; box-shadow: var(--shadow); }
.feedback-fab:hover { background: var(--brand-2); }
body.app { padding-bottom: 64px; }
@media print { .feedback-fab { display: none; } }

/* photos */
.gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 8px; margin: 14px 0; }
.gallery a { display: block; border-radius: 10px; overflow: hidden; background: var(--soft); aspect-ratio: 1; }
.gallery img { width: 100%; height: 100%; object-fit: cover; display: block; }
input[type=file] { padding: 10px; border: 1px dashed var(--line); border-radius: 10px; background: var(--bg); color: var(--ink); }

/* private messages */
.dm-thread { list-style: none; margin: 0 0 18px; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.dm-thread > li { max-width: 80%; display: flex; flex-direction: column; gap: 4px; }
.dm-thread > li.mine { align-self: flex-end; align-items: flex-end; }
.dm-bubble { padding: 10px 14px; border-radius: 16px; background: var(--surface); border: 1px solid var(--line); overflow-wrap: anywhere; }
.dm-thread > li.mine .dm-bubble { background: var(--soft); border-color: transparent; }
.dm-bubble p { margin: 0 0 .5em; } .dm-bubble p:last-child { margin: 0; }
.dm-bubble .gallery { grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); margin: 6px 0 0; min-width: 240px; }
label.flush { flex: 1 1 220px; }

/* admin */
.stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 14px; margin-bottom: 18px; }
.stat-grid .card { margin: 0; }
.stat-v { font: 600 2rem var(--head); }
.facts { display: grid; grid-template-columns: 160px 1fr; gap: 8px 16px; margin: 0; }
.facts dt { color: var(--muted); }
.facts dd { margin: 0; overflow-wrap: anywhere; }
@media (max-width: 520px) { .facts { grid-template-columns: 1fr; } .facts dd { margin-bottom: 8px; } }
.report-link { display: block; color: var(--ink); text-decoration: none; }
.report-link.urgent { border-left: 4px solid #b3261e; }
.app-main table { min-width: 640px; }
code { font-size: .9em; overflow-wrap: anywhere; }

/* printable flyer */
.flyer-page { background: #fff; color: #1d2321; }
.flyer { max-width: 640px; margin: 40px auto; padding: 48px; text-align: center; border: 2px dashed #ccc; border-radius: 16px; }
.flyer h1 { font-size: 2.6rem; }
.flyer .qr svg { width: 280px; height: 280px; }
.flyer-link { font-family: monospace; font-size: .95rem; overflow-wrap: anywhere; }
@media print { .noprint { display: none; } .flyer { border: 0; margin: 0 auto; } }
.mail-copy { max-height: 320px; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; padding: 12px; background: var(--bg); border: 1px solid var(--line); border-radius: 8px; font-size: .85rem; }

/* the WordPress-scanner 404 */
.no-pass { text-align: center; padding: 3rem 0; }
.no-pass h1 { font-size: clamp(2.2rem, 7vw, 4rem); margin-bottom: .5rem; }
.no-pass .lead { font-style: italic; }
