/*
 * SloFi tokens & component classes — drop into Rails app
 *
 * INSTALL:
 *   1. Copy this file to app/assets/stylesheets/slofi.css
 *   2. Either rely on Propshaft auto-bundling (it includes all .css in the dir),
 *      or, if your manifest is selective, ensure it's picked up alongside application.css.
 *      The existing layout uses `stylesheet_link_tag :app, ...` which compiles every
 *      stylesheet in app/assets/stylesheets/* into a single :app bundle — so dropping
 *      this file in is enough.
 *
 * Class naming: BEM-ish with `sf-` prefix to avoid collisions with anything Rails-y.
 * Existing class hooks the templates already emit (`.post`, `.flyer`, `.event`,
 * `.tag`, `.reactions`, `.comment`, etc.) get matching styles WITHOUT being renamed,
 * so you can adopt this without touching most ERB.
 */

/* ========================================================================== */
/* 1. Webfonts — Google Fonts (no codebase dep). Replace later if needed.    */
/* ========================================================================== */
@import url('https://fonts.googleapis.com/css2?family=Departure+Mono&family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;0,9..144,700;1,9..144,400&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&family=VT323&display=swap');

/* ========================================================================== */
/* 2. Tokens                                                                  */
/* ========================================================================== */
:root {
  /* Paper neutrals */
  --sf-paper-0: #fbf6ec; --sf-paper-1: #f3ead9; --sf-paper-2: #e9dcc1; --sf-paper-3: #d8c6a3;
  /* Ink */
  --sf-ink-1: #1a1410; --sf-ink-2: #3d3329; --sf-ink-3: #6b5b48; --sf-ink-4: #9a8870;
  /* Accents */
  --sf-brick: #b8472b; --sf-brick-d: #8e3520; --sf-brick-l: #e8a892;
  --sf-ochre: #d49a3a; --sf-ochre-d: #a8761f; --sf-ochre-l: #f0d091;
  --sf-moss:  #5a6a3a; --sf-moss-d:  #3f4a26; --sf-moss-l:  #c2cba0;
  --sf-plum:  #6b3a52; --sf-plum-d:  #4a2438; --sf-plum-l:  #c89cb1;
  --sf-sky:   #4a6b7a; --sf-sky-d:   #324a56; --sf-sky-l:   #b3c9d2;

  /* Roles */
  --sf-bg: var(--sf-paper-0);
  --sf-fg: var(--sf-ink-1);
  --sf-fg-muted: var(--sf-ink-2);
  --sf-fg-quiet: var(--sf-ink-3);
  --sf-rule: var(--sf-ink-1);
  --sf-accent: var(--sf-brick);
  --sf-link: var(--sf-sky-d);
  --sf-success: var(--sf-moss);
  --sf-danger:  var(--sf-brick);

  /* Type */
  --sf-font-display: "Departure Mono", "VT323", ui-monospace, monospace;
  --sf-font-pixel:   "VT323", "Departure Mono", monospace;
  --sf-font-serif:   "Fraunces", Georgia, serif;
  --sf-font-sans:    "Inter", system-ui, sans-serif;
  --sf-font-mono:    "JetBrains Mono", ui-monospace, monospace;

  /* Spacing (4px grid) */
  --sf-s1: 4px;  --sf-s2: 8px;  --sf-s3: 12px; --sf-s4: 16px;
  --sf-s5: 24px; --sf-s6: 32px; --sf-s7: 48px; --sf-s8: 64px;

  /* Borders & shadows */
  --sf-bw-2: 2px; --sf-bw-3: 3px;
  --sf-sh-block-sm: 2px 2px 0 0 var(--sf-ink-1);
  --sf-sh-block:    4px 4px 0 0 var(--sf-ink-1);

  --sf-tap: 44px;
}

/* ========================================================================== */
/* 3. Reset-ish + page baseline                                                */
/* ========================================================================== */
*, *::before, *::after { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  background: var(--sf-bg);
  color: var(--sf-fg);
  font-family: var(--sf-font-serif);
  font-size: 16px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
}

body { padding: 0; }

main { display: block; max-width: 760px; margin: 0 auto; padding: var(--sf-s6) var(--sf-s5) var(--sf-s8); }

h1, h2, h3, h4 { font-family: var(--sf-font-serif); font-weight: 600; line-height: 1.1; letter-spacing: -0.005em; margin: 0 0 var(--sf-s3); }
h1 { font-size: 36px; }
h2 { font-size: 28px; }
h3 { font-size: 22px; }
h4 { font-size: 18px; }

p  { margin: 0 0 var(--sf-s4); text-wrap: pretty; }

a, a:visited {
  color: var(--sf-link);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
}
a:hover { color: var(--sf-accent); }

hr {
  border: 0;
  border-top: var(--sf-bw-2) solid var(--sf-rule);
  margin: var(--sf-s5) 0;
}

small { font-family: var(--sf-font-mono); font-size: 12px; color: var(--sf-fg-quiet); text-transform: uppercase; letter-spacing: 0.04em; }

code { font-family: var(--sf-font-mono); font-size: 13px; background: var(--sf-paper-2); padding: 2px 6px; border: 1px solid var(--sf-paper-3); }

::selection { background: var(--sf-brick-l); color: var(--sf-ink-1); }

/* ========================================================================== */
/* 4. Top nav (the existing <nav aria-label="Site navigation"> in layout)      */
/* ========================================================================== */
body > nav[aria-label="Site navigation"] {
  display: flex;
  align-items: stretch;
  height: 56px;
  border-bottom: var(--sf-bw-2) solid var(--sf-rule);
  background: var(--sf-paper-0);
  position: sticky; top: 0; z-index: 5;
  font-family: var(--sf-font-sans);
  font-size: 14px;
  font-weight: 500;
  padding: 0;
  /* Strip the literal "|" pipes by hiding text nodes that match — handled via a refactor in the layout instead. */
}
body > nav[aria-label="Site navigation"] a,
body > nav[aria-label="Site navigation"] form {
  display: inline-flex; align-items: center;
  padding: 0 var(--sf-s4);
  color: var(--sf-ink-1);
  text-decoration: none;
  text-transform: lowercase;
  height: 100%;
}
body > nav[aria-label="Site navigation"] a:hover { background: var(--sf-paper-2); color: var(--sf-ink-1); }
body > nav[aria-label="Site navigation"] form { padding: 0 var(--sf-s2); }
body > hr:first-of-type { display: none; } /* drop the post-nav <hr> — the bottom rule on nav handles it */

/* ========================================================================== */
/* 5. Flash messages                                                          */
/* ========================================================================== */
[role="alert"] { max-width: 760px; margin: var(--sf-s4) auto 0; padding: 0 var(--sf-s5); }
[role="alert"] p { font-family: var(--sf-font-mono); font-size: 13px; padding: var(--sf-s3) var(--sf-s4); border: var(--sf-bw-2) solid var(--sf-rule); background: var(--sf-paper-1); margin: 0 0 var(--sf-s3); }
[role="alert"] p:has(strong) { background: var(--sf-brick-l); }

/* ========================================================================== */
/* 6. Buttons (covers <button>, <input type=submit>, button_to forms)         */
/* ========================================================================== */
button,
input[type="submit"],
.sf-btn {
  display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--sf-font-sans);
  font-weight: 600;
  font-size: 14px;
  text-transform: lowercase;
  letter-spacing: 0.01em;
  padding: 8px 16px;
  border: var(--sf-bw-2) solid var(--sf-ink-1);
  background: var(--sf-paper-0);
  color: var(--sf-ink-1);
  cursor: pointer;
  box-shadow: 3px 3px 0 0 var(--sf-ink-1);
  transition: transform 100ms ease-out, box-shadow 100ms ease-out, background 120ms ease-out;
  min-height: var(--sf-tap);
  border-radius: 0;
}
button:hover, input[type="submit"]:hover, .sf-btn:hover { background: var(--sf-paper-2); }
button:active, input[type="submit"]:active, .sf-btn:active {
  transform: translate(1px,1px);
  box-shadow: 2px 2px 0 0 var(--sf-ink-1);
}
button:disabled, input[type="submit"]:disabled, .sf-btn:disabled {
  background: var(--sf-paper-2); color: var(--sf-ink-4);
  cursor: not-allowed;
}

/* Primary submits (post / event / flyer create) */
input[type="submit"][value*="Post"],
input[type="submit"][value*="Create"],
input[type="submit"][value*="Sign"],
.sf-btn-primary {
  background: var(--sf-brick); color: var(--sf-paper-0);
}
input[type="submit"][value*="Post"]:hover,
input[type="submit"][value*="Create"]:hover,
input[type="submit"][value*="Sign"]:hover,
.sf-btn-primary:hover { background: var(--sf-brick-d); color: var(--sf-paper-0); }

/* button_to form wrapper — strip implicit margins so buttons align inline */
form.button_to { display: inline-block; margin: 0; }

/* ========================================================================== */
/* 7. Forms                                                                    */
/* ========================================================================== */
form > div { margin-bottom: var(--sf-s4); }
form label { display: inline-block; font-family: var(--sf-font-sans); font-size: 13px; font-weight: 500; color: var(--sf-fg-muted); text-transform: lowercase; margin-bottom: var(--sf-s1); }

input[type="text"], input[type="email"], input[type="password"], input[type="url"], input[type="date"], input[type="datetime-local"], input[type="search"],
textarea, select {
  font-family: var(--sf-font-serif);
  font-size: 16px;
  background: var(--sf-paper-0);
  color: var(--sf-ink-1);
  border: var(--sf-bw-2) solid var(--sf-ink-1);
  padding: 10px 12px;
  width: 100%;
  max-width: 520px;
  box-shadow: 0 1px 0 0 rgba(26,20,16,0.08);
  border-radius: 0;
  outline: none;
}
textarea { resize: vertical; min-height: 96px; }
input:focus, textarea:focus, select:focus { box-shadow: 0 0 0 2px var(--sf-brick); }

input[type="file"] { font-family: var(--sf-font-mono); font-size: 13px; }

fieldset { border: var(--sf-bw-2) solid var(--sf-paper-3); padding: var(--sf-s4); margin: 0 0 var(--sf-s4); }
fieldset legend { font-family: var(--sf-font-display); font-size: 14px; letter-spacing: 0.04em; padding: 0 var(--sf-s2); }

/* Inline error lists rendered by the templates */
ul[style*="color:red"] {
  list-style: none; padding: var(--sf-s3) var(--sf-s4); margin: 0 0 var(--sf-s4);
  border: var(--sf-bw-2) solid var(--sf-brick);
  background: #fff;
  color: var(--sf-brick-d) !important;
  font-family: var(--sf-font-sans); font-size: 14px;
}
div[style*="color:red"] { color: var(--sf-brick-d) !important; font-family: var(--sf-font-sans); }
div[style*="color:green"] { color: var(--sf-moss-d) !important; font-family: var(--sf-font-sans); }

/* ========================================================================== */
/* 8. Cards: post / event / flyer                                              */
/* ========================================================================== */
article.post, article.event, article.flyer {
  border: var(--sf-bw-2) solid var(--sf-ink-1);
  background: var(--sf-paper-1);
  box-shadow: var(--sf-sh-block);
  padding: var(--sf-s5) var(--sf-s5) var(--sf-s4);
  margin-bottom: var(--sf-s5);
  font-family: var(--sf-font-serif);
}

article.post header,
article.event header {
  display: flex; align-items: baseline; gap: var(--sf-s2);
  font-family: var(--sf-font-mono); font-size: 12px;
  text-transform: uppercase; letter-spacing: 0.06em; color: var(--sf-fg-quiet);
  margin-bottom: var(--sf-s2);
  flex-wrap: wrap;
}
article.post header a, article.event header a { color: var(--sf-ink-1); text-decoration: none; font-weight: 500; }
article.post header small, article.event header small { color: var(--sf-fg-quiet); }

article.post p { font-size: 18px; line-height: 1.55; margin: var(--sf-s2) 0 var(--sf-s3); }
article.post .post-images { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--sf-s2); margin-bottom: var(--sf-s3); }
article.post .post-images img { width: 100%; height: auto; display: block; border: var(--sf-bw-2) solid var(--sf-ink-1); }

article.post footer, article.event footer, article.flyer footer {
  border-top: 1px solid var(--sf-paper-3);
  padding-top: var(--sf-s2);
  font-family: var(--sf-font-mono);
  font-size: 11px;
  color: var(--sf-fg-quiet);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

article.event h2 { font-size: 24px; margin: 0 0 var(--sf-s1); }
article.event p strong { font-family: var(--sf-font-mono); font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--sf-fg-quiet); }
article.event img { max-width: 100%; height: auto; border: var(--sf-bw-2) solid var(--sf-ink-1); }

/* Flyer is image-led (image rendered first in the partial) */
article.flyer { padding: 0; background: #fff8e6; max-width: 360px; }
article.flyer > img,
article.flyer > a > img { display: block; width: 100%; aspect-ratio: 2/3; object-fit: cover; border-bottom: var(--sf-bw-2) solid var(--sf-ink-1); }
article.flyer > div, article.flyer > p, article.flyer > footer { padding: var(--sf-s3) var(--sf-s4); }
article.flyer > div { font-family: var(--sf-font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--sf-fg-quiet); padding-bottom: 0; }
article.flyer > p { font-size: 14px; line-height: 1.4; color: var(--sf-fg-muted); padding-top: var(--sf-s2); margin: 0; }

/* ========================================================================== */
/* 9. Tags (.tag is emitted inline by partials)                                */
/* ========================================================================== */
.tag {
  display: inline-block;
  font-family: var(--sf-font-mono);
  font-size: 11px;
  text-transform: lowercase;
  letter-spacing: 0.04em;
  padding: 3px 10px;
  margin-right: 4px;
  border: var(--sf-bw-2) solid var(--sf-ink-1);
  background: var(--sf-paper-1);
  color: var(--sf-ink-1);
  border-radius: 999px;
  text-decoration: none;
}
a.tag:hover, .tag:hover { background: var(--sf-plum-l); }

/* ========================================================================== */
/* 10. Reactions                                                               */
/* ========================================================================== */
.reactions { display: flex; flex-wrap: wrap; gap: var(--sf-s2); margin: var(--sf-s3) 0 var(--sf-s4); }
.reactions form.button_to { margin: 0; }
.reactions button.reaction,
.reactions button.reaction-active {
  font-family: var(--sf-font-mono);
  text-transform: lowercase;
  font-size: 12px;
  font-weight: 500;
  padding: 6px 12px;
  min-height: 0;
  box-shadow: var(--sf-sh-block-sm);
}
.reactions button.reaction-active { background: var(--sf-ochre); color: var(--sf-ink-1); }

/* ========================================================================== */
/* 11. Comments                                                                */
/* ========================================================================== */
.comments-section { border-top: var(--sf-bw-2) solid var(--sf-rule); padding-top: var(--sf-s5); margin-top: var(--sf-s6); }
.comments-section h3 { font-family: var(--sf-font-display); font-size: 14px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--sf-fg-quiet); margin-bottom: var(--sf-s4); }
.comment { padding: var(--sf-s3) 0; border-bottom: 1px solid var(--sf-paper-3); }
.comment.comment-depth-1 { margin-left: var(--sf-s5); padding-left: var(--sf-s4); border-left: var(--sf-bw-2) solid var(--sf-paper-3); }
.comment p:first-child { margin-bottom: var(--sf-s1); font-family: var(--sf-font-mono); font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--sf-fg-quiet); }
.comment p:first-child strong a { color: var(--sf-ink-1); text-decoration: none; }
.comment .comment-body { font-size: 15px; line-height: 1.5; }
.comment details summary { cursor: pointer; font-family: var(--sf-font-sans); font-size: 13px; color: var(--sf-fg-muted); margin-top: var(--sf-s2); }
.replies { margin-top: var(--sf-s2); }

/* ========================================================================== */
/* 12. Profile + sections                                                      */
/* ========================================================================== */
header h1 { font-family: var(--sf-font-display); font-size: 32px; letter-spacing: 0.02em; margin: 0; }
header h2 { font-size: 22px; font-weight: 500; color: var(--sf-fg-muted); margin: var(--sf-s1) 0 var(--sf-s3); }
section { margin: var(--sf-s6) 0; }
section h3 { font-family: var(--sf-font-display); font-size: 14px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--sf-fg-quiet); border-bottom: 1px solid var(--sf-paper-3); padding-bottom: var(--sf-s2); margin-bottom: var(--sf-s4); }

/* ========================================================================== */
/* 13. Quota / countdown banner (posts/new)                                    */
/* ========================================================================== */
#quota-exhausted-banner {
  background: var(--sf-ochre-l);
  border: var(--sf-bw-2) solid var(--sf-ink-1);
  padding: var(--sf-s3) var(--sf-s4);
  font-family: var(--sf-font-serif);
  color: var(--sf-ink-1) !important;
  margin-bottom: var(--sf-s4);
}
#quota-countdown { font-family: var(--sf-font-pixel); font-size: 22px; letter-spacing: 0.04em; color: var(--sf-brick-d); }
/* Tick animation: a single 80ms snap on each text update via a key change */
#quota-countdown { animation: sf-tick 80ms ease-out; animation-iteration-count: 1; }
@keyframes sf-tick {
  0%   { transform: translateY(-1px); }
  100% { transform: translateY(0); }
}

/* "1/2" or "X used of LIMIT" callout above */
form + p, p:has(strong) { font-family: var(--sf-font-serif); }

/* ========================================================================== */
/* 14. Focus states (accessibility)                                            */
/* ========================================================================== */
:focus-visible { outline: 2px solid var(--sf-brick); outline-offset: 2px; }

/* ========================================================================== */
/* 15. Pagination (Pagy default classes)                                       */
/* ========================================================================== */
.pagy.nav, nav.pagy { display: flex; gap: var(--sf-s2); justify-content: center; margin: var(--sf-s5) 0; font-family: var(--sf-font-mono); font-size: 12px; }
.pagy.nav a, nav.pagy a, .pagy.nav span, nav.pagy span { padding: 4px 10px; border: var(--sf-bw-2) solid var(--sf-ink-1); color: var(--sf-ink-1); text-decoration: none; }
.pagy.nav a.current, .pagy.nav .current, nav.pagy .current { background: var(--sf-ink-1); color: var(--sf-paper-0); }

/* ========================================================================== */
/* 16. Tiny utility classes                                                    */
/* ========================================================================== */
.sf-eyebrow { font-family: var(--sf-font-display); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--sf-fg-quiet); }
.sf-meta    { font-family: var(--sf-font-mono);    font-size: 12px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--sf-fg-quiet); }
.sf-display { font-family: var(--sf-font-display); letter-spacing: 0.02em; }
.sf-pixel   { font-family: var(--sf-font-pixel); }
/* Append the following block to slofi.css for the new top-bar markup
   produced by the layout in handoff/application.html.erb. Or merge in place. */

.sf-topbar {
  display: flex; align-items: stretch; height: 56px;
  border-bottom: var(--sf-bw-2) solid var(--sf-rule);
  background: var(--sf-paper-0);
  position: sticky; top: 0; z-index: 5;
  font-family: var(--sf-font-sans); font-size: 14px;
}
.sf-topbar__brand {
  display: flex; align-items: center;
  padding: 0 var(--sf-s5);
  font-family: var(--sf-font-display); font-size: 22px;
  letter-spacing: 0.02em;
  color: var(--sf-ink-1) !important;
  text-decoration: none !important;
  border-right: var(--sf-bw-2) solid var(--sf-rule);
  white-space: nowrap;
}
.sf-topbar__tabs { display: flex; flex: 1; min-width: 0; }
.sf-topbar__tab {
  display: flex; align-items: center;
  padding: 0 var(--sf-s4);
  color: var(--sf-ink-1) !important;
  text-decoration: none !important;
  text-transform: lowercase;
  font-weight: 500;
}
.sf-topbar__tab:first-child { padding-left: var(--sf-s5); }
.sf-topbar__tab:hover { background: var(--sf-paper-2); }
.sf-topbar__tab--active { background: var(--sf-ink-1); color: var(--sf-paper-0) !important; }
.sf-topbar__right {
  margin-left: auto; display: flex; align-items: center; gap: var(--sf-s3);
  padding: 0 var(--sf-s4);
  border-left: var(--sf-bw-2) solid var(--sf-rule);
}
.sf-topbar__counter {
  font-family: var(--sf-font-pixel); font-size: 18px;
  border: var(--sf-bw-2) solid var(--sf-ink-1);
  padding: 2px 10px; background: var(--sf-paper-0);
  white-space: nowrap;
}
.sf-topbar__signout {
  font-size: 12px; padding: 4px 10px;
  box-shadow: var(--sf-sh-block-sm); min-height: 0;
}
/* Append to slofi.css — supports the new event header markup */

article.event header { display: flex; gap: var(--sf-s4); align-items: stretch; flex-wrap: nowrap; }
.sf-event__date {
  flex-shrink: 0;
  text-align: center;
  padding-right: var(--sf-s4);
  border-right: var(--sf-bw-2) solid var(--sf-ink-1);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  min-width: 56px;
}
.sf-event__date-d { font-family: var(--sf-font-display); font-size: 32px; line-height: 1; color: var(--sf-ochre-d); }
.sf-event__date-m { font-family: var(--sf-font-mono); font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--sf-fg-quiet); margin-top: var(--sf-s1); }
.sf-event__head-text { flex: 1; min-width: 0; }
.sf-event__head-text h2 { margin: 0 0 4px; }
.sf-event__head-text small { display: block; }
