/* ==== from index.html ==== */
    html, body {
      background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.02%22/%3E%3C/svg%3E');
      color: #FFFFFF;
      overflow-x: clip;
    }
[id] { scroll-margin-top: 100px; }
/* CSS Шум */

    /* Services accent line */
    .service-accent-line { transform: scaleY(0); transform-origin: top; transition: transform .6s cubic-bezier(0.16,1,0.3,1), background-color .4s ease; }
.service-item:hover .service-accent-line, .service-item.is-active .service-accent-line { transform: scaleY(1); background-color: rgba(255,255,255,0.85); }
.service-item:hover .service-heading, .service-item.is-active .service-heading { color: #fff; transform: translateX(1rem); }
.service-item:hover .service-arrow, .service-item.is-active .service-arrow { opacity: 1; transform: translateX(0); }
.service-item:hover .service-desc, .service-item.is-active .service-desc { color: rgba(255,255,255,0.62); }
.service-item:hover .service-index, .service-item.is-active .service-index { color: rgba(255,255,255,0.8); }
/* Contact rows: той самий accent-line прийом, що в списку послуг */
    .contact-row-line { transform: scaleX(0); transform-origin: left; transition: transform .6s cubic-bezier(0.16,1,0.3,1); }
.contact-row:hover .contact-row-line { transform: scaleX(1); }
.contact-row:hover .contact-row-value { color: #fff; }
.contact-row:hover .contact-row-arrow { opacity: 1; transform: translateX(0); }
.contact-row:hover .contact-row-icon { border-color: rgba(255,255,255,0.5); color: #fff; }
/* padding-bottom+негативний margin — "запас" під низ рядка (спуски літер g/y/j/p/q/й/у/р/ц),
   інакше тісний leading (0.95–1.1) разом з overflow:hidden для reveal-анімації зрізає їх знизу. */
.mask-reveal-line, .reveal-line-mask { display: block; overflow: hidden; padding-bottom: 0.25em; margin-bottom: -0.25em; }
#about-heading .word { display: inline-block; opacity: 0.15; }
.tracked { letter-spacing: 0.1em; }
.tracked-tight { letter-spacing: -0.04em; }
.clip-reveal { clip-path: inset(0 0 0 0); }
.img-wrapper { overflow: hidden; position: relative; }
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: #050505; }
::-webkit-scrollbar-thumb { background: #222; border-radius: 10px; }
/* Хедер */
    #site-header {
      background-color: rgba(5, 5, 5, 0);
      border-bottom: 1px solid transparent;
      transition: background-color 0.4s ease, border-color 0.4s ease, top 0.35s cubic-bezier(0.4, 0, 0.2, 1);
    }
.header-scrolled {
      background-color: rgba(5, 5, 5, 0.85);
      backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
      border-bottom: 1px solid rgba(255,255,255,0.05);
    }
/* top замість transform: translateY() навмисно — transform на #site-header створює новий
   containing block для його nested position:fixed нащадків (напр. дроп-даун-меню
   "Послуги" з fixed inset-0 backdrop-blur-overlay), через що той оверлей "ламався"
   (переставав коректно покривати весь viewport) щоразу, як хедер ховався при скролі. */
.header-hidden { top: -84px; }
body.admin-bar #site-header.header-hidden { top: -52px; }
@media screen and (max-width: 782px) {
  body.admin-bar #site-header.header-hidden { top: -38px; }
}

/* Дублює group-hover-стан для дропдауна "Послуги", але керується вручну через JS
   (site.js), а не CSS :hover — бо коли хедер виїжджає назад під нерухомий курсор
   після скролу, справжній :hover браузер сам не перераховує (а синтетичний
   mousemove через dispatchEvent на це не впливає — це не реальний рух миші). */
#services-nav-group.js-force-open #services-dropdown-panel {
  opacity: 1; visibility: visible; pointer-events: auto; transform: translateX(-50%) translateY(0);
}

/* Оверлей затемнення+blur — тепер живе прямо в <body> (поза хедером, див.
   header.php), тож керуємо ним звідси. Первинно — CSS :has() від стану
   #services-nav-group; .is-open — дубль від site.js (той самий випадок, що й
   .js-force-open для панелі: хедер виїхав під нерухомий курсор після скролу). */
#services-dropdown-backdrop {
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.5s ease, visibility 0.5s ease;
}
#services-dropdown-backdrop.is-open,
body:has(#services-nav-group:hover) #services-dropdown-backdrop,
body:has(#services-nav-group.js-force-open) #services-dropdown-backdrop {
  opacity: 1;
  visibility: visible;
}
.nav-underline { position: relative; }
.nav-underline::after {
      content: ''; position: absolute; left: 0; right: 100%; bottom: -4px; height: 1px;
      background: currentColor; transition: right .3s ease-out;
    }
.nav-underline:hover::after { right: 0; }
#menu-btn.is-open #ham-1 { transform: translateY(4.75px) rotate(45deg); }
#menu-btn.is-open #ham-2 { transform: translateY(-4.75px) rotate(-45deg); }
#ham-1, #ham-2 { transition: transform .3s cubic-bezier(0.16, 1, 0.3, 1); }
.hero-slide { clip-path: inset(0 100% 0 0); }
.marquee-track { display: flex; width: max-content; will-change: transform; }
/* Коректний зсув фіксованих елементів під чорну WP admin bar (тільки залогінені адміни) */
body.admin-bar #site-header { top: 32px; }
body.admin-bar #mobile-menu { top: 32px; }
/* admin bar зсуває документ вниз на свою висоту — hero-секція (h-screen = 100vh)
   інакше переповнює в'юпорт, і нижня панель слайдера (absolute bottom-0) йде за межі екрана */
body.admin-bar section.h-screen { height: calc(100vh - 32px); }
@media screen and (max-width: 782px) {
  body.admin-bar #site-header { top: 46px; }
  body.admin-bar #mobile-menu { top: 46px; }
  body.admin-bar section.h-screen { height: calc(100vh - 46px); }
}
/* ==== from contact.html ==== */
    html, body {
      background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.02%22/%3E%3C/svg%3E');
      color: #FFFFFF;
      overflow-x: clip;
    }
/* Хедер — ідентично головній сторінці (стилі #site-header визначені раз, вище) */
.split-inner { display: block; }
/* Директорія контактів — той самий accent-line прийом, що в списку послуг на головній */
    .contact-row-line { transform: scaleX(0); transform-origin: left; transition: transform .6s cubic-bezier(0.16,1,0.3,1); }
/* Форма — без картки, прямо на фоні, як контактна секція на головній */
    .input-field {
      width: 100%;
      background: transparent;
      border: none;
      border-bottom: 1px solid rgba(255, 255, 255, 0.15);
      padding: 1rem 0;
      color: #fff;
      font-size: 1.05rem;
      outline: none;
      transition: all 0.3s ease;
      border-radius: 0;
    }
.input-field:focus { border-color: rgba(255, 255, 255, 0.8); }
.input-field::placeholder { color: rgba(255, 255, 255, 0.3); font-weight: 300; }
.type-chip {
      border: 1px solid rgba(255,255,255,0.15);
      color: rgba(255,255,255,0.6);
      transition: all .25s ease;
    }
.type-chip:hover { border-color: rgba(255,255,255,0.4); color: #fff; }
.type-chip.is-active { background: #fff; color: #000; border-color: #fff; }
.type-chip.is-active svg { color: #000; }
.form-success { display: none; }
.form-success.is-visible { display: flex; }
/* ==== from service-design-3d.html ==== */
    html, body { background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.04%22/%3E%3C/svg%3E'); color: #FFFFFF; overflow-x: clip; }
.index-row { transition: padding .4s cubic-bezier(0.16,1,0.3,1), border-color .4s ease; }
.index-row:hover { padding-left: 1rem; border-color: rgba(255,255,255,0.4); }
.index-row-icon { transition: transform .5s cubic-bezier(0.16,1,0.3,1), background-color .4s ease, color .4s ease, border-color .4s ease; }
.index-row:hover .index-row-icon { background-color: #fff; color: #000; border-color: #fff; transform: scale(1.1) rotate(-5deg); }
.process-line { transform: scaleY(0); transform-origin: top; }
.process-step-num { -webkit-text-stroke: 1px rgba(255,255,255,0.1); color: transparent; transition: all .4s ease; }
.process-step:hover .process-step-num { -webkit-text-stroke: 1px rgba(255,255,255,0.3); transform: translateX(8px); }
.word-reveal-text .word { display: inline-block; opacity: 0.15; transform: translateY(10px); }
/* ==== from service-custom-solutions.html ==== */
    html, body { background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.04%22/%3E%3C/svg%3E'); color: #FFFFFF; overflow-x: clip; }
/* Преміальні рядки */
    .index-row { transition: padding .4s cubic-bezier(0.16,1,0.3,1), border-color .4s ease; }
/* Timeline процесу - Змінена логіка */
    .process-line { transform: scaleY(0); transform-origin: top; }
/* Анімація філософії по словах */
    .word-reveal-text .word { display: inline-block; opacity: 0.15; transform: translateY(10px); }
/* ==== from service-signage.html ==== */
    html, body { background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.04%22/%3E%3C/svg%3E'); color: #FFFFFF; overflow-x: clip; }
/* ==== from service-textile-lightboxes.html ==== */
    html, body { background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.04%22/%3E%3C/svg%3E'); color: #FFFFFF; overflow-x: clip; }
.compare-col-icon { transition: transform .5s cubic-bezier(0.16,1,0.3,1), background-color .4s ease, color .4s ease; }
.compare-col:hover .compare-col-icon { background-color: #fff; color: #000; transform: scale(1.1) rotate(-5deg); }
/* ==== from service-lighting.html ==== */
    html, body { background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.04%22/%3E%3C/svg%3E'); color: #FFFFFF; overflow-x: clip; }
.brand-row {
      -webkit-mask-image: linear-gradient(to right, transparent, black 10%, black 90%, transparent);
      mask-image: linear-gradient(to right, transparent, black 10%, black 90%, transparent);
    }
.brand-pill-box {
      transition: border-color .5s ease, background-color .5s ease;
    }
.brand-pill-box:hover { border-color: rgba(255,255,255,0.22); background-color: rgba(255,255,255,0.05); }
.brand-logo {
      filter: brightness(0) invert(1);
      opacity: 0.42;
      transition: opacity .5s ease, filter .5s ease;
    }
.brand-pill-box:hover .brand-logo { opacity: 1; }
.brand-logo-raster {
      filter: invert(1) contrast(1.05);
      mix-blend-mode: screen;
    }
/* Для растрових лого з темним фоном (не білим) invert() дає світлий прямокутник —
   тут потрібен лише screen-блендинг без інверсії кольорів. */
.brand-logo-raster-dark {
      filter: none;
      mix-blend-mode: screen;
      opacity: 0.9;
    }
.brand-pill-box:hover .brand-logo-raster-dark,
.brand-showcase-card:hover .brand-logo-raster-dark { opacity: 1; }
/* ==== from service-smart-home.html ==== */
    html, body { background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.04%22/%3E%3C/svg%3E'); color: #FFFFFF; overflow-x: clip; }
.brand-showcase-card { transition: border-color .5s ease, background-color .5s ease, transform .5s cubic-bezier(0.16,1,0.3,1); }
.brand-showcase-card:hover { border-color: rgba(255,255,255,0.25); background-color: rgba(255,255,255,0.06); transform: translateY(-4px); }
.brand-showcase-card .brand-glow { opacity: 0; transition: opacity .7s ease; }
.brand-showcase-card:hover .brand-glow { opacity: 1; }
.brand-logo-lg { filter: brightness(0) invert(1); opacity: 0.65; transition: opacity .5s ease, transform .6s cubic-bezier(0.16,1,0.3,1); }
.brand-showcase-card:hover .brand-logo-lg { opacity: 1; transform: scale(1.05); }
/* Хотспоти на головному фото — дот завжди точно на анкорній точці (кінець лінії) */
    .smart-hotspot { pointer-events: auto; }
.smart-hotspot-inner { position: absolute; inset: 0; transition: transform .5s cubic-bezier(0.16,1,0.3,1); }
.smart-hotspot:hover .smart-hotspot-inner,
    .smart-hotspot.is-highlighted .smart-hotspot-inner { transform: scale(1.08); }
.smart-hotspot-dot {
      position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
      appearance: none; padding: 0; margin: 0; font: inherit; cursor: pointer;
      border-radius: 9999px; border: 1px solid rgba(255,255,255,0.5);
      background: rgba(6,6,8,0.6); color: #fff;
      -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
      box-shadow: 0 2px 14px 0 rgba(0,0,0,0.45), 0 0 18px 0 rgba(255,255,255,0.15);
    }
    /* Без transition навмисно: cdn.tailwindcss.com у продакшені тримає MutationObserver,
       який раз у раз чіпає стилі <button> (свій Preflight-скидання background-color),
       через що CSS-transition цього поля ніколи не "добігає" до кінця і застрягає на
       базовому кольорі — підсвітка при наведенні (is-highlighted / :hover) просто не
       з'являлася. Миттєва зміна кольору без transition обходить цей конфлікт. */
.smart-hotspot-dot:focus-visible { outline: 2px solid rgba(255,255,255,0.7); outline-offset: 3px; }
.smart-hotspot:hover .smart-hotspot-dot,
    .smart-hotspot.is-highlighted .smart-hotspot-dot,
    .smart-hotspot-dot:focus-visible {
      border-color: #fff; background-color: rgba(20,20,22,0.75);
      box-shadow: 0 2px 14px 0 rgba(0,0,0,0.5), 0 0 28px 2px rgba(255,255,255,0.35);
    }
.smart-hotspot-ping {
      position: absolute; inset: 0; border-radius: 9999px;
      border: 1px solid rgba(255,255,255,0.55);
      animation: hotspot-ping 2.6s cubic-bezier(0.2,0.6,0.4,1) infinite;
    }
@keyframes hotspot-ping {
      0% { transform: scale(1); opacity: .8; }
      75%, 100% { transform: scale(1.9); opacity: 0; }
    }
.smart-hotspot-btn { -webkit-tap-highlight-color: transparent; }
.smart-hotspot-title { text-shadow: 0 1px 12px rgba(0,0,0,0.7); }
.smart-hotspot-desc { text-shadow: 0 1px 10px rgba(0,0,0,0.7); }
/* Підказка розкривається РАДІАЛЬНО НАЗОВНІ від центру кола — в бік, протилежний
       усім іншим іконкам, тому фізично не може лягти на сусідню мітку. */
    .smart-hotspot-label {
      position: absolute; width: max-content; max-width: clamp(80px, 22vw, 200px);
      background: rgba(8,8,10,0.94); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
      border: 1px solid rgba(255,255,255,0.14); border-radius: 12px;
      padding: .45rem .55rem; box-shadow: 0 16px 40px -10px rgba(0,0,0,0.75);
      opacity: 0; pointer-events: none;
      transition: opacity .25s ease, transform .25s cubic-bezier(0.16,1,0.3,1);
      z-index: 50;
    }
.smart-hotspot-label.tt-up { bottom: 100%; left: 50%; margin-bottom: .65rem; transform: translateX(-50%) scale(.92); }
.smart-hotspot-label.tt-up-right { bottom: 100%; left: 100%; margin-bottom: .35rem; margin-left: .35rem; transform: scale(.92); transform-origin: bottom left; }
.smart-hotspot-label.tt-down-right { top: 100%; left: 100%; margin-top: .35rem; margin-left: .35rem; transform: scale(.92); transform-origin: top left; }
.smart-hotspot-label.tt-down-left { top: 100%; right: 100%; margin-top: .35rem; margin-right: .35rem; transform: scale(.92); transform-origin: top right; }
.smart-hotspot-label.tt-up-left { bottom: 100%; right: 100%; margin-bottom: .35rem; margin-right: .35rem; transform: scale(.92); transform-origin: bottom right; }
.smart-hotspot:hover .smart-hotspot-label,
    .smart-hotspot.is-open .smart-hotspot-label,
    .smart-hotspot.is-highlighted .smart-hotspot-label,
    .smart-hotspot-btn:focus-visible ~ .smart-hotspot-label { opacity: 1; pointer-events: auto; }
.smart-hotspot:hover .smart-hotspot-label.tt-up,
    .smart-hotspot.is-open .smart-hotspot-label.tt-up,
    .smart-hotspot.is-highlighted .smart-hotspot-label.tt-up,
    .smart-hotspot-btn:focus-visible ~ .smart-hotspot-label.tt-up { transform: translateX(-50%) scale(1); }
.smart-hotspot:hover .smart-hotspot-label:not(.tt-up),
    .smart-hotspot.is-open .smart-hotspot-label:not(.tt-up),
    .smart-hotspot.is-highlighted .smart-hotspot-label:not(.tt-up),
    .smart-hotspot-btn:focus-visible ~ .smart-hotspot-label:not(.tt-up) { transform: scale(1); }
.hotspot-line {
      stroke: rgba(255,255,255,0.4); stroke-width: 1.1px; vector-effect: non-scaling-stroke;
      stroke-dasharray: 100; stroke-dashoffset: 100;
    }
.smart-hotspot-hub-dot {
      border-radius: 9999px; background: #fff; box-shadow: 0 0 12px 2px rgba(255,255,255,0.6);
    }
.smart-hotspot-hub-ping {
      border-radius: 9999px; border: 1px solid rgba(255,255,255,0.6);
      animation: hotspot-ping 2.6s cubic-bezier(0.2,0.6,0.4,1) infinite;
    }
/* Картка легенди — підсвічується у відповідь на hover/tap іконки на фото */
    .legend-item { border-radius: 16px; padding: 1rem .75rem; border: 1px solid transparent; transition: border-color .4s ease, background-color .4s ease, transform .4s cubic-bezier(0.16,1,0.3,1); }
.legend-item-dot { transition: border-color .4s ease, background-color .4s ease, color .4s ease, box-shadow .4s ease; }
.legend-item.is-active, .legend-item:hover { border-color: rgba(255,255,255,0.14); background: rgba(255,255,255,0.04); transform: translateY(-3px); }
.legend-item.is-active .legend-item-dot, .legend-item:hover .legend-item-dot { border-color: #fff; background: #fff; color: #000; box-shadow: 0 0 24px 2px rgba(255,255,255,0.25); }
/* ==== from about.html ==== */
/* Анімація "промальовування" SVG при ховері (сторінка "Про нас", stats_grid) */
.draw-svg path, .draw-svg line, .draw-svg polyline, .draw-svg rect, .draw-svg circle {
	stroke-dasharray: 400;
	stroke-dashoffset: 0;
	transition: stroke-dashoffset 0.8s ease-in-out;
}
.group:hover .draw-svg path,
.group:hover .draw-svg line,
.group:hover .draw-svg polyline,
.group:hover .draw-svg rect,
.group:hover .draw-svg circle {
	animation: drawLine 1.5s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}
@keyframes drawLine {
	0% { stroke-dashoffset: 400; }
	100% { stroke-dashoffset: 0; }
}
/* Підйом і освітлення великої цифри при ховері картки (stats_grid) */
.num-transition { transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.6s ease; }
.group:hover .num-transition { transform: translateY(-8px) scale(1.02); color: #ffffff; }
/* ==== from about.html (сторінка "Про нас") ==== */
.img-cover { position: absolute; inset: 0; background: #050505; z-index: 10; transform-origin: top; }
.sticky-cards-wrapper { position: relative; }
.sticky-card {
	position: sticky;
	top: 15vh;
	padding-top: var(--index, 0);
	transform-origin: center top;
	will-change: transform;
}
.card-inner {
	background: #0a0a0a;
	border: 1px solid rgba(255,255,255,0.05);
	border-radius: 2px;
	box-shadow: 0 -20px 40px rgba(0,0,0,0.5);
}
.signature-path { fill: none; }
/* ДНК Бренда — sticky-редакторський блок (сторінка "Про нас") */
.dna-ghost {
	position: absolute;
	left: -0.04em;
	top: -0.44em;
	font-weight: 700;
	font-size: clamp(5rem, 8vw, 8rem);
	line-height: 1;
	letter-spacing: -0.05em;
	color: rgba(255, 255, 255, 0.05);
	pointer-events: none;
	user-select: none;
	z-index: 0;
}
.dna-nav-item {
	display: flex;
	align-items: baseline;
	gap: 0.85rem;
	padding: 0.6rem 0;
	font-size: 11px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.32);
	transition: color 0.45s ease, transform 0.45s ease;
}
.dna-nav-item .dna-nav-num { font-variant-numeric: tabular-nums; font-weight: 600; }
.dna-nav-item.is-active { color: #fff; transform: translateX(6px); }
.dna-progress { transition: height 0.6s cubic-bezier(0.16, 1, 0.3, 1); }
/* ==== from service-realization.html ==== */
    html, body { background-color: #050505; background-image: url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.9%22 numOctaves=%222%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22 opacity=%220.04%22/%3E%3C/svg%3E'); color: #FFFFFF; overflow-x: clip; }

/* ============================================================
   ПОРТФОЛІО — архів (фільтр + "показати ще") і галерея проєкту
   ============================================================ */

/* Картка-панель фільтрів (десктоп): скляна поверхня замість голої лінії —
   узгоджена з преміальним, а не "шаблонним" виглядом решти сайту. На мобайл
   вона ж стає контейнером для тригер-кнопки й перетворюється на bottom-sheet
   попап нижче (.pf-filter-panel). */
.pf-filter-card {
	position: relative;
	border-radius: 26px;
	border: 1px solid rgba(255, 255, 255, 0.09);
	background: linear-gradient(155deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.012) 55%, rgba(255, 255, 255, 0.03));
	box-shadow: 0 30px 60px -35px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
@media (min-width: 768px) {
	.pf-filter-card { padding: 1.75rem 2rem; }
}
@media (max-width: 767px) {
	.pf-filter-card { padding: 0; border: none; background: none; box-shadow: none; }
}

.pf-filter-trigger { background: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.14); }
.pf-filter-trigger:active { scale: 0.98; }
.pf-filter-trigger-icon { background: rgba(255, 255, 255, 0.06); color: rgba(255, 255, 255, 0.6); }

.pf-filter-divider { width: 1px; align-self: stretch; background: linear-gradient(180deg, transparent, rgba(255, 255, 255, 0.14), transparent); }

/* Пігулки фільтра */
.pf-filter {
	display: inline-flex;
	align-items: center;
	gap: 0.55rem;
	padding: 0.55rem 1.15rem;
	border: 1px solid rgba(255, 255, 255, 0.12);
	border-radius: 999px;
	font-size: 11px;
	letter-spacing: 0.11em;
	text-transform: uppercase;
	font-weight: 600;
	color: rgba(255, 255, 255, 0.55);
	background: rgba(255, 255, 255, 0.02);
	cursor: pointer;
	transition: color 0.3s ease, background-color 0.3s ease, border-color 0.3s ease, transform 0.25s ease, box-shadow 0.3s ease;
}
.pf-filter:hover { color: #fff; border-color: rgba(255, 255, 255, 0.35); background: rgba(255, 255, 255, 0.06); transform: translateY(-1px); }
.pf-filter.is-active { color: #050505; background: #fff; border-color: #fff; box-shadow: 0 8px 24px -8px rgba(255, 255, 255, 0.4); }
.pf-filter:active { scale: 0.96; }
.pf-filter-count {
	font-size: 10px;
	opacity: 0.5;
	font-variant-numeric: tabular-nums;
}
.pf-filter.is-active .pf-filter-count { opacity: 0.45; }
/* Пігулка ховається, якщо з поточним іншим фільтром вона дала б 0 проєктів
   (JS, pfUpdateFacetCounts). Власний клас, а не Tailwind `.hidden` — щоб
   надійно переважати `.pf-filter{display:inline-flex}` незалежно від
   порядку підключення рантайм-стилів Tailwind Play CDN. */
.pf-filter.pf-filter-hide { display: none; }

/* Групи фільтра всередині панелі (мітка "Напрямок"/"Рік") */
.pf-filter-group-label {
	font-size: 10px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	font-weight: 700;
	color: rgba(255, 255, 255, 0.32);
	margin-bottom: 0.85rem;
}

/* ============================================================
   ПАНЕЛЬ ФІЛЬТРІВ: на десктопі — статична картка в потоці; на мобайл —
   той самий блок стає bottom-sheet попапом, що виїжджає знизу за кліком
   на кнопку "Фільтр" (стилізація — за зразком #lightbox: темний
   заблюрений бекдроп + плавний GSAP-показ).
   ============================================================ */
@media (max-width: 767px) {
	#pf-filter-backdrop {
		transition: opacity 0.35s ease;
	}
	#pf-filter-backdrop.is-open { opacity: 1; pointer-events: auto; }

	.pf-filter-panel {
		position: fixed;
		left: 0; right: 0; bottom: 0;
		z-index: 80;
		max-height: 85vh;
		transform: translateY(100%);
		opacity: 0;
		pointer-events: none;
		transition: transform 0.45s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.35s ease;
	}
	.pf-filter-panel.is-open { transform: translateY(0); opacity: 1; pointer-events: auto; }
	.pf-filter-panel-inner {
		background: #0d0d0d;
		border: 1px solid rgba(255, 255, 255, 0.1);
		border-bottom: none;
		border-radius: 24px 24px 0 0;
		padding: 1.75rem 1.5rem calc(1.5rem + env(safe-area-inset-bottom, 0px));
		max-height: 85vh;
		overflow-y: auto;
		box-shadow: 0 -30px 80px -20px rgba(0, 0, 0, 0.6);
	}
}

/* Довантаження: приховані елементи сітки до кліку "Показати ще" */
.pf-item.is-hidden { display: none; }

/* Вертикальний "редакторський" зсув кожної 2-ї видимої плитки (додає JS) */
@media (min-width: 768px) {
	.pf-item.pf-offset { margin-top: 4rem; }
}

/* Тонка лінія-розмежування перед плитками від 2-го рядка (додає JS,
   pfLayout) — щоб довгий список проєктів читався групами під час скролу. */
.pf-item.pf-divider { border-top: 1px solid rgba(255, 255, 255, 0.08); padding-top: 1.75rem; }

/* Галерея проєкту: масонрі-колонки (2/3/4, вибір клієнта в ACF) — кожне
   фото зі своїм природним aspect-ratio (інлайн-стиль у markup), тому
   горизонтальні й вертикальні кадри дають каскадний вигляд, а не однакові
   плитки. Паралакс + zoom при скролі — загальне .img-wrapper img правило
   вище (site.js), клас img-wrapper тут теж є. */
.pf-shot img { will-change: transform; }
.pf-shot:hover img { transform: scale(1.04); }

@media (prefers-reduced-motion: reduce) {
	.pf-item img, .pf-shot img { transition: none !important; }
}

/* ============================================================
   ЛАЙТБОКС ГАЛЕРЕЇ ПРОЄКТУ (single-portfolio.php)
   Стилізація — за зразком proposal-template-v2.html.
   ============================================================ */
/* Натиск-фідбек через незалежну властивість `scale`, а не `transform` —
   інакше він затирав би Tailwind-трансформи центрування стрілок
   (`-translate-y-1/2`) і кнопка стрибала при кліку. */
.tap-feedback { transition: scale .15s ease; }
.tap-feedback:active { scale: 0.94; }

#lightbox { display: none; }
#lightbox.is-open { display: flex; }
#lightbox-thumbs .lb-thumb {
	position: relative;
	overflow: hidden;
	width: 48px;
	height: 48px;
	border: 1px solid rgba(255, 255, 255, 0.1);
	opacity: 0.4;
	transition: opacity .3s ease, border-color .3s ease, transform .3s ease;
	cursor: pointer;
	flex-shrink: 0;
	background: #0d0d0d;
}
#lightbox-thumbs .lb-thumb.is-active,
#lightbox-thumbs .lb-thumb:hover { opacity: 1; border-color: rgba(255, 255, 255, 0.5); transform: translateY(-2px); }
#lightbox-thumbs { max-width: 100%; overflow-x: auto; scrollbar-width: none; }
#lightbox-thumbs::-webkit-scrollbar { display: none; }
