/* Swan Yard Coffee & Kitchen
   Layout concept: the shop itself. Charcoal menu-board bands under an oak rail,
   alternating with pale concrete bands. Dot leaders and prices like the boards.
   One loud thing: the engraved, striped SWAN YARD letterform from the sign. */

:root{
  --board:#262423;      /* menu board charcoal */
  --board-2:#33302e;    /* lighter panel on the boards */
  --chalk:#f3f2ef;      /* board lettering */
  --chalk-dim:#b3aea8;
  --concrete:#e5e3de;   /* the beam and floor */
  --concrete-2:#d6d3cc;
  --ink:#262423;
  --ink-dim:#5f5a55;
  --oak:#b5824f;        /* the timber rail over the boards */
  --oak-deep:#8a5f36;
  --sign:#3b4742;       /* exterior sign green */

  --display:"Jost","Futura","Century Gothic","Avenir Next",system-ui,sans-serif;
  --body:"Jost","Avenir Next","Segoe UI",system-ui,sans-serif;
  --chalkhand:"Caveat Brush","Marker Felt","Comic Sans MS",cursive;

  --step--1:.875rem; --step-0:1.0625rem; --step-1:1.3rem; --step-2:1.7rem; --step-3:2.4rem; --step-4:3.4rem;
  --wrap:72rem;
  color-scheme:light;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation:none!important;transition:none!important}}
body{margin:0;background:var(--concrete);color:var(--ink);font-family:var(--body);font-size:var(--step-0);line-height:1.6;font-weight:400;-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}
a{color:inherit}
:focus-visible{outline:3px solid var(--oak);outline-offset:3px;border-radius:2px}
h1,h2,h3{font-family:var(--display);line-height:1.1;margin:0;text-wrap:balance;font-weight:600}
p{margin:0}
.wrap{max-width:var(--wrap);margin-inline:auto;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.skip{position:absolute;left:-999px;top:0;background:var(--chalk);padding:.5rem 1rem;z-index:99}
.skip:focus{left:1rem}

/* ---------- Wordmark (SVG) ---------- */
.wm text{font-family:var(--display);font-weight:700;letter-spacing:0}
.wm .wm-shadow{fill:var(--chalk)}
.wm .wm-body{fill:var(--board);stroke:var(--chalk);stroke-width:3;paint-order:stroke}
.wm .wm-lines{fill:url(#stripes)}

/* ---------- Oak rail ---------- */
.rail{height:14px;background:
  repeating-linear-gradient(90deg,rgba(0,0,0,.07) 0 2px,transparent 2px 37px),
  linear-gradient(180deg,#c99868,var(--oak) 45%,var(--oak-deep));
  box-shadow:0 2px 0 rgba(0,0,0,.25)}

/* ---------- Header ---------- */
.site-head{position:sticky;top:0;z-index:20;background:var(--board);color:var(--chalk)}
.site-head .wrap{display:flex;align-items:center;gap:1.5rem;padding-block:.7rem}
.brand{display:flex;align-items:center;gap:.75rem;text-decoration:none;margin-right:auto}
.brand svg{width:118px;height:auto}
.brand small{font-size:.68rem;letter-spacing:.28em;color:var(--chalk-dim);white-space:nowrap}
.nav{display:flex;gap:1.6rem;align-items:center}
.nav a{text-decoration:none;font-weight:500;letter-spacing:.02em;padding-block:.3rem;border-bottom:2px solid transparent}
.nav a:hover{border-bottom-color:var(--chalk-dim)}
.nav a[aria-current="page"]{border-bottom-color:var(--oak)}
.btn{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--body);font-weight:600;font-size:1rem;text-decoration:none;padding:.8rem 1.3rem;border-radius:3px;border:2px solid currentColor;cursor:pointer;line-height:1}
.btn-oak{background:var(--oak);border-color:var(--oak);color:#1d1a17}
.btn-oak:hover{background:#c6935f;border-color:#c6935f}
.btn-ghost{background:transparent;color:var(--chalk)}
.btn-ghost:hover{background:rgba(255,255,255,.08)}
.btn-ink{background:var(--ink);border-color:var(--ink);color:var(--chalk)}
.btn-ink:hover{background:#3a3734}
.nav-toggle{display:none;background:none;border:2px solid var(--chalk-dim);border-radius:3px;padding:.55rem .6rem;cursor:pointer;gap:4px;flex-direction:column}
.nav-toggle span{display:block;width:20px;height:2px;background:var(--chalk)}
@media (max-width:760px){
  .nav-toggle{display:flex}
  .brand small{display:none}
  .nav{display:none;position:absolute;left:0;right:0;top:100%;background:var(--board);flex-direction:column;align-items:stretch;gap:0;padding:0 max(16px,env(safe-area-inset-right,0px)) 1rem max(16px,env(safe-area-inset-left,0px));border-bottom:1px solid #000}
  .nav.open{display:flex}
  .nav a{padding:.9rem 0;border-bottom:1px solid #3c3936}
  .nav .btn{margin-top:1rem;justify-content:center}
}

/* ---------- Bands ---------- */
.band{padding-block:clamp(3.5rem,8vw,6rem)}
.band-board{background:var(--board);color:var(--chalk)}
.band-board .muted{color:var(--chalk-dim)}
.muted{color:var(--ink-dim)}
.band-sign{background:var(--sign);color:var(--chalk)}
.section-head{display:grid;gap:.9rem;max-width:40rem;margin-bottom:2.5rem}
.section-head h2{font-size:var(--step-3)}
.board-caps{font-family:var(--display);font-weight:600;letter-spacing:.12em;text-transform:uppercase}
.lede{font-size:var(--step-1);line-height:1.5;max-width:36rem}

/* ---------- Hero ---------- */
.hero{background:var(--board);color:var(--chalk);overflow:hidden}
.hero .wrap{display:grid;grid-template-columns:1.15fr 1fr;gap:clamp(2rem,5vw,4rem);align-items:center;padding-block:clamp(2.5rem,6vw,5rem)}
.hero-mark svg{width:100%;height:auto;max-width:620px}
.hero-sub{display:flex;align-items:center;gap:1rem;margin-top:1.2rem;max-width:620px}
.hero-sub::before,.hero-sub::after{content:"";height:1px;background:var(--chalk-dim);flex:1;opacity:.6}
.hero-sub span{font-size:clamp(.95rem,2.2vw,1.35rem);letter-spacing:.32em;font-weight:500;white-space:nowrap}
.hero-copy{margin-top:2rem;display:grid;gap:1.5rem;max-width:34rem}
.hero-copy p{font-size:var(--step-1);line-height:1.45;color:var(--chalk)}
.hero-ctas{display:flex;flex-wrap:wrap;gap:.8rem}
.hero-photo{position:relative}
.hero-photo img{width:100%;aspect-ratio:4/5;object-fit:cover;border-radius:2px}
.hero-photo figcaption{position:absolute;left:-1px;bottom:1.25rem;background:var(--board);padding:.6rem 1rem;font-size:var(--step--1);color:var(--chalk-dim)}
.hero-photo::before{content:"";position:absolute;inset:-14px auto auto -14px;width:46%;height:46%;border-left:2px solid var(--oak);border-top:2px solid var(--oak);pointer-events:none}
@media (max-width:860px){.hero .wrap{grid-template-columns:1fr}.hero-photo img{aspect-ratio:4/3}}

/* page-load: letters draw in once */
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.hero-mark svg .row{animation:rise .9s cubic-bezier(.2,.7,.2,1) both}
.hero-mark svg .row2{animation-delay:.15s}

/* ---------- Proof strip ---------- */
.proof{background:var(--board-2);color:var(--chalk)}
.proof .wrap{display:flex;flex-wrap:wrap;gap:.6rem 2rem;align-items:center;padding-block:1.1rem}
.proof a{text-decoration:none}
.stars{display:inline-flex;gap:3px;vertical-align:-2px;margin-right:.4rem}
.stars i{width:13px;height:13px;border-radius:50%;background:var(--chalk);display:block}
.stars i.half{background:linear-gradient(90deg,var(--chalk) 60%,transparent 60%);box-shadow:inset 0 0 0 1.5px var(--chalk)}
.proof strong{font-weight:600}
.open-now{margin-left:auto;display:flex;align-items:center;gap:.5rem}
.dot{width:9px;height:9px;border-radius:50%;background:#7fbf8a}
.dot.closed{background:#c2695a}
@media (max-width:760px){.open-now{margin-left:0}}

/* ---------- Kitchen ---------- */
.produce{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border-top:2px solid var(--ink);margin-bottom:3.5rem}
.produce div{padding:1.1rem 1.2rem 1.2rem 0;border-bottom:1px solid var(--concrete-2)}
.produce div+div{padding-left:1.2rem;border-left:1px solid var(--concrete-2)}
.produce b{display:block;font-family:var(--display);font-weight:600;font-size:var(--step-1);line-height:1.2;margin-bottom:.3rem}
.produce span{color:var(--ink-dim);font-size:var(--step--1)}
@media (max-width:760px){.produce{grid-template-columns:1fr 1fr}.produce div:nth-child(3){padding-left:0;border-left:0}}

.dishes{display:grid;grid-template-columns:repeat(3,1fr);gap:2.5rem 1.75rem}
@media (max-width:900px){.dishes{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.dishes{grid-template-columns:1fr}}
.dish{display:grid;gap:.8rem;min-width:0}
.dish-line{display:flex;align-items:baseline;gap:.5rem;font-family:var(--display);font-weight:600;font-size:var(--step-1)}
.dish-line .lead{flex:1;border-bottom:2px dotted currentColor;opacity:.45;transform:translateY(-.3em);min-width:1.5rem}
.dish p{font-size:var(--step--1);color:var(--ink-dim)}
.band-board .dish p{color:var(--chalk-dim)}

/* photo slot: shows a labelled placeholder until the real image exists */
.shot{position:relative;margin:0;aspect-ratio:4/3;max-width:100%;background:
  repeating-linear-gradient(0deg,rgba(255,255,255,.07) 0 2px,transparent 2px 7px),var(--board-2);
  border-radius:2px;overflow:hidden;color:var(--chalk-dim)}
.shot::after{content:"Photo to come: " attr(data-need);position:absolute;inset:auto 0 0 0;padding:.8rem 1rem;font-size:.82rem;line-height:1.35}
.shot img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.shot.tall{aspect-ratio:4/5}

/* ---------- Coffee ---------- */
.coffee-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(2rem,5vw,4rem);align-items:start}
@media (max-width:860px){.coffee-grid{grid-template-columns:1fr}}
.boardlist{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}
.boardlist li{display:flex;align-items:baseline;gap:.6rem;font-size:var(--step-1)}
.boardlist .lead{flex:1;border-bottom:2px dotted currentColor;opacity:.4;transform:translateY(-.3em);min-width:1rem}
.boardlist .price{font-variant-numeric:tabular-nums}
.boardnote{margin-top:1rem;font-size:var(--step--1)}
.chalkboard{background:#1b1a19;border:10px solid #6b4a2b;border-radius:14px 14px 6px 6px;padding:1.6rem 1.6rem 1.8rem;font-family:var(--chalkhand);font-size:1.45rem;line-height:1.25;color:#f1efe9;box-shadow:inset 0 0 40px rgba(255,255,255,.04)}
.chalkboard h3{font-family:var(--chalkhand);font-weight:400;font-size:2.1rem;margin-bottom:.7rem;color:#fff}
.chalkboard ul{list-style:none;margin:0;padding:0;columns:2;column-gap:1.5rem}
.chalkboard li:nth-child(4n+1){color:#9be38f}.chalkboard li:nth-child(4n+2){color:#ffd36e}
.chalkboard li:nth-child(4n+3){color:#ff9bc4}.chalkboard li:nth-child(4n){color:#9fd4ff}
.chalkboard .price{display:block;margin-top:1rem;font-size:2rem;color:#9fd4ff}
.chalkboard small{display:block;font-size:1.15rem;color:#c9f0a6;margin-top:.2rem}
.coffee-more{display:grid;grid-template-columns:repeat(3,1fr);gap:1.75rem;margin-top:3.5rem}
@media (max-width:760px){.coffee-more{grid-template-columns:1fr}}

/* ---------- Paul ---------- */
.paul{display:grid;grid-template-columns:.95fr 1.05fr;gap:clamp(2rem,5vw,4.5rem);align-items:center}
@media (max-width:860px){.paul{grid-template-columns:1fr}}
.paul img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:2px}
.paul-copy{display:grid;gap:1.1rem;max-width:36rem}
.paul-copy h2{font-size:var(--step-3)}
.paul-copy blockquote{margin:.6rem 0 0;padding:1rem 0 0;border-top:2px solid var(--ink);font-size:var(--step-1);line-height:1.4}
.paul-copy cite{display:block;font-style:normal;font-size:var(--step--1);color:var(--ink-dim);margin-top:.4rem}

/* ---------- Reviews ---------- */
.reviews{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border-top:1px solid #4a4642}
.reviews figure{margin:0;padding:1.6rem 1.6rem 1.6rem 0;border-bottom:1px solid #4a4642;display:grid;gap:.8rem;align-content:start}
.reviews figure:not(:nth-child(3n+1)){padding-left:1.6rem;border-left:1px solid #4a4642}
.reviews blockquote{margin:0;font-size:var(--step-1);line-height:1.4}
.reviews figcaption{font-size:var(--step--1);color:var(--chalk-dim)}
@media (max-width:860px){.reviews{grid-template-columns:1fr}.reviews figure:not(:nth-child(3n+1)){padding-left:0;border-left:0}}
.review-head{display:flex;flex-wrap:wrap;gap:1.5rem 3rem;align-items:end;justify-content:space-between;margin-bottom:2.5rem}
.score{display:flex;align-items:baseline;gap:.8rem}
.score b{font-family:var(--display);font-size:var(--step-4);font-weight:600;line-height:1}
.badge-tc{display:inline-block;border:2px solid var(--chalk);padding:.35rem .7rem;font-size:var(--step--1);font-weight:600;border-radius:3px}

/* ---------- Instagram ---------- */
.ig-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:1rem;margin-bottom:2rem}
.ig-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.ig-grid a{display:block;aspect-ratio:1;overflow:hidden;background:var(--concrete-2)}
.ig-grid img{width:100%;height:100%;object-fit:cover;transition:transform .4s}
.ig-grid a:hover img{transform:scale(1.04)}
@media (max-width:760px){.ig-grid{grid-template-columns:repeat(3,1fr)}}

/* ---------- Visit ---------- */
.visit{display:grid;grid-template-columns:repeat(3,1fr);gap:2rem}
@media (max-width:860px){.visit{grid-template-columns:1fr}}
.visit h3{font-size:var(--step-1);margin-bottom:.6rem}
.hours{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
.hours td{padding:.3rem 0;border-bottom:1px solid rgba(255,255,255,.14)}
.hours td+td{text-align:right}
.hours tr.today td{font-weight:600;color:#fff}
.band:not(.band-board):not(.band-sign) .hours td{border-bottom-color:var(--concrete-2)}
.band:not(.band-board):not(.band-sign) .hours tr.today td{color:var(--ink)}

/* ---------- Footer ---------- */
.site-foot{background:var(--board);color:var(--chalk-dim);font-size:var(--step--1)}
.site-foot .wrap{display:flex;flex-wrap:wrap;gap:1rem 2rem;justify-content:space-between;align-items:center;padding-block:2rem}
.site-foot nav{display:flex;flex-wrap:wrap;gap:1.25rem}
.site-foot a{text-decoration:none}
.site-foot a:hover{color:var(--chalk)}

/* ---------- Menu page ---------- */
.page-hero{background:var(--board);color:var(--chalk)}
.page-hero .wrap{padding-block:clamp(2.5rem,6vw,4.5rem);display:grid;gap:1rem}
.page-hero h1{font-size:var(--step-4);letter-spacing:.06em;text-transform:uppercase;font-weight:600}
.page-hero p{max-width:40rem;color:var(--chalk-dim);font-size:var(--step-1);line-height:1.45}
.tabs{position:sticky;top:var(--head-h,62px);z-index:15;background:var(--board-2);color:var(--chalk);border-bottom:1px solid #000}
.tabs .wrap{display:flex;gap:.4rem;overflow-x:auto;padding-block:.6rem;scrollbar-width:none}
.tabs .wrap::-webkit-scrollbar{display:none}
.tabs a{flex:none;text-decoration:none;font-weight:500;font-size:.95rem;padding:.45rem .85rem;border-radius:999px;border:1px solid transparent;white-space:nowrap}
.tabs a:hover{border-color:#5a5550}
.tabs a.on{background:var(--chalk);color:var(--ink)}
.menu-sec{scroll-margin-top:calc(var(--head-h,62px) + 64px)}
.menu-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2.5rem clamp(2rem,5vw,4rem)}
@media (max-width:860px){.menu-cols{grid-template-columns:1fr}}
.panel{background:var(--board);color:var(--chalk);padding:clamp(1.4rem,3vw,2.2rem);border-radius:2px;min-width:0}
.panel.light{background:transparent;color:var(--ink);padding-inline:0}
.panel h2{font-size:var(--step-2);letter-spacing:.08em;text-transform:uppercase;font-weight:600;margin-bottom:.35rem}
.panel .when{font-size:var(--step--1);color:var(--chalk-dim);margin-bottom:1.4rem}
.panel.light .when{color:var(--ink-dim)}
.item{display:grid;gap:.2rem;padding-block:.75rem}
.item+.item{border-top:1px solid rgba(255,255,255,.08)}
.panel.light .item+.item{border-top-color:var(--concrete-2)}
.item-top{display:flex;align-items:baseline;gap:.6rem;font-weight:500;font-size:1.12rem}
.item-top .lead{flex:1;border-bottom:2px dotted currentColor;opacity:.35;transform:translateY(-.3em);min-width:1rem}
.item-top .price{font-variant-numeric:tabular-nums;font-weight:500}
.item p{font-size:.95rem;color:var(--chalk-dim);max-width:34rem}
.panel.light .item p{color:var(--ink-dim)}
.item .tag{font-size:.78rem;font-weight:600;border:1px solid currentColor;border-radius:3px;padding:.05rem .35rem;margin-left:.35rem;vertical-align:2px;opacity:.8}
.boxout{background:var(--board-2);padding:1rem 1.2rem;border-radius:2px;margin-top:1rem;font-size:.95rem;color:var(--chalk-dim)}
.panel.light .boxout{background:var(--concrete);color:var(--ink-dim)}
.boxout b{color:var(--chalk);font-weight:600}
.panel.light .boxout b{color:var(--ink)}
.allergy{display:grid;grid-template-columns:auto 1fr;gap:1.5rem;align-items:center;border:2px solid var(--ink);padding:1.5rem;border-radius:2px}
.allergy svg{width:64px;height:auto}
@media (max-width:520px){.allergy{grid-template-columns:1fr}}

/* ---------- Contact page ---------- */
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,5vw,4rem);align-items:start}
@media (max-width:860px){.contact-grid{grid-template-columns:1fr}}
.contact-list{display:grid;gap:1.75rem}
.contact-list h2{font-size:var(--step-1);margin-bottom:.4rem}
.big-line{font-family:var(--display);font-size:var(--step-2);font-weight:500;line-height:1.25;text-decoration:none}
a.big-line:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:5px}
.map{width:100%;aspect-ratio:4/3;border:0;border-radius:2px;filter:grayscale(.85) contrast(1.05);background:var(--concrete-2)}
.form{display:grid;gap:1rem}
.form label{display:grid;gap:.35rem;font-weight:500;font-size:.95rem}
.form input,.form textarea,.form select{font:inherit;font-size:1rem;padding:.75rem .85rem;border:2px solid #4a4642;background:var(--board-2);color:var(--chalk);border-radius:3px;width:100%}
.form input:focus,.form textarea:focus,.form select:focus{outline:none;border-color:var(--oak)}
.form textarea{min-height:9rem;resize:vertical}
.form .row2{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media (max-width:520px){.form .row2{grid-template-columns:1fr}}
.form-msg{font-size:.95rem;min-height:1.5em}
.facts{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:.5rem}
.facts li{border:1px solid currentColor;border-radius:999px;padding:.3rem .8rem;font-size:.9rem;opacity:.85}
[hidden]{display:none!important}
