/* ==========================================================================
   Magic Signs — site styles
   Built by BW-Websites. Base: Silver template "Spread".

   No external requests: every visual is CSS or inline SVG and every
   typeface is a system stack. Nothing here phones a third party.
   ========================================================================== */

:root{
  --paper:#ffffff;
  --paper-2:#f4f5f7;
  --steel:#e3e6ea;
  --ink:#14171a;
  --ink-2:#242a30;
  --body:#5a646e;
  --line:#d5dae0;
  --red:#d42b2b;          /* from the Magic Signs logo outline */
  --red-d:#a81f1f;
  --teal:#12a3ae;         /* from their existing hero */
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
  --disp:"Helvetica Neue",Arial,sans-serif;
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;background:var(--paper);color:var(--body);font-family:var(--sans);
  font-size:16.5px;line-height:1.72;-webkit-font-smoothing:antialiased;overflow-x:hidden;
}
a{color:inherit}
h1,h2,h3{margin:0;font-family:var(--disp);font-weight:800;color:var(--ink);line-height:1.02;letter-spacing:-.035em;text-transform:uppercase}
.wrap{max-width:1240px;margin:0 auto;padding:0 30px}
.kick{font-size:11px;letter-spacing:.26em;text-transform:uppercase;font-weight:800;color:var(--red)}
.rv{opacity:0;transform:translateY(28px);transition:opacity .8s cubic-bezier(.22,1,.36,1),transform .8s cubic-bezier(.22,1,.36,1)}
.rv.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}}

/* ---------- top strip ---------- */
.strip{background:var(--ink);color:#aeb6bf;font-size:13.5px}
.strip .wrap{display:flex;justify-content:space-between;gap:18px;padding-top:9px;padding-bottom:9px;flex-wrap:wrap}
.strip a{text-decoration:none;font-weight:600;color:#fff}
.strip a:hover{color:var(--red)}
.strip .hi{color:var(--teal);font-weight:600}

/* ---------- header ---------- */
header{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.96);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.bar{display:flex;align-items:center;justify-content:space-between;gap:22px;padding:16px 0}
.logo{text-decoration:none;display:flex;align-items:center;gap:12px;min-width:0;flex:0 1 auto}
/* logo is ~7.2:1, so size by width and let it shrink when the nav gets tight */
.logo img{display:block;width:300px;max-width:100%;height:auto}
nav ul{display:flex;gap:30px;list-style:none;margin:0;padding:0}
nav a{
  text-decoration:none;font-size:12px;letter-spacing:.16em;text-transform:uppercase;
  font-weight:800;color:var(--body);padding:5px 0;border-bottom:2px solid transparent;
}
nav a:hover,nav a[aria-current="page"]{color:var(--ink);border-bottom-color:var(--red)}
.quotebtn{
  background:var(--red);color:#fff;text-decoration:none;padding:13px 26px;
  font-size:12px;letter-spacing:.14em;text-transform:uppercase;font-weight:800;white-space:nowrap;
}
.quotebtn:hover{background:var(--red-d)}
.burger{display:none;background:none;border:0;color:var(--ink);padding:6px;cursor:pointer}
#mnav{display:none;border-top:1px solid var(--line);background:var(--paper-2)}
#mnav ul{list-style:none;margin:0;padding:10px 30px 22px}
#mnav a{
  display:block;padding:15px 0;border-bottom:1px solid var(--line);text-decoration:none;
  font-family:var(--disp);font-weight:800;font-size:20px;text-transform:uppercase;
  letter-spacing:-.02em;color:var(--ink);
}

/* ---------- hero (template's asymmetric editorial split) ---------- */
/* The background photo has a smudged patch in the middle where old text was
   removed. The frosted panel (.herogrid) sits over that patch so it never
   shows; keep the panel covering the centre if this layout changes. */
.hero{
  padding:56px 0;
  background:#0b1d22 url("../images/background.webp") center/cover no-repeat;
}
.herogrid{
  display:grid;grid-template-columns:5fr 7fr;gap:56px;align-items:end;
  padding:44px;background:rgba(8,20,24,.8);border:1px solid rgba(255,255,255,.12);
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
  box-shadow:0 30px 70px rgba(0,0,0,.35);
}
.hero h1{color:#fff}
.hero p{color:#c3d0d6}
.hero .kick{color:var(--teal)}
.hero .btn-o{border-color:#fff;color:#fff}
.hero .btn-o:hover{background:#fff;color:var(--ink)}
h1{font-size:clamp(36px,5.2vw,64px);margin-bottom:22px}
h1 em{font-style:normal;color:var(--red)}
.hero p{font-size:18.5px;max-width:42ch;margin:0 0 28px}
.herobtns{display:flex;gap:12px;flex-wrap:wrap}
.btn{
  display:inline-block;text-decoration:none;font-size:12px;letter-spacing:.14em;
  text-transform:uppercase;font-weight:800;padding:16px 30px;
}
.btn-r{background:var(--red);color:#fff}
.btn-r:hover{background:var(--red-d)}
.btn-o{border:2px solid var(--ink);color:var(--ink)}
.btn-o:hover{background:var(--ink);color:#fff}

.heroart{
  aspect-ratio:4/3;position:relative;overflow:hidden;background:var(--ink);
}
.heroart .slide{
  position:absolute;inset:0;margin:0;opacity:0;transition:opacity .9s ease;
}
.heroart .slide.on{opacity:1}
.heroart .slide img{width:100%;height:100%;object-fit:cover;display:block}
/* Prev/next arrows: hidden until the photo is hovered (or tapped on touch
   screens, which apply :hover on tap), and shown for keyboard focus. */
.heroart .arrow{
  position:absolute;top:50%;z-index:2;width:46px;height:46px;margin-top:-23px;padding:0 0 4px;
  border:0;background:rgba(0,0,0,.55);color:#fff;font-size:34px;line-height:1;cursor:pointer;
  opacity:0;transition:opacity .25s ease,background .2s ease;
}
.heroart .prev{left:12px}
.heroart .next{right:12px}
.heroart:hover .arrow,.heroart .arrow:focus-visible{opacity:1}
.heroart .arrow:hover{background:var(--red)}
.cap{
  position:absolute;left:0;bottom:0;background:var(--paper);padding:12px 18px;
  font-size:11px;letter-spacing:.16em;text-transform:uppercase;font-weight:800;color:var(--body);
}

/* trust bar */
.trust{background:var(--ink);color:#fff}
.trustgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:rgba(255,255,255,.14)}
.tr{background:var(--ink);padding:26px 22px}
.tr .v{font-family:var(--disp);font-weight:800;font-size:27px;letter-spacing:-.03em;color:#fff;line-height:1.1}
.tr .v span{color:var(--teal)}
.tr .l{font-size:13.5px;color:#98a2ab;margin-top:5px}

section{padding:94px 0}
.sechead{display:grid;grid-template-columns:5fr 7fr;gap:56px;margin-bottom:48px;align-items:start}
.sechead h1,.sechead h2{font-size:clamp(28px,4.4vw,48px);margin-bottom:0}
.sechead .rt p{margin:0 0 16px;font-size:17.5px}
.sechead .rt p:last-child{margin:0}

/* ---------- services: template's numbered editorial rows ---------- */
.svc{display:grid;grid-template-columns:5fr 7fr;gap:56px;padding:34px 0;border-top:1px solid var(--line)}
.svc:last-of-type{border-bottom:1px solid var(--line)}
.svc .no{font-family:var(--disp);font-weight:800;font-size:14px;color:var(--red);letter-spacing:.16em}
.svc h3{font-size:27px;margin:8px 0 0}
.svc .bd p{margin:0 0 16px}
.svc ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:2px 22px}
.svc li{padding:7px 0 7px 20px;position:relative;font-size:15.5px;color:var(--ink)}
.svc li::before{content:"";position:absolute;left:0;top:16px;width:10px;height:2px;background:var(--red)}

/* ---------- portfolio: template's filter + lightbox ---------- */
.work{background:var(--paper-2)}
.filt{display:flex;gap:22px;flex-wrap:wrap;margin-bottom:32px;border-bottom:1px solid var(--line);padding-bottom:16px}
.filt button{
  background:none;border:0;cursor:pointer;font:inherit;font-size:11.5px;letter-spacing:.16em;
  text-transform:uppercase;font-weight:800;color:var(--body);padding:4px 0;
  border-bottom:2px solid transparent;
}
.filt button:hover{color:var(--ink)}
.filt button[aria-pressed="true"]{color:var(--ink);border-bottom-color:var(--red)}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.proj{
  background:none;border:0;padding:0;cursor:pointer;font:inherit;
  text-align:left;color:inherit;display:block;
}
/* must be block — aspect-ratio is ignored on an inline element */
.proj .img{display:block;aspect-ratio:4/3;overflow:hidden;position:relative;background:var(--ink)}
.proj .img>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .6s cubic-bezier(.22,1,.36,1)}
.proj:hover .img>img{transform:scale(1.04)}
.proj .img::after{
  content:"View full size";position:absolute;inset:auto 0 0 0;padding:14px 16px;
  background:linear-gradient(0deg,rgba(20,23,26,.82),transparent);
  color:#fff;font-size:11px;letter-spacing:.16em;text-transform:uppercase;font-weight:800;
  opacity:0;transition:opacity .3s ease;
}
.proj:hover .img::after,.proj:focus-visible .img::after{opacity:1}
.proj:focus-visible{outline:3px solid var(--red);outline-offset:3px}
.proj h3{font-size:19px;margin:15px 0 4px;text-transform:none;letter-spacing:-.02em}
.proj .meta{font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--red);font-weight:800}

dialog.lb{
  border:0;padding:0;max-width:min(980px,94vw);width:100%;background:var(--paper);color:var(--body);
}
dialog.lb::backdrop{background:rgba(20,23,26,.88)}
.lb-img{aspect-ratio:4/3;max-height:70vh;width:100%;position:relative;background:var(--ink)}
.lb-img img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.lb-body{padding:28px 32px 32px;display:grid;grid-template-columns:1fr auto;gap:24px;align-items:start}
.lb-body h3{font-size:27px;margin-bottom:7px;text-transform:none;letter-spacing:-.025em}
.lb-body .meta{font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--red);font-weight:800}
.lb-nav{display:flex;gap:9px}
.lb-nav button,.lb-close{
  background:none;border:2px solid var(--line);width:46px;height:46px;cursor:pointer;
  color:var(--ink);font-size:17px;line-height:1;display:grid;place-items:center;
}
.lb-nav button:hover,.lb-close:hover{border-color:var(--red);color:var(--red)}
.lb-close{position:absolute;top:14px;right:14px;background:var(--paper);z-index:3}
dialog.lb{position:fixed}

/* ---------- process ---------- */
.proc{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;border-top:1px solid var(--line);padding-top:36px}
.step .n{font-family:var(--disp);font-weight:800;font-size:40px;color:var(--steel);line-height:1;letter-spacing:-.05em;font-style:italic}
.step h3{font-size:19px;margin:12px 0 7px}
.step p{margin:0;font-size:15.5px}

/* ---------- offer band ---------- */
.offer{background:var(--red);color:#fff;padding:52px 0}
.offerin{display:flex;justify-content:space-between;align-items:center;gap:28px;flex-wrap:wrap}
.offer h2{color:#fff;font-size:clamp(24px,3.4vw,38px);margin-bottom:8px}
.offer p{margin:0;color:rgba(255,255,255,.92);max-width:48ch;font-size:17px}
.offer .btn-o{border-color:#fff;color:#fff}
.offer .btn-o:hover{background:#fff;color:var(--red)}

/* ---------- contact ---------- */
.cgrid{display:grid;grid-template-columns:5fr 7fr;gap:56px}
.cd{list-style:none;margin:0;padding:0}
.cd li{padding:17px 0;border-bottom:1px solid var(--line)}
.cd .k{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--red);font-weight:800;margin-bottom:4px}
.cd .v{font-family:var(--disp);font-weight:800;font-size:19px;color:var(--ink);letter-spacing:-.02em}
.cd .v a{text-decoration:none}
.cd .v a:hover{color:var(--red)}
label{display:block;font-size:11px;letter-spacing:.16em;text-transform:uppercase;font-weight:800;color:var(--ink);margin-bottom:8px}
input,textarea,select{
  width:100%;padding:14px 15px;border:2px solid var(--line);background:#fff;
  font:inherit;font-size:16px;color:var(--ink);
}
input:focus,textarea:focus,select:focus{outline:0;border-color:var(--ink)}
.field{margin-bottom:18px}
.frow{display:grid;grid-template-columns:1fr 1fr;gap:18px}
textarea{min-height:120px;resize:vertical}
.submit{
  background:var(--red);color:#fff;border:0;cursor:pointer;font:inherit;
  font-size:12px;letter-spacing:.14em;text-transform:uppercase;font-weight:800;padding:18px 34px;width:100%;
}
.submit:hover{background:var(--red-d)}
.formnote{font-size:14px;margin:14px 0 0}

footer{background:var(--ink);color:#98a2ab;padding:56px 0 34px;font-size:15px}
.fg{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:36px;padding-bottom:32px;border-bottom:1px solid rgba(255,255,255,.14)}
footer h4{font-family:var(--disp);font-weight:800;font-size:15px;letter-spacing:.14em;text-transform:uppercase;color:#fff;margin:0 0 13px}
footer a{text-decoration:none;display:block;padding:3px 0}
footer a:hover{color:var(--red)}
.fb{padding-top:24px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13.5px}

@media (max-width:980px){
  .herogrid,.sechead,.svc,.cgrid{grid-template-columns:1fr;gap:32px}
  .grid{grid-template-columns:repeat(2,1fr)}
  .proc{grid-template-columns:repeat(2,1fr);gap:30px}
  .trustgrid{grid-template-columns:repeat(2,1fr)}
  .fg{grid-template-columns:1fr 1fr}
}
@media (max-width:720px){
  .wrap{padding:0 20px}
  nav,.bar .quotebtn{display:none}
  .burger{display:block}
  section{padding:56px 0}
  .hero{padding:28px 0;background-position:left center}
  .herogrid{padding:26px 20px}
  .grid,.proc,.trustgrid,.fg{grid-template-columns:1fr}
  .svc ul{grid-template-columns:1fr}
  .frow{grid-template-columns:1fr;gap:0}
  .lb-body{grid-template-columns:1fr;padding:24px 20px 26px}
  .herobtns .btn{flex:1 1 100%;text-align:center}
  #mnav ul{padding:10px 20px 22px}
}

/* ==========================================================================
   Flask additions — flash messages, honeypot, disabled submit
   ========================================================================== */

/* Honeypot: must be invisible to people but not display:none, which some
   bots detect and skip. Pulled off-screen instead. */
.hp{
  position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden;
}

.flash{
  padding:16px 18px;margin-bottom:22px;font-size:16px;border-left:4px solid;
  outline:none;
}
.flash-success{background:#eef7f0;border-left-color:#2f7d4f;color:#1d4a30}
.flash-error{background:#fdf0f0;border-left-color:var(--red);color:#8a1c1c}
.flash:focus-visible{outline:2px solid var(--ink);outline-offset:2px}

.submit[disabled]{opacity:.6;cursor:progress}

/* Respect reduced motion across the whole site, not just the reveal class. */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
}
