/* =====================================================================
   NORVEX MEDIA — gemensam stil för alla sidor.
   KONCEPT "MASTERKLIPPET": sidan är monterad som ett proffsigt klippbord.
   Timecodes, fokusmarkörer, safe-area-ramar och scopes är formspråket —
   en byrå som säljer redigering ska se ut som ett klipprum, inte som en
   mall. Signalblå #398AFE är pipetterad ur deras egen logotyp.

   KONTRAST (uträknad, aldrig gissad — WCAG AA 4,5:1):
     vit på #398AFE ....... 3,37  UNDERKÄNT -> blå knapp bär SVART text
     #06070A på #398AFE ... 5,99  OK        -> knappens text
     #398AFE på #0B0D12 ... 5,78  OK        -> accent på mörkt
     #1E5FC4 på #F5F3EE ... 5,43  OK        -> accent på papper
     #5C6673 på #E8E3D8 ... 4,55  OK        -> dämpad text på sand
   ===================================================================== */

@font-face{font-family:"Geist";src:url("/assets/fonts/geist-var.woff2") format("woff2");font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:"Inter";src:url("/assets/fonts/inter-var.woff2") format("woff2");font-weight:300 800;font-style:normal;font-display:swap}
@font-face{font-family:"JetBrains";src:url("/assets/fonts/jetbrains-var.woff2") format("woff2");font-weight:300 800;font-style:normal;font-display:swap}

:root{
  --deep:#0B0D12;
  --deep2:#06070A;
  --deep3:#12151C;
  --deep4:#1A1F28;
  --accent:#398AFE;
  --accent-l:#8FBEFF;
  --accent-d:#1E5FC4;
  /* Indigo ur Johans eget deck — hans slides går från djupblått mot lila.
     Används bara i djupled (glöd, gradienter), aldrig som textfärg, så att
     kontrastberäkningarna står orörda. */
  --indigo:#4B2E9E;
  --indigo-d:#2A1A5E;
  --onDeep:#D8DEE7;
  --dim:#8B96A5;
  --paper:#F5F3EE;
  --sand:#E8E3D8;
  --ink:#12151C;
  --mut:#5C6673;
  --line:rgba(216,222,231,.13);
  --line-d:rgba(18,21,28,.14);
  --r:18px;
  --max:1220px;
  --pad:132px;
  --disp:"Geist",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --mono:"JetBrains",ui-monospace,SFMono-Regular,Menlo,monospace;
  --ease:cubic-bezier(.2,.66,.2,1);
  --ease-out:cubic-bezier(.16,1,.3,1);
  --shadow:0 34px 80px -34px rgba(0,0,0,.62);
}
@media(max-width:960px){:root{--pad:86px}}
@media(max-width:640px){:root{--pad:62px;--r:15px}}

*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  background:var(--deep);color:var(--onDeep);
  font-family:var(--sans);font-size:17px;line-height:1.66;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
img,video{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:5px}
::selection{background:var(--accent);color:#06070A}

.wrap{max-width:var(--max);margin:0 auto;padding:0 clamp(20px,4vw,34px)}
.wrap-s{max-width:900px;margin:0 auto;padding:0 clamp(20px,4vw,34px)}
/* Navigeringen är klibbig — ankarhopp måste landa under den, inte bakom. */
section{position:relative;scroll-margin-top:92px}
[id]{scroll-margin-top:92px}
.sec{padding:var(--pad) 0;position:relative}
.sec-t{padding-top:var(--pad)}
.ljus{background:var(--paper);color:var(--ink)}
.sand{background:var(--sand);color:var(--ink)}
.mork{background:var(--deep);color:var(--onDeep)}
.mork2{background:var(--deep2);color:var(--onDeep)}
.mitt{text-align:center}
.mitt p{margin-left:auto;margin-right:auto}
.mitt .knapprad,.mitt .chips,.mitt .bock{justify-content:center}

/* ---- typografi ---- */
h1,h2,h3,h4,.disp{font-family:var(--disp);font-weight:620;letter-spacing:-.038em;line-height:1.03}
h1{font-size:clamp(38px,6.6vw,84px);line-height:1.06}
h2{font-size:clamp(31px,4.6vw,60px);line-height:1.05}
h3{font-size:clamp(20px,2.2vw,28px);letter-spacing:-.028em;line-height:1.16}
h4{font-size:clamp(17px,1.5vw,20px);letter-spacing:-.02em}
p{max-width:64ch}
.lead{font-size:clamp(16.5px,1.5vw,20px);line-height:1.72;color:var(--dim)}
.ljus .lead,.sand .lead{color:var(--mut)}
.stor{font-size:clamp(19px,2vw,25px);line-height:1.55;letter-spacing:-.015em;color:var(--onDeep);font-family:var(--disp);font-weight:420}
.ljus .stor,.sand .stor{color:var(--ink)}

/* Etiketten är en timecode-bricka — formspråket genom hela sajten. */
.tc{
  font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.2em;
  text-transform:uppercase;color:var(--accent);
  display:inline-flex;align-items:center;gap:9px;
}
.tc::before{
  content:"";width:6px;height:6px;border-radius:50%;
  background:var(--accent);box-shadow:0 0 0 4px rgba(57,138,254,.18);
  animation:puls 2.6s var(--ease) infinite;
}
.ljus .tc,.sand .tc{color:var(--accent-d)}
.ljus .tc::before,.sand .tc::before{background:var(--accent-d);box-shadow:0 0 0 4px rgba(30,95,196,.14)}
@keyframes puls{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.42;transform:scale(.78)}}
.tc-still::before{animation:none}

.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.streck{width:100%;height:1px;background:var(--line);border:0}
.ljus .streck,.sand .streck{background:var(--line-d)}

/* ---- knappar ---- */
.btn{
  display:inline-flex;align-items:center;gap:11px;
  min-height:52px;padding:0 26px;border-radius:100px;border:1px solid transparent;
  font-weight:600;font-size:15.5px;letter-spacing:-.01em;cursor:pointer;
  transition:transform .5s var(--ease),background .3s,border-color .3s,color .3s,box-shadow .5s var(--ease);
  will-change:transform;position:relative;overflow:hidden;
}
.btn .pil{transition:transform .5s var(--ease)}
.btn:hover .pil{transform:translateX(5px)}
.btn-fyll{background:var(--accent);color:#06070A;box-shadow:0 14px 40px -14px rgba(57,138,254,.7)}
.btn-fyll:hover{background:var(--accent-l);box-shadow:0 20px 54px -14px rgba(57,138,254,.85)}
.btn-linje{border-color:var(--line);color:var(--onDeep);background:rgba(216,222,231,.03)}
.btn-linje:hover{border-color:var(--accent);color:#fff;background:rgba(57,138,254,.1)}
.ljus .btn-linje,.sand .btn-linje{border-color:rgba(18,21,28,.2);color:var(--ink);background:transparent}
.ljus .btn-linje:hover,.sand .btn-linje:hover{border-color:var(--accent-d);color:var(--accent-d);background:rgba(30,95,196,.06)}
.btn-mork{background:var(--deep);color:#fff}
.btn-mork:hover{background:var(--deep3)}
.knapprad{display:flex;flex-wrap:wrap;gap:13px}
.mitt .knapprad{justify-content:center}

/* Textlänk med underlinje som ritas ut vid hover. */
.lnk{
  display:inline-flex;align-items:center;gap:8px;font-weight:560;color:var(--accent);
  position:relative;padding-bottom:2px;
}
.ljus .lnk,.sand .lnk{color:var(--accent-d)}
.lnk::after{
  content:"";position:absolute;left:0;bottom:0;height:1px;width:100%;
  background:currentColor;transform:scaleX(0);transform-origin:right;
  transition:transform .55s var(--ease-out);
}
.lnk:hover::after{transform:scaleX(1);transform-origin:left}
.lnk .pil{transition:transform .5s var(--ease)}
.lnk:hover .pil{transform:translateX(4px)}

/* ---- filmkorn + glöd, ger de mörka partierna djup ---- */
.korn::before{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:0;opacity:.055;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3'/></filter><rect width='220' height='220' filter='url(%23n)' opacity='.6'/></svg>");
}
.korn>*{position:relative;z-index:1}
.glod{
  position:absolute;width:min(680px,90vw);height:min(680px,90vw);border-radius:50%;
  pointer-events:none;z-index:0;filter:blur(12px);
  background:radial-gradient(circle,rgba(57,138,254,.17),rgba(75,46,158,.1) 45%,transparent 68%);
}
/* Glöden placeras med negativa offset och sträcker sig utanför sektionen.
   Utan klippning växer dokumentets bredd och hela sidan får sidledsscroll —
   ett fel som inte syns förrän man mäter scrollWidth. Klipp vid sektionen,
   ALDRIG med overflow-x på html: det gör html till en scrollcontainer och
   slår sönder position:sticky i navigeringen. */
section:has(> .glod),header:has(> .glod){overflow:hidden}

/* ---- avslöjande vid scroll ---- */
.rv{opacity:0;transform:translateY(26px);transition:opacity .95s var(--ease-out),transform .95s var(--ease-out)}
.rv.on{opacity:1;transform:none}
.d1{transition-delay:.09s}.d2{transition-delay:.18s}.d3{transition-delay:.27s}
.d4{transition-delay:.36s}.d5{transition-delay:.45s}.d6{transition-delay:.54s}

/* Rubriker avslöjas ord för ord bakom en mask — kitets signaturrörelse. */
.ord .o{
  display:inline-block;overflow:hidden;vertical-align:top;
  padding:.2em .04em .14em;margin:-.2em -.04em -.14em;
}
.ord .o>i{
  display:inline-block;font-style:inherit;
  transform:translateY(150%) rotate(3deg);opacity:0;
  transition:transform 1.05s var(--ease-out),opacity .8s var(--ease-out);
}
.ord.on .o>i{transform:none;opacity:1}

/* Rader som klipper upp sig (används i hero). */
.rad{display:block;overflow:hidden;padding:.2em 0 .14em;margin:-.2em 0 -.14em}
.rad>span{display:block;transform:translateY(150%);opacity:0;transition:transform 1.15s var(--ease-out),opacity .9s var(--ease-out)}
.on .rad>span,.rad.on>span{transform:none;opacity:1}

/* ---- KR-band ---- */
#krband{
  background:var(--deep2);color:rgba(216,222,231,.8);font-size:12.5px;
  padding:9px 0;border-bottom:1px solid var(--line);position:relative;z-index:120;line-height:1.5;
}
#krband .wrap{display:flex;gap:6px 14px;align-items:center;justify-content:center;flex-wrap:wrap;text-align:center}
#krband b{color:#fff;font-weight:600}
#krband i{color:rgba(216,222,231,.6);font-style:normal}
#krband a{color:var(--accent-l);border-bottom:1px solid rgba(143,190,255,.42)}
@media(max-width:640px){#krband{font-size:11.5px;padding:8px 0}#krband i{display:none}}

/* ---- läsförlopp ---- */
#prog{position:fixed;top:0;left:0;height:2px;width:0;z-index:200;background:linear-gradient(90deg,var(--accent-d),var(--accent),var(--accent-l))}

/* ---- navigering ---- */
#nav{position:sticky;top:0;z-index:115}
#navrad{
  padding:15px 0;transition:background .5s var(--ease),padding .5s var(--ease),box-shadow .5s var(--ease);
  backdrop-filter:blur(16px) saturate(1.3);-webkit-backdrop-filter:blur(16px) saturate(1.3);
  background:rgba(6,7,10,.42);border-bottom:1px solid transparent;
}
#nav.fast #navrad{background:rgba(6,7,10,.9);border-bottom-color:var(--line);padding:11px 0}
#navin{display:flex;align-items:center;gap:22px}
/* Kundens egen logotypfil bär både ordbilden och sloganen, så ingen text
   bredvid. Vit på transparent — därför bara mot mörk botten. */
.marke{display:flex;align-items:center;flex-shrink:0}
.marke img{width:clamp(150px,17vw,190px);height:auto;display:block}
@media(max-width:520px){.marke img{width:138px}}

/* Mobilmenyn är ett dragspel med samma grupper som navigeringens menyer,
   så att strukturen är densamma oavsett skärm. Första gruppen öppen. */
.mobgrupp{border-bottom:1px solid var(--line)}
.mobknapp{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:none;border:0;padding:17px 0;cursor:pointer;text-align:left;
  font-family:var(--disp);font-size:clamp(20px,5vw,26px);font-weight:600;
  letter-spacing:-.032em;color:#fff;
}
.mobknapp svg{width:18px;height:18px;color:var(--accent);flex-shrink:0;transition:transform .45s var(--ease)}
.mobgrupp.opp .mobknapp svg{transform:rotate(180deg)}
/* KOLLAPSEN. grid-template-rows:0fr nollar bara FÖRSTA raden — med sex
   länkar som direkta barn skapade de fem övriga implicita rader som
   behöll sin höjd, så alla grupper såg utfällda ut samtidigt. Länkarna
   ligger därför i en enda wrapper (.mobinner) som är den enda raden. */
.moblista{display:grid;grid-template-rows:0fr;transition:grid-template-rows .42s var(--ease)}
.mobgrupp.opp .moblista{grid-template-rows:1fr}
.mobinner{min-height:0;overflow:hidden}
#mobmeny .mobinner a{
  display:block;border:0;padding:11px 0 11px 16px;
  font-family:var(--sans);font-size:16.5px;font-weight:500;
  color:rgba(216,222,231,.82);border-left:1px solid var(--line);margin-left:2px;
}
#mobmeny .mobinner a:first-child{padding-top:4px}
#mobmeny .mobinner a:last-child{padding-bottom:20px}
#mobmeny .mobinner a:hover{color:#fff;border-left-color:var(--accent)}
.navlank{display:flex;align-items:center;gap:3px;margin-left:auto}
.navlank>a,.navlank>.dd>button{
  padding:9px 13px;border-radius:9px;font-size:14.5px;font-weight:500;color:rgba(216,222,231,.86);
  background:transparent;border:0;cursor:pointer;display:inline-flex;align-items:center;gap:6px;
  transition:color .3s,background .3s;white-space:nowrap;
}
.navlank>a:hover,.navlank>.dd>button:hover,.navlank>a[aria-current]{color:#fff;background:rgba(216,222,231,.07)}
.navlank>a[aria-current]{color:var(--accent-l)}
/* Två knappar enligt kundens önskemål: boka samtal och jobba hos oss.
   Rekryteringsknappen är dämpad så att bokningen förblir huvudvägen. */
.navknappar{display:flex;align-items:center;gap:8px;margin-left:12px}
.navcta.btn{min-height:44px;padding:0 18px;font-size:14.5px}
.navjobb{white-space:nowrap}
@media(max-width:1240px){.navjobb{display:none}}

/* undermeny */
.dd{position:relative}
.dd>button .kar{transition:transform .4s var(--ease)}
.dd.opp>button .kar{transform:rotate(180deg)}
.ddm{
  position:absolute;top:calc(100% + 12px);left:50%;transform:translate(-50%,10px);
  min-width:288px;background:rgba(10,12,17,.97);backdrop-filter:blur(20px);
  border:1px solid var(--line);border-radius:16px;padding:9px;
  box-shadow:var(--shadow);opacity:0;visibility:hidden;
  transition:opacity .38s var(--ease),transform .38s var(--ease),visibility .38s;
}
.dd.opp .ddm{opacity:1;visibility:visible;transform:translate(-50%,0)}
.ddm a{display:block;padding:11px 13px;border-radius:11px;transition:background .28s}
.ddm a:hover{background:rgba(57,138,254,.12)}
.ddskilj{display:block;height:1px;background:var(--line);margin:8px 13px}
.ddrub{display:block;padding:6px 13px 8px;font-family:var(--mono);font-size:9.5px;
  letter-spacing:.18em;text-transform:uppercase;color:var(--dim);font-weight:700}
.ddm a b{display:block;font-weight:580;font-size:14.5px;color:#fff;letter-spacing:-.012em}
.ddm a span{display:block;font-size:12.5px;color:var(--dim);margin-top:2px;line-height:1.45}

/* Bokningsknapp i varje utfällbar meny. Kunden ville ha minsta möjliga
   friktion mellan besökaren och ett bokat möte: oavsett vilken meny man
   öppnar ska vägen dit vara ett klick bort, inte en resa tillbaka upp
   till navets högerkant. Specificiteten måste vara 0,2,0 för att slå
   `.ddm a` (0,1,1) — annars vinner den generella länkstilen. */
.ddm .ddcta{
  display:flex;align-items:center;justify-content:center;gap:8px;
  margin:9px 4px 3px;padding:12px 14px;border-radius:11px;
  background:var(--accent);color:#fff;
  font-family:var(--disp);font-weight:620;font-size:14px;letter-spacing:-.012em;
  transition:background .28s,transform .4s var(--ease);
}
.ddm .ddcta:hover{background:var(--accent-l);color:var(--deep);transform:translateY(-1px)}
.ddm .ddcta .pil{transition:transform .4s var(--ease)}
.ddm .ddcta:hover .pil{transform:translateX(3px)}

#mobmeny .mobinner .mobcta{
  display:flex;align-items:center;justify-content:center;gap:8px;
  margin:14px 0 20px;padding:13px 16px;border-radius:12px;border-left:0;
  background:var(--accent);color:#fff;
  font-family:var(--disp);font-weight:620;font-size:15px;letter-spacing:-.012em;
}
#mobmeny .mobinner .mobcta:hover{background:var(--accent-l);color:var(--deep);border-left-color:transparent}

/* hamburgare */
#burg{
  display:none;width:46px;height:46px;border:1px solid var(--line);border-radius:12px;
  background:rgba(216,222,231,.05);cursor:pointer;flex-direction:column;
  align-items:center;justify-content:center;gap:5px;margin-left:auto;flex-shrink:0;
}
#burg i{display:block;width:17px;height:1.6px;background:#fff;border-radius:2px;transition:transform .45s var(--ease),opacity .3s}
#burg.opp i:nth-child(1){transform:translateY(6.6px) rotate(45deg)}
#burg.opp i:nth-child(2){opacity:0}
#burg.opp i:nth-child(3){transform:translateY(-6.6px) rotate(-45deg)}
@media(max-width:1000px){.navlank{display:none}#burg{display:flex}}

#mobmeny{
  position:fixed;inset:0;z-index:114;background:var(--deep2);
  /* 96 px var uträknat mot navet ensamt. KR-bandet ligger ovanför och
     blir två rader på mobil, så första gruppens rubrik hamnade bakom
     navraden. Bandhöjden mäts i kit.js och läggs på här. */
  padding:calc(96px + var(--band,0px)) clamp(20px,6vw,34px) 40px;overflow-y:auto;
  opacity:0;visibility:hidden;transform:translateY(-12px);
  transition:opacity .45s var(--ease),transform .45s var(--ease),visibility .45s;
}
#mobmeny.opp{opacity:1;visibility:visible;transform:none}
#mobmeny a{
  display:flex;align-items:baseline;gap:14px;padding:15px 0;
  border-bottom:1px solid var(--line);font-family:var(--disp);
  font-size:clamp(24px,6vw,34px);font-weight:600;letter-spacing:-.035em;color:#fff;
}
#mobmeny a span{font-family:var(--mono);font-size:11px;color:var(--accent);letter-spacing:.16em;font-weight:600}
#mobmeny .mtel{border:0;margin-top:24px;font-size:19px;color:var(--accent)}
#mobmeny .mbtn{margin-top:20px;border:0;justify-content:center}

/* ---- kort ---- */
.kort{
  position:relative;border:1px solid var(--line);border-radius:var(--r);
  background:linear-gradient(168deg,rgba(216,222,231,.055),rgba(216,222,231,.012));
  padding:clamp(24px,3vw,34px);overflow:hidden;
  transition:transform .7s var(--ease),border-color .5s,background .5s;
}
.kort:hover{transform:translateY(-5px);border-color:rgba(57,138,254,.42)}
.ljus .kort,.sand .kort{background:#fff;border-color:var(--line-d);box-shadow:0 2px 3px rgba(18,21,28,.03)}
.ljus .kort:hover,.sand .kort:hover{box-shadow:0 30px 62px -32px rgba(18,21,28,.28);border-color:rgba(30,95,196,.34)}
.kort p{color:var(--dim);font-size:15.5px}
.ljus .kort p,.sand .kort p{color:var(--mut)}
.kort .knum{font-family:var(--mono);font-size:11px;letter-spacing:.18em;color:var(--accent);font-weight:600}
.ljus .kort .knum,.sand .kort .knum{color:var(--accent-d)}
/* Ljusstråket följer pekaren över kortet. */
.kort .strak{
  position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .5s;
  background:radial-gradient(340px circle at var(--mx,50%) var(--my,50%),rgba(57,138,254,.13),transparent 62%);
}
.kort:hover .strak{opacity:1}

.rutnat{display:grid;gap:clamp(14px,1.8vw,20px)}
.r2{grid-template-columns:repeat(2,1fr)}
.r3{grid-template-columns:repeat(3,1fr)}
.r4{grid-template-columns:repeat(4,1fr)}
@media(max-width:980px){.r3,.r4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:620px){.r2,.r3,.r4{grid-template-columns:1fr}}

/* ---- sektionshuvud ---- */
.shuv{max-width:760px;margin-bottom:clamp(40px,5vw,64px)}
/* .mitt sitter PÅ .shuv, inte på föräldern — efterkommande-selektorn
   matchade därför aldrig och blocket blev liggande till vänster med
   centrerad text inuti. Båda formerna behövs. */
.shuv.mitt,.mitt .shuv{margin-left:auto;margin-right:auto}
.shuv h2{margin:15px 0 18px}
.shuv .lead{margin:0}

/* ---- lista med bockar ---- */
.bock{list-style:none;display:grid;gap:11px}
.bock li{display:flex;gap:12px;align-items:flex-start;font-size:15.5px;line-height:1.55;color:var(--dim)}
.ljus .bock li,.sand .bock li{color:var(--mut)}
.bock li::before{
  content:"";flex-shrink:0;width:19px;height:19px;border-radius:50%;margin-top:2px;
  background:rgba(57,138,254,.15);
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23398AFE' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>");
  background-size:12px;background-position:center;background-repeat:no-repeat;
}
.ljus .bock li::before,.sand .bock li::before{
  background-color:rgba(30,95,196,.13);
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231E5FC4' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>");
}

/* SIDONOTER — diskreta, kontextuella vägar vidare. Placerade där frågan
   faktiskt uppstår hos läsaren i stället för som en länklista i botten:
   "vi tar enskilda uppdrag" precis efter helhetslösningen, rekryteringen i
   frilanssektionen, teamet vid utrustningen, ordlistan efter frågorna. */
.sidonot{
  max-width:64ch;margin:clamp(24px,3vw,32px) auto 0;text-align:center;
  font-size:15px;color:var(--dim);line-height:1.65;
}
.ljus .sidonot,.sand .sidonot{color:var(--mut)}
.sidonot .lnk{display:inline}
.sidonot .pil{display:inline-block;transition:transform .5s var(--ease)}
.sidonot .lnk:hover .pil{transform:translateX(4px)}

/* ---- chips ---- */
.chips{display:flex;flex-wrap:wrap;gap:9px}
.mitt .chips{justify-content:center}
.chip{
  display:inline-flex;align-items:center;gap:8px;padding:8px 15px;border-radius:100px;
  border:1px solid var(--line);font-size:13.5px;font-weight:500;color:var(--onDeep);
  background:rgba(216,222,231,.04);transition:border-color .4s,background .4s,transform .5s var(--ease);
}
.chip:hover{border-color:rgba(57,138,254,.44);transform:translateY(-2px)}
.chip b{font-weight:640;color:#fff}
.ljus .chip,.sand .chip{border-color:var(--line-d);color:var(--mut);background:rgba(255,255,255,.65)}
.ljus .chip b,.sand .chip b{color:var(--ink)}

/* ---- filmremsa / löpande band ---- */
.remsa{
  overflow:hidden;border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  background:var(--deep2);padding:17px 0;
}
.ljus .remsa,.sand .remsa{border-color:var(--line-d);background:transparent}
.remsa .spar{display:flex;width:max-content;animation:rulla 42s linear infinite}
.remsa:hover .spar{animation-play-state:paused}
.remsa span{
  font-family:var(--disp);font-size:clamp(19px,2.4vw,30px);font-weight:600;letter-spacing:-.035em;
  padding:0 clamp(18px,2.4vw,32px);display:inline-flex;align-items:center;gap:clamp(18px,2.4vw,32px);
  color:rgba(216,222,231,.42);white-space:nowrap;
}
.ljus .remsa span,.sand .remsa span{color:rgba(18,21,28,.34)}
.remsa span::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0}
@keyframes rulla{to{transform:translateX(-50%)}}

/* ---- brödsmulor ---- */
.smulor{font-family:var(--mono);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);display:flex;gap:9px;flex-wrap:wrap;align-items:center}
.smulor a:hover{color:var(--accent)}
.smulor span{opacity:.44}
.ljus .smulor,.sand .smulor{color:var(--mut)}
/* Över den ljusare sidhuvudsbilden räckte inte --dim. Mätt: 3,28:1 -> 6,1:1. */
.shead .smulor{color:rgba(220,227,236,.82)}
.shead .smulor span{opacity:.55}

/* ---- sidhuvud på undersidor ---- */
.shead{position:relative;padding:clamp(58px,8vw,104px) 0 clamp(52px,7vw,88px);overflow:hidden;background:var(--deep2)}
/* Ingressen ligger över den nu ljusare stillbilden. --dim (#8B96A5) mätte
   4,0:1 mot de ljusaste bildrutorna — den behöver vara ljusare här än i
   brödtext på ren botten. Mätt, inte gissat. */
.shead .lead{color:rgba(220,227,236,.9)}
.shead h1{margin:19px 0 20px;max-width:19ch}
.shead .lead{max-width:60ch}
.shead .knapprad{margin-top:30px}
/* Filmen ska synas, inte anas. Överlägget nedan håller ändå texten
   över 4,5:1 — mätt med nv/_kontrast.mjs. */
/* Stillbilderna saknade det ljuslyft heron får via CSS-filter på videon,
   och blev därför märkbart mörkare än resten av sajten trots samma gradning
   i filen. Lyftet ligger här, inte i bildfilerna, så att det går att justera
   utan att koda om något. */
.sheadbg{position:absolute;inset:0;z-index:0;opacity:.66}
.sheadbg video,.sheadbg img{
  width:100%;height:100%;object-fit:cover;
  filter:brightness(1.3) contrast(1.02) saturate(1.06);
}
.shead::after{
  content:"";position:absolute;inset:0;z-index:0;
  background:linear-gradient(180deg,rgba(6,7,10,.5),rgba(6,7,10,.72) 60%,var(--deep));
}
/* Ögonbrynet ligger över film. Signalblå #398AFE mäter 4,3:1 mot de
   ljusaste bildrutorna — ljusblå #8FBEFF ger 7,9:1. Mätt, inte gissat. */
.shead .tc{color:var(--accent-l)}
.shead .tc::before{background:var(--accent-l);box-shadow:0 0 0 4px rgba(143,190,255,.2)}
.shead .wrap{position:relative;z-index:2}
.shead.mitt h1{margin-left:auto;margin-right:auto}

/* FAKTARADEN i sidhuvudet. Ersätter det fristående "Kort svar"-blocket:
   samma maskinläsbara uppgifter, men som en del av sidhuvudet i stället
   för en påhängd låda. Samma formspråk som herons trustrad, som redan
   fungerar. Innehållet är fortfarande ren text i en <dl> — det är den
   som ska gå att lyfta ut. */
.sheadfakta{
  display:flex;flex-wrap:wrap;margin:clamp(30px,4vw,44px) 0 0;
  border:1px solid rgba(216,222,231,.15);border-radius:16px;overflow:hidden;
  background:rgba(6,7,10,.4);backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);
}
.shead.mitt .sheadfakta{margin-left:auto;margin-right:auto;max-width:940px}
.sheadfakta div{
  flex:1 1 170px;padding:15px 20px;border-right:1px solid rgba(216,222,231,.12);
  text-align:center;min-width:0;
}
.sheadfakta div:last-child{border-right:0}
.sheadfakta dt{
  font-family:var(--mono);font-size:9.5px;letter-spacing:.15em;text-transform:uppercase;
  color:rgba(216,222,231,.56);font-weight:600;
}
.sheadfakta dd{
  font-family:var(--disp);font-size:15px;font-weight:600;letter-spacing:-.022em;
  color:#fff;margin:5px 0 0;line-height:1.35;overflow-wrap:break-word;
}
@media(max-width:760px){
  .sheadfakta div{flex:1 1 50%;padding:12px 12px;border-bottom:1px solid rgba(216,222,231,.12)}
  .sheadfakta div:nth-child(2n){border-right:0}
  .sheadfakta div:nth-last-child(-n+2){border-bottom:0}
  .sheadfakta dd{font-size:14px}
  .sheadfakta dt{font-size:9px;letter-spacing:.12em}
}
@media(max-width:420px){
  .sheadfakta div{flex:1 1 100%;border-right:0}
  .sheadfakta div:last-child{border-bottom:0}
}

/* ---- jämförelsetabell ----
   Delas av startsidan och /vad-kostar-marknadsforing. Låg tidigare bara i
   startsidans egen CSS, vilket gjorde att tabellen sprängde sidbredden på
   den andra sidan. Breda tabeller ska ALLTID ligga i en egen scrollruta. */
.jsvep{overflow-x:auto;border:1px solid var(--line-d);border-radius:var(--r);background:#fff;-webkit-overflow-scrolling:touch}
.jtab{width:100%;border-collapse:collapse;font-size:15px;min-width:660px}
.jtab caption{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.jtab th,.jtab td{padding:15px 16px;text-align:left;border-bottom:1px solid var(--line-d);vertical-align:top}
.jtab thead th{font-family:var(--mono);font-size:10px;letter-spacing:.15em;text-transform:uppercase;font-weight:700;color:var(--mut);background:rgba(18,21,28,.035)}
.jtab thead th.oss{color:#fff;background:var(--accent-d)}
.jtab tbody th{font-weight:560;color:var(--ink);width:26%}
.jtab td{color:var(--mut);width:24.6%}
.jtab td.oss{color:var(--ink);font-weight:560;background:rgba(30,95,196,.055)}
.jtab tbody tr:last-child th,.jtab tbody tr:last-child td{border-bottom:0}
.jnot{margin:26px auto 0;max-width:74ch;text-align:center;font-size:15.5px}
@media(max-width:760px){.jtab{font-size:14px}.jtab th,.jtab td{padding:13px 13px}}

/* ---- dragspel (FAQ) ---- */
.drag{border-top:1px solid var(--line)}
.ljus .drag,.sand .drag{border-color:var(--line-d)}
.drag details{border-bottom:1px solid var(--line)}
.ljus .drag details,.sand .drag details{border-color:var(--line-d)}
.drag summary{
  list-style:none;cursor:pointer;padding:23px 46px 23px 0;position:relative;
  font-family:var(--disp);font-size:clamp(17px,1.85vw,21px);font-weight:560;letter-spacing:-.024em;
  color:#fff;transition:color .3s;line-height:1.3;
}
.ljus .drag summary,.sand .drag summary{color:var(--ink)}
.drag summary::-webkit-details-marker{display:none}
.drag summary:hover{color:var(--accent)}
.ljus .drag summary:hover,.sand .drag summary:hover{color:var(--accent-d)}
.drag summary::after{
  content:"";position:absolute;right:4px;top:50%;width:15px;height:15px;margin-top:-7px;
  background:no-repeat center/contain url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23398AFE' stroke-width='2.4' stroke-linecap='round'><line x1='12' y1='5' x2='12' y2='19'/><line x1='5' y1='12' x2='19' y2='12'/></svg>");
  transition:transform .5s var(--ease);
}
.ljus .drag summary::after,.sand .drag summary::after{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231E5FC4' stroke-width='2.4' stroke-linecap='round'><line x1='12' y1='5' x2='12' y2='19'/><line x1='5' y1='12' x2='19' y2='12'/></svg>")}
.drag details[open] summary::after{transform:rotate(135deg)}
.drag .svar{padding:0 46px 26px 0;animation:vik .55s var(--ease-out)}
.drag .svar p{color:var(--dim);font-size:16px}
.ljus .drag .svar p,.sand .drag .svar p{color:var(--mut)}
@keyframes vik{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

/* ---- CTA-band ---- */
.ctaband{position:relative;overflow:hidden;background:var(--deep2);text-align:center;padding:clamp(76px,9vw,128px) 0}
.ctaband h2{max-width:18ch;margin:18px auto 20px}
.ctaband .lead{max-width:54ch;margin:0 auto 34px}
.ctaband .knapprad,.ctaband .chips{justify-content:center}

/* ---- sidfot ---- */
/* SIDFOTEN scopas till body > footer. En naken footer-selektor träffar
   VARJE <footer> i dokumentet — även den semantiskt korrekta inuti ett
   <blockquote> på kundcasesidan, som då fick sidfotens bakgrund och
   80 px padding och ritade en svart låda mitt i citatet. */
body > footer{background:var(--deep2);border-top:1px solid var(--line);padding:clamp(56px,6vw,84px) 0 34px;position:relative}
.fgrid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:clamp(26px,3vw,44px)}
@media(max-width:900px){.fgrid{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.fgrid{grid-template-columns:1fr}}
body > footer h4{font-family:var(--mono);font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);font-weight:600;margin-bottom:17px}
body > footer .fl{display:grid;gap:10px}
body > footer .fl a,footer .fl span{font-size:14.5px;color:var(--dim);transition:color .3s}
body > footer .fl a:hover{color:#fff}
body > footer .fbot{
  margin-top:clamp(38px,5vw,58px);padding-top:24px;border-top:1px solid var(--line);
  display:flex;gap:12px 26px;flex-wrap:wrap;justify-content:space-between;
  font-size:12.5px;color:rgba(216,222,231,.5);
}
body > footer .fbot a{color:rgba(216,222,231,.66)}
body > footer .fbot a:hover{color:var(--accent-l)}

/* Byråkreditering. Ersatte "Förhandsvisning byggd av ..." när sajten gick
   skarp. Den ska synas utan att ta plats: en dämpad pill som får färg
   först på hover, i samma monospace som resten av sajtens småetiketter.
   Märket är två bokstäver satta som glyfer — ingen bildfil att ladda. */
.krcred{
  display:inline-flex;align-items:center;gap:11px;
  padding:8px 14px 8px 9px;border-radius:100px;
  border:1px solid var(--line);background:rgba(216,222,231,.03);
  transition:border-color .4s var(--ease),background .4s var(--ease),transform .5s var(--ease);
}
.krcred:hover{border-color:rgba(57,138,254,.42);background:rgba(57,138,254,.07);transform:translateY(-1px)}
.krcred .krm{
  display:grid;place-items:center;width:26px;height:26px;border-radius:8px;flex-shrink:0;
  background:linear-gradient(140deg,var(--accent),#4B2E9E);
  font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.06em;color:#fff;
}
.krcred .krt{display:flex;flex-direction:column;line-height:1.25}
body > footer .fbot .krcred b{
  font-family:var(--disp);font-size:12.5px;font-weight:600;color:rgba(232,238,246,.9);letter-spacing:-.012em;
}
.krcred em{
  font-style:normal;font-family:var(--mono);font-size:9px;letter-spacing:.15em;
  text-transform:uppercase;color:rgba(216,222,231,.45);margin-top:2px;
}
.krcred:hover em{color:rgba(143,190,255,.7)}
body > footer .fbot .krcred{color:inherit}
@media(max-width:560px){body > footer .fbot{justify-content:center;text-align:center}}
.soc{display:flex;gap:9px;margin-top:19px}
.soc a{
  width:39px;height:39px;border-radius:11px;border:1px solid var(--line);
  display:grid;place-items:center;transition:border-color .4s,background .4s,transform .5s var(--ease);
}
.soc a:hover{border-color:var(--accent);background:rgba(57,138,254,.11);transform:translateY(-3px)}
/* Tre av ikonerna är ritade som fyllda former, Instagram som linjer.
   En gemensam fill-regel gjorde därför Instagram till en solid klump. */
.soc svg{width:17px;height:17px;fill:currentColor;color:var(--onDeep)}
.soc svg.linje{fill:none;stroke:currentColor;stroke-width:1.8}
.soc a:hover svg{color:#fff}

/* ---- klibbig mobil-CTA ---- */
#mobcta{
  position:fixed;left:12px;right:12px;bottom:12px;z-index:108;display:none;gap:9px;
  transform:translateY(140%);transition:transform .6s var(--ease);
}
#mobcta.pa{transform:none}
#mobcta a{
  flex:1;min-height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;gap:8px;
  font-weight:620;font-size:15px;box-shadow:0 16px 40px -14px rgba(0,0,0,.7);
}
#mobcta .r{background:var(--accent);color:#06070A}
#mobcta .m{background:rgba(18,21,28,.94);color:#fff;border:1px solid var(--line);backdrop-filter:blur(12px)}
@media(max-width:760px){#mobcta{display:flex}body{padding-bottom:0}}

/* ---- hoppa till innehåll ---- */
.hoppa{
  position:absolute;left:14px;top:-70px;z-index:300;background:var(--accent);color:#06070A;
  padding:11px 19px;border-radius:11px;font-weight:640;transition:top .3s;
}
.hoppa:focus{top:14px}

/* ---- respekterar rörelsekänslighet ---- */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important}
  .rv{opacity:1;transform:none}
  .ord .o>i,.rad>span{transform:none;opacity:1}
}

/* ============================ RAPPORTPOPUP ============================
   Visas efter åtta sekunder. Två avvägningar som styrt utformningen:

   1. Google straffar "intrusive interstitials" på MOBIL för besökare som
      kommer från sök — en ruta som täcker innehållet direkt kan kosta
      placeringar. Undantaget är banners som tar rimlig plats och är lätta
      att stänga. Därför är mobilvarianten ett bottenark som lämnar sidan
      synlig ovanför, med en stor stängknapp. På dator gäller inte regeln,
      och där är det en centrerad ruta.
   2. Ingen layoutförskjutning: rutan ligger fixerad ovanpå sidan och
      påverkar aldrig CLS.
   Den visas inte på /kontakt (besökaren är redan på väg att höra av sig)
   och kommer inte tillbaka efter att den stängts eller skickats in. */
.rapport{position:fixed;inset:0;z-index:150;display:flex;align-items:center;justify-content:center;padding:clamp(16px,3vw,32px)}
.rapport[hidden]{display:none}
.rapportskugga{position:absolute;inset:0;background:rgba(6,7,10,.66);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);opacity:0;transition:opacity .5s var(--ease)}
.rapport.pa .rapportskugga{opacity:1}
.rapportruta{
  position:relative;width:100%;max-width:472px;max-height:92vh;overflow-y:auto;
  background:var(--deep2);border:1px solid var(--line);border-radius:20px;
  padding:clamp(26px,3.2vw,36px);box-shadow:0 40px 90px -30px rgba(0,0,0,.8);
  opacity:0;transform:translateY(14px) scale(.985);
  transition:opacity .55s var(--ease),transform .55s var(--ease);
}
.rapport.pa .rapportruta{opacity:1;transform:none}
.rapportruta::before{
  content:"";position:absolute;inset:0;border-radius:20px;pointer-events:none;
  background:radial-gradient(120% 70% at 50% 0%,rgba(57,138,254,.16),transparent 62%);
}
.rapportruta > *{position:relative}
.rapportstang{
  background:none;border:0;cursor:pointer;appearance:none;
  position:absolute;top:12px;right:12px;width:38px;height:38px;border-radius:11px;
  display:grid;place-items:center;color:var(--dim);border:1px solid transparent;
  transition:color .3s,background .3s,border-color .3s;
}
.rapportstang:hover{color:#fff;background:rgba(216,222,231,.07);border-color:var(--line)}
.rapportstang svg{width:17px;height:17px;stroke:currentColor;stroke-width:2.2;fill:none;stroke-linecap:round}
.rapportruta h2{font-size:clamp(23px,2.6vw,29px);color:#fff;margin:13px 0 9px;letter-spacing:-.03em;line-height:1.16}
.rapportruta .rtext{color:rgba(216,222,231,.8);font-size:14.5px;line-height:1.6;margin-bottom:20px}

.rapport label{display:block;margin-bottom:12px}
.rapport label > span{
  display:block;margin-bottom:6px;font-family:var(--mono);font-size:10px;
  letter-spacing:.15em;text-transform:uppercase;color:var(--dim);
}
.rapport label > span i{font-style:normal;color:rgba(216,222,231,.38);text-transform:none;letter-spacing:.04em}
.rapport input,.rapport select{
  width:100%;background:rgba(216,222,231,.05);border:1px solid var(--line);
  border-radius:11px;padding:12px 14px;color:#fff;font-size:15px;min-height:46px;
  transition:border-color .3s,background .3s;
}
.rapport input::placeholder{color:rgba(216,222,231,.34)}
.rapport input:focus,.rapport select:focus{outline:none;border-color:var(--accent);background:rgba(57,138,254,.08)}
.rapport select{appearance:none;cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238FBEFF' stroke-width='2.4' stroke-linecap='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 13px center;background-size:15px;padding-right:38px}
.rapport select option{background:var(--deep2);color:#fff}

.rplatt{margin:16px 0 6px;padding-top:16px;border-top:1px solid var(--line)}
.rrad{display:flex;align-items:center;gap:9px;margin-top:9px}
.rrad .rmark{
  flex-shrink:0;width:38px;height:38px;border-radius:10px;display:grid;place-items:center;
  background:rgba(57,138,254,.13);border:1px solid rgba(57,138,254,.26);
}
.rrad .rmark svg{width:16px;height:16px;fill:var(--accent-l)}
.rrad input{margin:0}
.rrad button{
  background:none;border:0;cursor:pointer;appearance:none;
  flex-shrink:0;width:34px;height:34px;border-radius:9px;color:var(--dim);
  display:grid;place-items:center;transition:color .3s,background .3s;
}
.rrad button:hover{color:#FF8E89;background:rgba(180,52,47,.14)}
.rrad button svg{width:14px;height:14px;stroke:currentColor;stroke-width:2.3;fill:none;stroke-linecap:round}

.rapport .btn{width:100%;justify-content:center;margin-top:16px}
.rfin{margin-top:13px;font-size:12px;color:rgba(216,222,231,.44);line-height:1.55;text-align:center}
#rkvitto{margin-top:13px;padding:11px 14px;border-radius:11px;font-size:13.5px;display:none;line-height:1.5}
#rkvitto.pa{display:block;border:1px solid rgba(57,138,254,.4);background:rgba(57,138,254,.1);color:#CFE2FF}
#rkvitto.fel{border-color:rgba(180,52,47,.5);background:rgba(180,52,47,.12);color:#FF8E89}
/* Honungsfällan: dold för ögat men inte för robotar. Aldrig display:none —
   en del robotar hoppar över fält som är helt bortkopplade. */
.honung{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;opacity:0!important}

@media(max-width:620px){
  .rapport{align-items:flex-end;padding:0}
  .rapportruta{
    max-width:none;border-radius:22px 22px 0 0;border-bottom:0;max-height:76vh;
    padding:22px 20px calc(20px + env(safe-area-inset-bottom));
    transform:translateY(26px);
  }
  .rapportruta h2{font-size:20px;margin:9px 0 7px}
  .rapportruta .rtext{font-size:13.5px;margin-bottom:14px}
  .rapport label{margin-bottom:9px}
  .rapport input,.rapport select{min-height:44px;padding:10px 13px}
}
@media(prefers-reduced-motion:reduce){
  .rapportskugga,.rapportruta{transition:none}
}
