/* Dorpsdraad – studio site. Mobile-first, self-hosted fonts, no external requests.
   Colours and fonts come from tokens.css (Designer's brand, 11 Oct 2026), which must load first.
   Only layout tokens live here. */
:root{
  --radius:12px; --wrap:68rem;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;font-family:var(--sans);font-size:1.0625rem;line-height:1.6;color:var(--ink);background:var(--bg)}
img,svg{max-width:100%;height:auto}
a{color:var(--ochre)} a:hover{color:var(--ochre-dark)}
:focus-visible{outline:3px solid var(--green);outline-offset:2px}
h1,h2,h3{font-family:var(--serif);font-weight:var(--dd-fw-head);line-height:1.2;color:var(--ink)}
h1{font-weight:var(--dd-fw-head-strong)}
h1{font-size:clamp(2rem,6vw,3.25rem);margin:.25em 0 .4em;letter-spacing:-.01em}
h1,h2{overflow-wrap:anywhere;hyphens:auto;-webkit-hyphens:auto} /* long Afrikaans compounds (Privaatheidskennisgewing) must not overflow at 360px; lang="af" */
h2{font-size:clamp(1.6rem,4vw,2.25rem);margin:0 0 .6em}
h3{font-size:1.35rem;margin:0 0 .3em}
.wrap{width:min(100% - 2.5rem,var(--wrap));margin-inline:auto}
.narrow{max-width:44rem}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-999px;top:0;background:var(--ink);color:#fff;padding:.6rem 1rem;z-index:10}
.skip:focus{left:1rem;top:1rem}

/* Header */
.site-header{background:var(--bg);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.header-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0 17px;padding:0}
/* Clear space per BRAND.md: ½ the mark height (~17px) on every side of the logo. */
.brand{display:flex;align-items:center;text-decoration:none;padding:17px 0;flex:none}
.brand img{display:block;width:174px;height:35px}
@media (max-width:29.99rem){.brand-compact img{width:40px;height:40px}} /* home page on phones: mark only, so the nav fits on one row */
.nav{display:flex;flex-wrap:wrap;gap:.25rem 1rem;list-style:none;margin:0;padding:0;font-size:.95rem}
.nav a{color:var(--ink);text-decoration:none;padding:0 .15rem;display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px} /* 44x44 tap targets */
.nav a:hover{text-decoration:underline}
.nav-cta{background:var(--green);color:#fff!important;padding:0 .9rem!important;border-radius:999px}

/* Hero */
.hero{padding:3rem 0 0;position:relative}
.eyebrow{color:var(--green);font-weight:600;text-transform:uppercase;letter-spacing:.06em;font-size:.85rem;margin:0}
.lead{font-size:1.2rem;color:var(--muted);max-width:40rem}
.hero-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin:1.5rem 0}
.hero-points{list-style:none;padding:0;margin:0 0 2rem;display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;color:var(--muted);font-size:.95rem}
.hero-points li::before{content:"✓ ";color:var(--green);font-weight:700}
.draad{display:block;width:100%;height:40px;color:var(--ochre);fill:var(--ochre)}

/* Buttons */
.btn{display:inline-block;padding:.8rem 1.3rem;border-radius:999px;font-weight:600;text-decoration:none;border:2px solid transparent;font-size:1rem;cursor:pointer;font-family:inherit;min-height:48px}
.btn-primary{background:var(--ochre);color:var(--dd-on-accent)}
.btn-primary:hover{background:var(--ochre-dark);color:#fff}
.btn-ghost{border-color:var(--ink);color:var(--ink)}
.btn-ghost:hover{background:var(--ink);color:#fff}

/* Sections */
.section{padding:3.5rem 0}
.section-alt{background:var(--bg-alt)}
.section-alt a:not(.btn){color:var(--ochre-dark)} /* Koper on Kalk is only 4.55:1; brand.md says use Koper donker */
.section-intro{max-width:44rem;color:var(--muted)}
.steps{list-style:none;padding:0;margin:0;display:grid;gap:1.25rem;counter-reset:s}
.steps li{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.25rem 1.25rem 1rem;counter-increment:s}
.steps li::before{content:counter(s);display:inline-grid;place-items:center;width:2rem;height:2rem;border-radius:50%;background:var(--green);color:#fff;font-weight:700;margin-bottom:.5rem}
.steps p{margin:.25rem 0 0;color:var(--muted)}

/* Packages */
.packages{display:grid;gap:1.25rem;margin-top:1.5rem}
.package{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.5rem;display:flex;flex-direction:column}
.package-featured{border:2px solid var(--green)}
.package-sub{margin:0 0 .75rem;color:var(--muted)}
.price{margin:0;line-height:1.3}
.price .amount{font-family:var(--serif);font-size:2rem;font-weight:700}
.price .unit{color:var(--muted)}
.price-monthly .amount{font-size:1.5rem;color:var(--green)}
.fit{font-size:.95rem;color:var(--muted);border-top:1px solid var(--line);padding-top:.75rem;margin:1rem 0 .5rem}
.ticks{padding:0;margin:0 0 1rem;list-style:none;flex:1}
.ticks li{padding-left:1.5rem;position:relative;margin:.45rem 0;font-size:.97rem}
.ticks li::before{content:"✓";position:absolute;left:0;color:var(--green);font-weight:700}
.meta{font-size:.9rem;color:var(--muted);margin:0;border-top:1px solid var(--line);padding-top:.75rem}
.footnote{font-size:.9rem;color:var(--muted);max-width:50rem;margin-top:1.5rem}

/* Details / FAQ / add-ons */
details{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin:.6rem 0;padding:0 1.1rem}
summary{cursor:pointer;font-weight:600;padding:.9rem 0;min-height:48px;display:flex;align-items:center}
details[open] summary{border-bottom:1px solid var(--line);margin-bottom:.6rem}
details p{margin:.5rem 0 1rem}
.addons{margin-top:1.5rem}
.table-wrap{overflow-x:auto;margin-bottom:1rem}
table{border-collapse:collapse;width:100%;font-size:.95rem}
th,td{text-align:left;padding:.55rem .5rem;border-bottom:1px solid var(--line);vertical-align:top}
td:last-child{white-space:normal;font-weight:600}

/* Contact */
.contact{display:grid;gap:2rem}
.contact-direct{list-style:none;padding:0}
.contact-direct li{margin:.1rem 0}
.contact-direct a{display:inline-block;padding-block:.6rem;min-height:44px} /* 44px tap target, no extra row spacing */
.form{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:1.5rem}
.field{margin-bottom:1rem}
.field label{display:block;font-weight:600;margin-bottom:.3rem}
.opt{font-weight:400;color:var(--muted)}
input[type=text],input[type=email],input[type=tel],select,textarea{width:100%;font:inherit;padding:.7rem .8rem;border:1px solid #8a8174;border-radius:8px;background:#fff;color:var(--ink);min-height:48px}
textarea{resize:vertical}
.field-check{display:flex;gap:.6rem;align-items:flex-start}
.field-check input{width:1.3rem;height:1.3rem;margin-top:.2rem;flex:none}
.field-check label{font-weight:400}
.hp{position:absolute!important;left:-9999px}
.form-status{min-height:1.5em;font-weight:600;color:var(--ochre-dark)}

/* Footer */
.site-footer{background:var(--ink);color:var(--dd-papier);padding:2rem 0;font-size:.95rem}
.site-footer a{color:var(--dd-papier);text-decoration-color:var(--dd-koper-lig);text-underline-offset:.2em}
.site-footer a:hover{text-decoration-thickness:2px}
.footer-logo{margin:0 0 1rem}
.footer-logo img{display:block;width:159px;height:32px}
.footer-inner p{margin:.15rem 0}
.site-footer p a{display:inline-block;padding-block:.65rem;min-height:44px;line-height:1.5} /* 44px tap targets; footer rows stay tight */

/* Simple pages */
.page{padding:3rem 0}
.page h2{font-size:1.4rem;margin-top:2rem}

@media (min-width:44rem){
  .steps{grid-template-columns:repeat(3,1fr)}
  .contact{grid-template-columns:1fr 1.3fr;align-items:start}
  .hero{padding-top:4.5rem}
}
@media (min-width:60rem){
  .packages{grid-template-columns:repeat(3,1fr);align-items:stretch}
}

/* Portfolio demo cards */
.demos{list-style:none;padding:0;margin:1.5rem 0 0;display:grid;gap:1.25rem}
.demo-link{position:relative;display:flex;flex-direction:column;height:100%;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;text-decoration:none;color:var(--ink)}
.demo-link:hover{border-color:var(--green)}
.demo-link:hover .demo-cta{text-decoration:underline}
.demo picture,.demo img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;background:var(--bg-alt)}
.demo-badge{position:absolute;top:.75rem;left:.75rem;background:var(--ink);color:#fff;font-size:.8rem;font-weight:600;padding:.25rem .6rem;border-radius:999px}
.demo-body{display:flex;flex-direction:column;gap:.3rem;padding:1.1rem 1.25rem 1.25rem;flex:1}
.demo-title{font-family:var(--serif);font-size:1.3rem;font-weight:700}
.demo-kind{color:var(--green);font-weight:600;font-size:.9rem}
.demo-blurb{color:var(--muted);font-size:.97rem;flex:1}
.demo-cta{color:var(--ochre);font-weight:600;margin-top:.4rem}
@media (min-width:44rem){.demos{grid-template-columns:repeat(2,1fr)}}
@media (min-width:60rem){.demos{grid-template-columns:repeat(3,1fr)}}
.site-footer :focus-visible{outline-color:var(--dd-papier)}

/* In-page links (#kontak etc.) land BELOW the sticky header (QA D3/12 Oct). Measured header height: 119px at 360-390px+,
   167px at 320px (nav wraps onto two lines), so --header-h is 8rem (128px), or 10.75rem (172px) below 360px, plus a 0.75rem gap. */
html{--header-h:8rem;scroll-padding-top:calc(var(--header-h) + .75rem)}
@media (max-width:359px){html{--header-h:10.75rem}}
