/* Web Friend Light v18 — one fixed look. Mobile first. White ground, one action colour, one font.
   Nunito Sans draws lighter than Rubik/Nunito at the same weight, so every weight here sits one step up. */
@font-face{font-family:"Nunito Sans";src:url(fonts/nunito-sans.woff2) format("woff2");font-weight:400 800;font-display:swap}
:root{
  --ink:#1a1a1a; --muted:#5b5b5b; --line:#e6e6e6; --ground:#fff;
  --action:#d9480f; --action-ink:#fff;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--ground);color:var(--ink);font:500 17px/1.55 "Nunito Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
a{color:inherit}
h1,h2,h3{line-height:1.15;margin:0 0 .5rem;font-weight:700}
h1{font-size:2rem;letter-spacing:-.02em}
h2{font-size:1.35rem;margin-bottom:1rem}
h3{font-size:1.05rem}
p{margin:0 0 1rem}

/* sticky header: name + a wide Call button on phones, name + the number as text on desktop */
.top{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.6rem 1rem;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.top .name{font-weight:800;text-decoration:none;font-size:.95rem;line-height:1.2;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}   /* v9: two lines max, never dots */
.top-phone{display:none;color:var(--muted);font-weight:600}
.top-call{padding:.6rem 1.4rem;font-size:1rem;white-space:nowrap;flex-shrink:0}

main{max-width:1000px;margin:0 auto;padding:0 1rem 3rem}
section{padding:2rem 0;border-top:1px solid var(--line)}
section.intro{border-top:0;padding-top:2rem}
.eyebrow{text-transform:uppercase;letter-spacing:.08em;font-size:.8rem;color:var(--muted);margin-bottom:.75rem}
.sub{font-size:1.15rem;color:var(--muted);max-width:40rem}

/* buttons: full width on phones, natural width on desktop */
.actions{display:flex;flex-wrap:wrap;gap:.6rem;margin:1.25rem 0 0}
.btn{display:inline-block;padding:.9rem 1.35rem;border-radius:10px;background:var(--action);color:var(--action-ink);font-weight:700;text-decoration:none;line-height:1.2;text-align:center}
.btn-2{background:#fff;color:var(--action);box-shadow:inset 0 0 0 2px var(--action)}
.actions .btn{flex:1 1 100%}

/* hours: status line + compact table, on the first screen */
.hours{margin-top:1.25rem}
.hours .status{display:flex;align-items:center;gap:.5rem;font-weight:700;margin-bottom:.4rem}
.dot{width:.65rem;height:.65rem;border-radius:50%;background:#bbb;display:inline-block}
.dot.on{background:#1f9d55}.dot.off{background:#c33}
.hours dl{display:grid;grid-template-columns:auto 1fr;gap:.15rem 1rem;margin:0;color:var(--muted)}
.hours dt{font-weight:700}.hours dd{margin:0}

/* photo: its own shape on phones (height-capped); a square box, centre-cropped, on desktop */
.intro-photo{margin-top:1.75rem}
img.hero{display:block;width:100%;height:auto;max-height:60vh;object-fit:cover;border-radius:14px}

.cards{display:grid;gap:1rem;grid-template-columns:1fr}
.card{padding:1rem 1.2rem;border:1px solid var(--line);border-radius:12px}
.card p{margin:0;color:var(--muted)}

.quotes blockquote{margin:0 0 1.25rem;padding:0 0 0 1rem;border-left:3px solid var(--action)}
.quotes blockquote p{margin:0 0 .25rem;font-size:1.05rem}
.quotes cite{font-style:normal;color:var(--muted);font-size:.9rem}

.about p{font-size:1.1rem;max-width:44rem}
.find a:not(.btn){color:var(--ink)}   /* v2 bug: this rule outranked .btn and painted the Call button black */
footer{border-top:1px solid var(--line);padding:1.5rem 1rem;color:var(--muted);font-size:.9rem;text-align:center}
footer a{color:inherit}

@media (min-width:640px){
  h1{font-size:2.6rem}
  .claim-bar br{display:none}   /* v17: two lines on phones, one line on desktop */
  .claim-bar .wf-btn{margin:0 0 0 .6rem}
  .cards{grid-template-columns:1fr 1fr}
  .actions .btn{flex:0 0 auto}
}
@media (min-width:960px){
  h1{font-size:3rem}
  .top-phone{display:inline}
  .top-call{display:none}
  section.intro{display:grid;grid-template-columns:1fr 1fr;gap:3rem;align-items:center;padding-top:3rem}
  .intro-photo{margin-top:0}
  img.hero{aspect-ratio:1/1;height:auto;max-height:none}
  .cards{grid-template-columns:repeat(4,1fr)}
}

/* v15: the claim bar (top, scrolls away) and the claim chip (bottom right, always there). Pitch mode, on for every light site.
   v38 (Oct 2 2026): the paywall. Both are hidden until the server says the site is in its free week; a paid site shows neither;
   an expired site shows the curtain: the page blurred, one card, one button. */
.claim-bar{background:#0e1a3a;color:#fff;text-align:center;padding:.6rem 1rem;font-size:.9rem;line-height:1.4}
.claim-bar a{color:#fff;font-weight:700;text-decoration:underline;text-underline-offset:2px;white-space:nowrap}
.claim-bar .wf-btn{display:inline-block;margin:.5rem 0 .1rem;background:#fff;color:#0e1a3a;text-decoration:none;border-radius:999px;padding:.45rem 1.1rem}   /* v39: the pay button in the bar is a button */
.claim-chip{position:fixed;right:14px;bottom:14px;z-index:20;background:var(--action);color:var(--action-ink);border-radius:999px;padding:.8rem 1.1rem;font-weight:700;font-size:.95rem;text-decoration:none;box-shadow:0 6px 20px rgba(0,0,0,.25)}
[hidden]{display:none!important}
.curtain{position:fixed;inset:0;z-index:30;display:flex;align-items:flex-start;justify-content:center;padding:1.5rem;overflow-y:auto;-webkit-overflow-scrolling:touch;background:rgba(14,26,58,.55);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.curtain-card{background:#fff;color:var(--ink);border-radius:16px;padding:1.6rem 1.4rem;max-width:26rem;width:100%;margin:auto;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.curtain-card h2{font-size:1.4rem;margin-bottom:.4rem}
.curtain-card p{color:var(--muted);margin:0 0 1.1rem}
.curtain-card .btn{display:inline-block}
body.wf-expired main,body.wf-expired header.top,body.wf-expired footer{filter:blur(6px);pointer-events:none;user-select:none}
body.wf-expired{overflow:hidden}
/* v40 (Oct 5 2026): the Claim card. The site stays visible behind a light veil (it is the thing they are proud of); the card asks where to send the link. */
.curtain.claim{background:rgba(14,26,58,.45);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.curtain-card input{display:block;width:100%;margin:0 0 .6rem;padding:.8rem .9rem;font:inherit;font-size:1.05rem;border:1.5px solid #c9c9c9;border-radius:10px;background:#fff;color:var(--ink)}
.curtain-card input:focus{outline:none;border-color:var(--action)}
.curtain-card button.btn{width:100%;border:0;font:inherit;font-size:1.05rem;cursor:pointer;margin-top:.2rem}
.curtain-card .wf-err{color:#b3261e;margin:.6rem 0 0;font-size:.95rem}
body.wf-claiming{overflow:hidden}





.curtain-card .wf-fine{color:#8a8a8a;font-size:.72rem;margin:.5rem 0 .8rem;line-height:1.3;text-align:left}
.curtain-card .wf-opt{display:flex;align-items:flex-start;gap:.55rem;text-align:left;font-size:.95rem;color:var(--ink);margin:.2rem 0 0;cursor:pointer}
.curtain-card .wf-opt input{width:1.15rem;height:1.15rem;margin:.15rem 0 0;flex:0 0 auto;accent-color:var(--action);display:inline-block;padding:0}
.curtain-card .wf-brand{display:flex;align-items:center;justify-content:center;gap:.4rem;font-weight:700;font-size:1rem;color:#2b2622;margin:-.2rem 0 .5rem;letter-spacing:.01em}
.curtain-card .wf-brand b{color:#c4643d;font-weight:700}
.curtain-card .wf-by{font-size:.85rem;color:#8a8a8a;margin:0 0 .9rem}
/* wf-bar-v51 */
/* v51 (Oct 11 2026): the bar is one tappable line that offers a web address; no pill. Pressed (phones) or hovered (computers) it takes the site's own color. */
.claim-bar{position:sticky;top:0;z-index:15;display:flex;align-items:center;justify-content:center;box-sizing:border-box;min-height:58px;background:#0e1a3a;color:#fff;text-align:center;padding:.5rem 12px;font-size:1rem;line-height:1.3;text-decoration:none;overflow:hidden;transition:background .15s,color .15s;-webkit-tap-highlight-color:transparent}
body.wf-bar-on .top{position:static}   /* the bar stays at the top of the screen while you scroll (Tony, Oct 11: "maybe no one clicks it because it goes away"); the site's own header was already pinned there, and two pinned strips would take a sixth of a phone, so while the bar shows the header scrolls with the page. A paid site has no bar and its header pins as before. */
.claim-bar #wf-bar-line{display:inline-block;white-space:nowrap;max-width:100%;vertical-align:top}
.claim-bar .wf-dom{font-weight:800}
.claim-bar .wf-get{text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:2px}
.claim-bar .wf-go{display:inline-block;font-weight:800;margin-left:.15rem;transition:transform .15s}
.claim-bar:hover,.claim-bar:active{background:var(--action);color:var(--action-ink)}
.claim-bar:hover .wf-go,.claim-bar:active .wf-go{transform:translateX(4px)}
/* /wf-bar-v51 */

/* Nov 3 2026, by hand for MatchBox Tattoo (Tony's go): Brett's own work up front and a Recent work gallery */
.top{background:#111;color:#fff;backdrop-filter:none}.top .name{color:#fff}.top-phone{color:#ddd}.top-call{background:#fff;color:#111}
.hero{border-radius:16px;box-shadow:0 14px 34px rgba(0,0,0,.25)}
.work-grid{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.work-grid img{display:block;width:100%;height:auto;aspect-ratio:3/4;object-fit:cover;border-radius:12px}
@media (min-width:960px){.work-grid{grid-template-columns:repeat(3,1fr);gap:1rem}}
@media (max-width:799px){section.intro{display:flex;flex-direction:column}.intro-photo{order:-1;margin:0 0 1.25rem}.intro-photo .hero{max-height:460px;width:100%;object-fit:cover}}
