/* =========================================================================
   Base — reset, root element rules, typography, small reusable utilities.
   Nothing component-specific lives here (see components.css / layout.css).
   ========================================================================= */

*,*::before,*::after{ box-sizing:border-box; }

html{ scroll-behavior:smooth; color-scheme:light dark; }

body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-display);
  line-height:1.55;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}

body.lock{ overflow:hidden; height:100vh; height:100svh; }

/* Ambient accent glow behind the whole page */
body::before{
  content:''; position:fixed; top:-260px; left:50%; transform:translateX(-50%);
  width:1100px; height:760px; pointer-events:none; z-index:0;
  background:radial-gradient(circle, var(--accent-glow), transparent 62%);
}

/* Interactive Background Pattern & Spotlight */
.bg-interactive {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-image: 
    linear-gradient(to right, var(--border) 1px, transparent 1px),
    linear-gradient(to bottom, var(--border) 1px, transparent 1px);
  background-size: 40px 40px;
  mask-image: radial-gradient(ellipse at center, rgba(0,0,0,1) 0%, rgba(0,0,0,0.1) 80%);
  -webkit-mask-image: radial-gradient(ellipse at center, rgba(0,0,0,1) 0%, rgba(0,0,0,0.1) 80%);
  opacity: 0.4;
}

.bg-spotlight {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-image: 
    linear-gradient(to right, transparent calc(var(--mouse-x, 50vw) - 1px), var(--accent-soft) var(--mouse-x, 50vw), transparent calc(var(--mouse-x, 50vw) + 1px)),
    linear-gradient(to bottom, transparent calc(var(--mouse-y, 50vh) - 1px), var(--accent-soft) var(--mouse-y, 50vh), transparent calc(var(--mouse-y, 50vh) + 1px)),
    repeating-radial-gradient(circle at var(--mouse-x, 50vw) var(--mouse-y, 50vh), transparent 0, transparent 40px, var(--accent-glow) 41px, transparent 42px),
    radial-gradient(circle at var(--mouse-x, 50vw) var(--mouse-y, 50vh), var(--accent-soft) 0%, transparent 60%);
  mask-image: radial-gradient(500px circle at var(--mouse-x, 50vw) var(--mouse-y, 50vh), black 10%, transparent 100%);
  -webkit-mask-image: radial-gradient(500px circle at var(--mouse-x, 50vw) var(--mouse-y, 50vh), black 10%, transparent 100%);
  opacity: 0;
  transition: opacity 0.8s var(--ease);
}
.bg-spotlight.active {
  opacity: 1;
}

a{ color:inherit; text-decoration:none; }
button{ font:inherit; color:inherit; background:none; border:none; cursor:pointer; }
img{ max-width:100%; display:block; }
video{ max-width:100%; }
ul{ list-style:none; margin:0; padding:0; }

h1,h2,h3{ margin:0; font-weight:700; letter-spacing:-.02em; }
p{ margin:0; }

.mono{ font-family:var(--font-mono); }

.container{
  max-width:1200px; margin-inline:auto; padding-inline:clamp(20px,5vw,64px);
  padding-left:max(clamp(20px,5vw,64px), var(--sal));
  padding-right:max(clamp(20px,5vw,64px), var(--sar));
  position:relative; z-index:1;
}

::selection{ background:var(--accent); color:var(--selection-fg); }

/* Visually hidden but still available to screen readers & search engines.
   Used to give context (like the full name) without duplicating it visibly
   next to an already-legible headline. */
.sr-only{
  position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;
}

/* Visible, keyboard-reachable focus ring everywhere (accessibility floor) */
:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; border-radius:4px; }

@media(prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
}

/* ---------- Custom Desktop Scrollbar (Confined strictly below the navbar to the bottom) ---------- */
@media (min-width: 860px){
  html{
    scrollbar-width: none;
    -ms-overflow-style: none;
  }
  html::-webkit-scrollbar,
  body::-webkit-scrollbar{
    width: 0 !important;
    height: 0 !important;
    display: none !important;
  }
}

.site-scrollbar{
  display: none;
}
@media (min-width: 860px){
  .site-scrollbar{
    display: block;
    position: fixed;
    top: var(--nav-h);
    bottom: 8px;
    right: 4px;
    width: 10px;
    z-index: 190;
    pointer-events: auto;
    border-radius: 999px;
  }
  .site-scrollbar-thumb{
    position: absolute;
    top: 0;
    left: 2px;
    width: 6px;
    height: 48px;
    border-radius: 999px;
    background: var(--scrollbar-thumb, rgba(255,255,255,0.22));
    cursor: grab;
    transition: width .15s var(--ease), left .15s var(--ease), background .2s var(--ease);
    will-change: transform;
  }
  .site-scrollbar:hover .site-scrollbar-thumb,
  .site-scrollbar-thumb.dragging{
    width: 8px;
    left: 1px;
    background: var(--scrollbar-thumb-hover, var(--accent));
    box-shadow: 0 0 8px var(--accent-glow);
  }
  .site-scrollbar-thumb.dragging{
    cursor: grabbing;
  }
}

/* ==========================================================================
   Bilingual Text Switching Helpers (Instant client-side toggle)
   ========================================================================== */
html[lang="en"] .lang-fa-text,
html[dir="ltr"] .lang-fa-text,
html:not([lang="fa"]):not([dir="rtl"]) .lang-fa-text {
  display: none !important;
}

html[lang="fa"] .lang-en-text,
html[dir="rtl"] .lang-en-text {
  display: none !important;
}

html[lang="fa"] .lang-fa-text,
html[dir="rtl"] .lang-fa-text {
  display: inline !important;
}

html[lang="en"] .lang-en-text,
html[dir="ltr"] .lang-en-text,
html:not([lang="fa"]):not([dir="rtl"]) .lang-en-text {
  display: inline !important;
}

/* Block-level bilingual helpers */
html[lang="en"] .lang-fa-block,
html[dir="ltr"] .lang-fa-block,
html:not([lang="fa"]):not([dir="rtl"]) .lang-fa-block {
  display: none !important;
}

html[lang="fa"] .lang-en-block,
html[dir="rtl"] .lang-en-block {
  display: none !important;
}

html[lang="fa"] .lang-fa-block,
html[dir="rtl"] .lang-fa-block {
  display: block !important;
}

html[lang="en"] .lang-en-block,
html[dir="ltr"] .lang-en-block,
html:not([lang="fa"]):not([dir="rtl"]) .lang-en-block {
  display: block !important;
}


