/*
Theme Name: Kreatívoldal
Theme URI: https://kreativoldal.hu
Author: Hajdú Lajos
Author URI: https://kreativoldal.hu
Description: Modern, futurisztikus WordPress téma a Kreatívoldalhoz
Version: 1.0.1
Requires at least: 6.0
Tested up to: 6.4
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: kreativoldal
Tags: portfolio, business, modern, tailwind
*/

/* A betűtípusok self-hostoltak, lásd assets/fonts.css (kreativoldal-fonts handle).
   A korábbi két @import a Google Fontsra mutatott — a Material Symbols sora a
   TELJES variable ikonfontot (1,12 MB) töltötte le, ráadásul @import-ként
   láncolt, render-blokkoló kérésként. */

/* Helyi noise textúra — inline data-URI, nulla hálózati kérés.
 *
 * FIGYELEM, ez korábban NEM MŰKÖDÖTT: az assets/images/noise.svg egy Vercel
 * hibaoldal szövegét tartalmazta ("The deployment could not be found on
 * Vercel. DEPLOYMENT_NOT_FOUND", 107 B) — nyilván egy külső CDN-ről mentett
 * fájl, ami időközben megszűnt. A böngésző ezt nem tudta képként értelmezni,
 * tehát a textúra sehol nem látszott, viszont minden .noise-bg-t használó
 * oldal (főoldal, blog, archívum, single, blog-hero) lekérte fölöslegesen.
 *
 * A zajt most az SVG saját feTurbulence szűrője állítja elő egy 140 px-es
 * csempén: egyszeri, apró felületen futó számítás, utána a böngésző csak
 * ismétli a csempét. */
.noise-bg {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
    background-size: 140px 140px;
}

/* === KRITIKUS SZÍNEK === */
:root {
    --color-primary: #004AAD;
    --color-primary-dark: #003580;
    --color-highlight: #38B6FF;
    --color-accent-red: #FF5757;
    --color-accent-yellow: #FFD43D;
    --color-background-light: #F8FAFC;
    --color-background-dark: #0f1823;
}

/* Alapértelmezett betűtípusok */
body {
    font-family: "Pavanam", sans-serif !important;
    color: #0f1823;
}

h1,
h2,
h3,
h4,
h5,
h6,
.font-heading {
    font-family: "Paytone One", sans-serif !important;
}

.text-display {
    font-family: "Space Grotesk", sans-serif;
}

/* === SZÍNEK BIZTOSÍTÁSA === */
.bg-primary {
    background-color: var(--color-primary) !important;
}

.bg-highlight {
    background-color: var(--color-highlight) !important;
}

.bg-accent-yellow {
    background-color: var(--color-accent-yellow) !important;
}

.bg-accent-red {
    background-color: var(--color-accent-red) !important;
}

.text-primary {
    color: var(--color-primary) !important;
}

.text-highlight {
    color: var(--color-highlight) !important;
}

.text-accent-yellow {
    color: var(--color-accent-yellow) !important;
}

.text-accent-red {
    color: var(--color-accent-red) !important;
}

.border-primary {
    border-color: var(--color-primary) !important;
}

.border-highlight {
    border-color: var(--color-highlight) !important;
}

.border-accent-yellow {
    border-color: var(--color-accent-yellow) !important;
}

.border-accent-red {
    border-color: var(--color-accent-red) !important;
}

/* Hover állapotok */
.hover\:bg-blue-700:hover {
    background-color: #0056b3 !important;
}

.hover\:bg-sky-400:hover {
    background-color: #38bdf8 !important;
}

.hover\:text-primary:hover {
    color: var(--color-primary) !important;
}

.hover\:text-highlight:hover {
    color: var(--color-highlight) !important;
}

.hover\:border-highlight:hover {
    border-color: var(--color-highlight) !important;
}

/* Gombok alapértelmezett kinézete */
button,
.button,
a.button,
[class*="bg-primary"],
[class*="bg-highlight"] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

.bg-primary {
    background-color: var(--color-primary) !important;
    color: white !important;
}

.bg-highlight {
    background-color: var(--color-highlight) !important;
    color: #0f172a !important;
}

/* Material Icons */
.material-symbols-outlined {
    font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}

/* Csillagok MINDIG sárgák */
.text-accent-yellow .material-symbols-outlined,
.material-symbols-outlined.fill-current {
    color: var(--color-accent-yellow) !important;
}

/* === GOMB STÍLUSOK === */

/* Alapértelmezett gomb stílusok - Egyszerű, tiszta */
.bg-primary,
a[class*="bg-primary"],
button[class*="bg-primary"] {
    background-color: var(--color-accent-yellow) !important;
    color: #0f172a !important;
    transition: all 0.3s ease;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}

.bg-primary:hover,
a[class*="bg-primary"]:hover,
button[class*="bg-primary"]:hover {
    background-color: var(--color-primary) !important;
    color: white !important;
    box-shadow: 0 6px 12px rgba(0, 74, 173, 0.3);
    transform: translateY(-2px);
}

.bg-primary:active,
a[class*="bg-primary"]:active,
button[class*="bg-primary"]:active {
    transform: translateY(0);
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

/* Másodlagos gombok - fehér border */
a[class*="bg-white"][class*="border"],
button[class*="bg-white"][class*="border"] {
    transition: all 0.3s ease;
    border: 2px solid #e2e8f0 !important;
}

a[class*="bg-white"][class*="border"]:hover,
button[class*="bg-white"][class*="border"]:hover {
    border-color: var(--color-highlight) !important;
    background-color: #f8fafc !important;
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(56, 182, 255, 0.2);
}

/* Blink animáció (kód blokkhoz) */
@keyframes blink {

    0%,
    50% {
        opacity: 1;
    }

    51%,
    100% {
        opacity: 0;
    }
}

.blink {
    animation: blink 1s infinite;
}

/* === TYPING EFFECT === */
@keyframes typing {
    from {
        width: 0;
    }

    to {
        width: 100%;
    }
}

@keyframes blink-cursor {
    50% {
        border-color: transparent;
    }
}

.typing-effect {
    overflow: hidden;
    white-space: nowrap;
    animation: typing 3s steps(40, end);
}

.typing-line {
    overflow: hidden;
    white-space: nowrap;
    animation: typing 2s steps(40, end);
    animation-fill-mode: forwards;
    width: 0;
}

/* Különböző sorok különböző késleltetéssel */
.typing-line-1 {
    animation-delay: 0s;
}

.typing-line-2 {
    animation-delay: 0.8s;
}

.typing-line-3 {
    animation-delay: 1.6s;
}

.typing-line-4 {
    animation-delay: 2.4s;
}

.typing-line-5 {
    animation-delay: 3.2s;
}

.typing-line-6 {
    animation-delay: 4s;
}

.typing-line-7 {
    animation-delay: 4.8s;
}

.typing-line-8 {
    animation-delay: 5.6s;
}

/* Gradient text fix */
.text-transparent {
    -webkit-background-clip: text !important;
    background-clip: text !important;
    -webkit-text-fill-color: transparent !important;
}

.bg-clip-text {
    -webkit-background-clip: text !important;
    background-clip: text !important;
}

/*
 * A .bg-gradient-to-r felülírás ELTÁVOLÍTVA. Ez volt itt:
 *
 *   .bg-gradient-to-r {
 *       background-image: linear-gradient(to right,
 *           var(--bs-gradient-stops, #004AAD, #38B6FF)) !important;
 *   }
 *
 * Két hiba volt benne egyszerre:
 *  1. A változónév elgépelt: a Tailwind `--tw-gradient-stops`-ot állít be,
 *     nem `--bs-`-t (az a Bootstrap prefixe). A var() tehát SOHA nem talált
 *     értéket, és mindig a tartalék kék párost (#004AAD → #38B6FF) használta.
 *  2. Az !important miatt ez felülírta a Tailwind from-*/via-*/to-* színeit,
 *     vagyis az oldal ÖSSZES `bg-gradient-to-r` eleme kék lett, függetlenül
 *     attól, mit kért a sablon. Így lett kék az AI WebExpress oldal aranynak
 *     tervezett "AI WebExpress" felirata (from-amber-300 via-amber-400
 *     to-amber-500) és minden más nem-kék vízszintes gradiens.
 *
 * Ez is a régi !important-foltozás maradéka, abból az időből, amikor a
 * tailwind.config nem érvényesült. Most a Tailwind maga generálja a
 * gradienseket, tehát a folt nemcsak fölösleges, hanem kifejezetten káros.
 */

/* WordPress alapértelmezett stílusok */
.wp-block-image img {
    height: auto;
}

.aligncenter {
    text-align: center;
}

/* Szöveg színek biztosítása */
.text-white {
    color: #ffffff !important;
}

.text-slate-900 {
    color: #0f172a !important;
}

.text-slate-800 {
    color: #1e293b !important;
}

.text-slate-700 {
    color: #334155 !important;
}

.text-slate-600 {
    color: #475569 !important;
}

.text-slate-500 {
    color: #64748b !important;
}

.text-slate-400 {
    color: #94a3b8 !important;
}

/* Háttér színek */
.bg-white {
    background-color: #ffffff !important;
}

.bg-slate-50 {
    background-color: #f8fafc !important;
}

.bg-slate-900 {
    background-color: #0f172a !important;
}

/* ========================================
   ÜGYFÉL LOGÓK CAROUSEL - HORIZONTAL SCROLL
   ======================================== */

/* Carousel wrapper - overflow hidden */
.client-logos-carousel {
    position: relative;
    width: 100%;
    overflow: hidden;
    padding: 5px 0;
}

/* Logók track - animált konténer */
.logos-track {
    display: inline-flex;
    align-items: center;
    gap: 30px;
    animation: infinite-scroll 60s linear infinite;
    will-change: transform;
}

/* Logó elem wrapper - DESKTOP: 4 DB LÁTHATÓ (+30% méret) */
.logo-item {
    flex: 0 0 auto;
    width: 286px;
    height: 143px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 10px;
}

/* Logó kép - SZÜRKE alapértelmezetten */
.client-logo {
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
    object-fit: contain;
    filter: grayscale(100%) opacity(0.6);
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

/* HOVER effekt - színes + nagyobb */
.logo-item:hover .client-logo {
    filter: grayscale(0%) opacity(1);
    transform: scale(1.1);
}

/* Pause on hover */
.client-logos-carousel:hover .logos-track {
    animation-play-state: paused;
}

/* Infinite scroll animáció */
@keyframes infinite-scroll {
    from {
        transform: translateX(0);
    }

    to {
        transform: translateX(-50%);
    }
}

/* Responsive - TABLET: dupla méret (360x180) */
@media (max-width: 1024px) {
    .logo-item {
        width: 360px;
        height: 180px;
    }

    .logos-track {
        gap: 45px;
        animation-duration: 50s;
    }
}

/* Responsive - MOBIL: dupla méret (320x160), 2 logó látható */
@media (max-width: 768px) {
    .logo-item {
        width: 320px;
        height: 160px;
    }

    .logos-track {
        gap: 40px;
        animation-duration: 40s;
    }

    .client-logos-carousel {
        padding: 3px 0;
    }
}

/* Responsive - KIS MOBIL: 280x140 */
@media (max-width: 480px) {
    .logo-item {
        width: 280px;
        height: 140px;
    }

    .logos-track {
        gap: 35px;
        animation-duration: 35s;
    }

    .client-logos-carousel {
        padding: 2px 0;
    }
}

/* === FLUENT FORMS STYLING === */
/* Style links within Fluent Forms (e.g., GDPR checkbox) - Enhanced specificity */
.fluent-form-wrapper a,
.fluentform a,
.fluentform .ff-el-form-check-label a,
.fluentform .ff-el-input--label a,
.fluentform label a,
.ff-el-group a,
.ff_conv_app a,
div[data-fluent_id] a {
    color: #004AAD !important;
    text-decoration: underline !important;
    font-weight: 600 !important;
    transition: color 0.3s ease !important;
}

.fluent-form-wrapper a:hover,
.fluentform a:hover,
.fluentform .ff-el-form-check-label a:hover,
.fluentform .ff-el-input--label a:hover,
.fluentform label a:hover,
.ff-el-group a:hover,
.ff_conv_app a:hover,
div[data-fluent_id] a:hover {
    color: #38B6FF !important;
    text-decoration: underline !important;
}

/* Additional specific targeting for checkbox labels */
.fluentform input[type="checkbox"]+label a,
.fluentform .ff-el-form-check-input+label a {
    color: #004AAD !important;
    text-decoration: underline !important;
    font-weight: 600 !important;
}

/* === LINE CLAMP UTILITIES === */
/* Truncate text to specific number of lines */
.line-clamp-2 {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.line-clamp-3 {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* === WORDPRESS CONTENT FORMATTING === */
/* Ensure proper spacing and formatting for blog post content */

/* Base content container */
.blog-content {
    font-size: 1.125rem !important;
    line-height: 1.75 !important;
    color: #334155 !important;
    max-width: none !important;
}

/* Fix emoji alignment - prevent vertical offset */
.blog-content img.emoji,
.blog-content span.emoji {
    display: inline !important;
    vertical-align: text-bottom !important;
    margin: 0 !important;
    padding: 0 !important;
    height: 1em !important;
    width: 1em !important;
}

/* Better text rendering for emojis and special characters */
.blog-content p,
.blog-content li {
    text-rendering: optimizeLegibility !important;
    -webkit-font-smoothing: antialiased !important;
    -moz-osx-font-smoothing: grayscale !important;
}

/* Paragraphs */
.blog-content p {
    margin-bottom: 1.5rem !important;
    line-height: 1.75 !important;
    color: #475569 !important;
}

.blog-content p:last-child {
    margin-bottom: 0 !important;
}

/* Headings */
.blog-content h1 {
    font-family: "Paytone One", sans-serif !important;
    font-size: 2.5rem !important;
    line-height: 1.2 !important;
    margin-top: 3rem !important;
    margin-bottom: 1.5rem !important;
    color: #0f172a !important;
    font-weight: 700 !important;
}

.blog-content h2 {
    font-family: "Paytone One", sans-serif !important;
    font-size: 2rem !important;
    line-height: 1.3 !important;
    margin-top: 3rem !important;
    margin-bottom: 1.25rem !important;
    color: #0f172a !important;
    font-weight: 700 !important;
}

.blog-content h3 {
    font-family: "Paytone One", sans-serif !important;
    font-size: 1.5rem !important;
    line-height: 1.4 !important;
    margin-top: 2rem !important;
    margin-bottom: 1rem !important;
    color: #0f172a !important;
    font-weight: 700 !important;
}

.blog-content h4 {
    font-family: "Paytone One", sans-serif !important;
    font-size: 1.25rem !important;
    line-height: 1.4 !important;
    margin-top: 1.5rem !important;
    margin-bottom: 0.75rem !important;
    color: #0f172a !important;
    font-weight: 700 !important;
}

.blog-content h5,
.blog-content h6 {
    font-family: "Paytone One", sans-serif !important;
    font-size: 1.125rem !important;
    line-height: 1.4 !important;
    margin-top: 1.5rem !important;
    margin-bottom: 0.75rem !important;
    color: #0f172a !important;
    font-weight: 700 !important;
}

/* First heading has no top margin */
.blog-content h1:first-child,
.blog-content h2:first-child,
.blog-content h3:first-child,
.blog-content h4:first-child {
    margin-top: 0 !important;
}

/* Lists */
.blog-content ul,
.blog-content ol {
    margin-top: 1.5rem !important;
    margin-bottom: 1.5rem !important;
    padding-left: 2rem !important;
}

.blog-content ul {
    list-style-type: disc !important;
}

.blog-content ol {
    list-style-type: decimal !important;
}

.blog-content li {
    margin-top: 0.5rem !important;
    margin-bottom: 0.5rem !important;
    color: #475569 !important;
    line-height: 1.75 !important;
}

.blog-content li p {
    margin-bottom: 0.5rem !important;
}

/* Nested lists */
.blog-content ul ul,
.blog-content ol ol,
.blog-content ul ol,
.blog-content ol ul {
    margin-top: 0.5rem !important;
    margin-bottom: 0.5rem !important;
}

/* Blockquotes */
.blog-content blockquote {
    margin-top: 2rem !important;
    margin-bottom: 2rem !important;
    padding-left: 1.5rem !important;
    padding-top: 0.5rem !important;
    padding-bottom: 0.5rem !important;
    border-left: 4px solid var(--color-primary) !important;
    font-style: italic !important;
    color: #64748b !important;
    background-color: #f8fafc !important;
}

.blog-content blockquote p {
    color: #64748b !important;
}

/* Images */
.blog-content img {
    margin-top: 2rem !important;
    margin-bottom: 2rem !important;
    border-radius: 0.75rem !important;
    max-width: 100% !important;
    height: auto !important;
}

/* Links */
.blog-content a {
    color: var(--color-primary) !important;
    font-weight: 600 !important;
    text-decoration: none !important;
    transition: color 0.2s ease !important;
}

.blog-content a:hover {
    color: var(--color-highlight) !important;
    text-decoration: underline !important;
}

/* Strong and emphasis */
.blog-content strong,
.blog-content b {
    font-weight: 700 !important;
    color: #0f172a !important;
}

.blog-content em,
.blog-content i {
    font-style: italic !important;
}

/* Code */
.blog-content code {
    background-color: #f1f5f9 !important;
    padding: 0.25rem 0.5rem !important;
    border-radius: 0.25rem !important;
    font-size: 0.875rem !important;
    color: #1e293b !important;
    font-family: 'Courier New', monospace !important;
}

.blog-content pre {
    background-color: #0f172a !important;
    color: #f1f5f9 !important;
    padding: 1.5rem !important;
    border-radius: 0.75rem !important;
    overflow-x: auto !important;
    margin-top: 2rem !important;
    margin-bottom: 2rem !important;
}

.blog-content pre code {
    background-color: transparent !important;
    padding: 0 !important;
    color: inherit !important;
    font-size: 0.875rem !important;
}

/* Horizontal rule */
.blog-content hr {
    margin-top: 3rem !important;
    margin-bottom: 3rem !important;
    border: 0 !important;
    border-top: 1px solid #e2e8f0 !important;
}

/* Tables */
.blog-content table {
    width: 100% !important;
    margin-top: 2rem !important;
    margin-bottom: 2rem !important;
    border-collapse: collapse !important;
}

.blog-content th,
.blog-content td {
    padding: 0.75rem !important;
    border: 1px solid #e2e8f0 !important;
    text-align: left !important;
}

.blog-content th {
    background-color: #f8fafc !important;
    font-weight: 600 !important;
    color: #0f172a !important;
}

/* WordPress alignment classes */
.blog-content .alignleft {
    float: left !important;
    margin-right: 1.5rem !important;
    margin-bottom: 1rem !important;
}

.blog-content .alignright {
    float: right !important;
    margin-left: 1.5rem !important;
    margin-bottom: 1rem !important;
}

.blog-content .aligncenter {
    display: block !important;
    margin-left: auto !important;
    margin-right: auto !important;
}

/* WordPress blocks */
.blog-content .wp-block-image {
    margin-top: 2rem !important;
    margin-bottom: 2rem !important;
}

.blog-content .wp-block-quote {
    margin-top: 2rem !important;
    margin-bottom: 2rem !important;
}

.blog-content .wp-block-code {
    margin-top: 2rem !important;
    margin-bottom: 2rem !important;
}

/* === Scrollozható kép (a korábbi functions.php inline blokkból) === */
.scrollable-image {
    object-position: top;
    transition: object-position 4s ease-in-out;
}

.group:hover .scrollable-image {
    object-position: bottom;
}

/* === AI WebExpress előnézet: lassú végiggörgetés hoverre ===
   A sablon a `hover:animate-slow-scroll` osztályt a GÖRGETŐ KONTÉNERRE teszi,
   de az animációnak a benne lévő képet kell mozgatnia — a konténer eltolása
   magát a dobozt vinné el. Ezért leszármazott-szelektor, nem Tailwind utility.
   A konténer magassága 400px (h-[400px]), ezért ennyit hagyunk láthatóan. */
.hover\:animate-slow-scroll:hover>img {
    animation: slow-scroll 9s ease-in-out forwards;
}

@keyframes slow-scroll {
    from {
        transform: translateY(0);
    }

    to {
        transform: translateY(calc(-100% + 400px));
    }
}

/* ============================================================
   KO HÁTTÉR-RENDSZER — tiszta CSS, nulla kép, nulla extra kérés
   ============================================================
   Ez váltja ki a korábbi WebGL "aurora" hátteret (three.js), ami
   soha nem működött: az inline indítószkript a body közepén futott,
   a three.min.js viszont a láblécben töltődött be, így "THREE is not
   defined" hibával elszállt — a canvas végig üres maradt, miközben
   121 KB JS letöltődött két oldalon.

   Használat a sablonban:
     <section class="relative overflow-hidden ko-dark">
         <div class="ko-aurora" aria-hidden="true"></div>
         <div class="ko-vignette" aria-hidden="true"></div>
         <div class="relative z-10"> ...tartalom... </div>
     </section>

   A dekoratív rétegek külön, abszolút pozícionált <div>-ek (nem
   pszeudo-elemek), mert a téma máshol is így csinálja, és így nincs
   meglepetés a rétegsorrenddel.
*/

/* Sötét alap a látványos szekciókhoz */
.ko-dark {
    background-color: #0b1220;
    background-image: linear-gradient(160deg, #0f172a 0%, #10254a 45%, #0b1220 100%);
    color: #e2e8f0;
}

/* Sodródó színfoltok. Két réteg, eltérő ütemmel, hogy ne legyen gépies. */
.ko-aurora {
    position: absolute;
    inset: 0;
    overflow: hidden;
    pointer-events: none;
    z-index: 0;
}

.ko-aurora::before,
.ko-aurora::after {
    content: "";
    position: absolute;
    inset: -25%;
    /* A blur drága, ha nagy felületen animáljuk, ezért a transform
       animálódik (a kompozitor kezeli), a blur pedig fix marad. */
    will-change: transform;
}

.ko-aurora::before {
    background:
        radial-gradient(38% 44% at 18% 22%, rgba(0, 74, 173, .65), transparent 70%),
        radial-gradient(34% 40% at 82% 16%, rgba(56, 182, 255, .45), transparent 70%),
        radial-gradient(46% 50% at 52% 92%, rgba(76, 60, 190, .45), transparent 72%);
    filter: blur(42px);
    animation: ko-drift-a 26s ease-in-out infinite alternate;
}

.ko-aurora::after {
    background:
        radial-gradient(30% 34% at 72% 62%, rgba(255, 87, 87, .20), transparent 70%),
        radial-gradient(28% 32% at 26% 74%, rgba(255, 212, 61, .16), transparent 70%);
    filter: blur(54px);
    animation: ko-drift-b 34s ease-in-out infinite alternate;
}

@keyframes ko-drift-a {
    from {
        transform: translate3d(-3%, -2%, 0) scale(1);
    }

    to {
        transform: translate3d(4%, 3%, 0) scale(1.12);
    }
}

@keyframes ko-drift-b {
    from {
        transform: translate3d(3%, 2%, 0) scale(1.08);
    }

    to {
        transform: translate3d(-4%, -3%, 0) scale(1);
    }
}

/* A .ko-grid rácsminta ELTÁVOLÍTVA (2026-07-29). Éles peremű, ismétlődő
   minta volt: a szem az éleket keresi, így a háttér versenyzett a szöveggel
   a figyelemért. Helyette .ko-vignette megy — lásd a KO II. szakaszt. */

/* Világos szekciókhoz: lágy, színes "mesh" derengés fehér helyett */
.ko-mesh-light {
    background-color: #f8fafc;
    background-image:
        radial-gradient(42% 46% at 12% 8%, rgba(56, 182, 255, .16), transparent 70%),
        radial-gradient(38% 42% at 88% 12%, rgba(0, 74, 173, .12), transparent 70%),
        radial-gradient(50% 46% at 50% 100%, rgba(255, 212, 61, .10), transparent 72%);
}

/* Felső/alsó lágy átmenet, hogy a sötét és világos szekciók
   ne éles vonallal ütközzenek */
.ko-fade-bottom::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 96px;
    pointer-events: none;
    z-index: 1;
    background: linear-gradient(to bottom, transparent, #f8fafc);
}

/* ============================================================
   KO HÁTTÉR-RENDSZER II. — STATIKUS dekorációs rétegek
   ============================================================
   Az első generáció (.ko-aurora) animált, elmosott foltokból áll. Szép,
   de a blur() nagy felületen a legdrágább dolog, amit egy szekcióháttér
   csinálhat: minden képkockán újrafesti a teljes réteget.

   Az itteni rétegek ezért MIND statikusak és blur nélküliek. A
   radial-gradient széle önmagában lágy, tehát vizuálisan ugyanazt adja,
   futásidejű költség nélkül. Egy oldalon legfeljebb EGY animált
   .ko-aurora legyen (a heróban), a többi szekció ezeket használja.

   Használat:
     <section class="relative overflow-hidden ko-dark-warm">
         <div class="ko-glow-warm" aria-hidden="true"></div>
         <div class="ko-vignette" aria-hidden="true"></div>
         <div class="relative z-10"> ...tartalom... </div>
     </section>

   Két réteg, mindig ebben a sorrendben: előbb a lágy színfolt, aztán a
   vignetta. Rácsot, mintát, körvonalat NE tegyél be — pontosan azért
   került ki, mert elvonta a figyelmet a tartalomról.
*/

/* --- Alapok --------------------------------------------------- */

/* Sötét alap meleg, arany tónussal (AI WebExpress arculata).
   A korábbi bg-slate-950 (#020617) gyakorlatilag fekete volt; ez
   megtartja a mélységet, de van benne kék→barna hőmérséklet-váltás,
   amitől nem lapos. */
.ko-dark-warm {
    background-color: #141d33;
    background-image: linear-gradient(165deg, #1b2745 0%, #24315a 40%, #2b2545 72%, #171f38 100%);
    color: #e2e8f0;
}

/* Világos alap: nem tiszta fehér, hanem alig érzékelhető színes derengés. */
.ko-canvas-light {
    background-color: #f9fbfe;
}

/*
 * FŐOLDAL HERO — a legerősebb felület az oldalon.
 *
 * Ez az első képernyő, amit egy érkező lát, ezért itt nem visszafogottság
 * kell, hanem határozott kontraszt: a fehér főcím mély, sötét alapon ül,
 * és a fény a cím köré rendeződik. Három réteg egyetlen background-image-ben
 * (nincs külön elem, nincs blur):
 *   1. erős cián reflektor jobb felül — a kódablakot emeli ki,
 *   2. mély királykék tömeg bal oldalon — ez adja a főcím mögötti súlyt,
 *   3. egy csepp márkasárga jobb alul, hogy ne legyen egyhangúan kék.
 * Alattuk átlós alapgradiens, hogy a felület sose legyen lapos fekete.
 */
.ko-hero-dark {
    background-color: #060b16;
    background-image:
        radial-gradient(56% 60% at 78% 8%, rgba(56, 182, 255, .34), transparent 72%),
        radial-gradient(68% 74% at 8% 30%, rgba(0, 74, 173, .52), transparent 78%),
        radial-gradient(42% 44% at 94% 92%, rgba(255, 212, 61, .11), transparent 74%),
        linear-gradient(168deg, #0e1a30 0%, #0a1120 56%, #060b16 100%);
    color: #e2e8f0;
}

/* --- Statikus fényfoltok -------------------------------------- */

.ko-glow,
.ko-glow-warm,
.ko-glow-hero {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 0;
}

/* Hűvös kék + egy csepp meleg — a téma primary/highlight párosa */
.ko-glow {
    background-image:
        radial-gradient(64% 68% at 20% 14%, rgba(0, 74, 173, .58), transparent 76%),
        radial-gradient(58% 60% at 86% 26%, rgba(56, 182, 255, .26), transparent 74%),
        radial-gradient(70% 62% at 56% 106%, rgba(67, 56, 170, .42), transparent 78%);
}

/* Arany/borostyán — az AI WebExpress kiemelőszíne (amber-400) */
.ko-glow-warm {
    background-image:
        radial-gradient(64% 68% at 16% 10%, rgba(251, 191, 36, .24), transparent 76%),
        radial-gradient(58% 60% at 88% 28%, rgba(245, 158, 11, .18), transparent 74%),
        radial-gradient(72% 64% at 50% 108%, rgba(180, 83, 9, .32), transparent 78%);
}

/* Világos hero: erős annyira, hogy legyen mit nézni, halvány annyira,
   hogy a slate-900 törzsszöveg kontrasztja ne sérüljön. */
.ko-glow-hero {
    background-image:
        radial-gradient(62% 66% at 88% 2%, rgba(56, 182, 255, .34), transparent 74%),
        radial-gradient(56% 54% at 2% 96%, rgba(0, 74, 173, .17), transparent 76%),
        radial-gradient(44% 48% at 14% 0%, rgba(255, 212, 61, .20), transparent 72%);
}

/*
 * Fénykeret a főoldal hero kódablaka mögé.
 *
 * A sötét hero-n a kártya (bg-slate-900, #0f172a) majdnem beleolvad az
 * alapba (#060b16) — mindkettő nagyon sötét kék, alig van köztük különbség.
 * A megoldás NEM a kártya világosítása: az elrontaná a benne lévő
 * kódszínek kontrasztját, és a "terminál" jelleg is odaveszne. Helyette
 * MÖGÉ teszünk fényt, így a kártya sziluettje válik el a háttértől,
 * miközben a tartalma érintetlen marad.
 *
 * Blur nélkül, radial-gradienttel — a fold fölött ez különösen számít.
 */
.ko-code-halo {
    position: absolute;
    inset: -22% -20%;
    pointer-events: none;
    z-index: 0;
    /* Explicit méret, nem closest-side: a doboz széles és alacsony, ott a
       closest-side a magassághoz igazodik, és a fény túl kicsi marad. */
    background-image: radial-gradient(56% 52% at 52% 46%,
            rgba(56, 182, 255, .58),
            rgba(0, 74, 173, .34) 46%,
            transparent 74%);
}

/* --- Vignetta (szél-sötétítés) -------------------------------- */

/*
 * MIÉRT NINCS TÖBBÉ RÁCS ÉS KÖRVONAL.
 *
 * Az első változatban rácsminta (.ko-grid*) és absztrakt körvonalak
 * (.ko-shapes) is kerültek a szekciókba. Vizuálisan érdekesek voltak, de
 * mindkettő NAGY KONTRASZTÚ, ÉLES peremű elem: a szem az éleket keresi, így
 * a dekoráció versenyzett a szöveggel a figyelemért. Egy háttérnek pont az
 * ellenkezőjét kell csinálnia.
 *
 * A vignetta a fordítottja: nincs benne egyetlen él sem, a szélek felé
 * halkul, és ezzel BEFELÉ, a tartalom felé tereli a tekintetet. A lágy
 * színfoltokkal (.ko-glow*) együtt marad a mélység, de már semmi nem vonja
 * el a figyelmet.
 */
.ko-vignette {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 0;
    background-image: radial-gradient(ellipse 84% 76% at 50% 46%,
            transparent 40%,
            rgba(2, 6, 23, .50) 100%);
}

/* Világos szekcióhoz — épp csak annyi, hogy a szekció ne "kifusson" */
.ko-vignette-light {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 0;
    background-image: radial-gradient(ellipse 88% 80% at 50% 44%,
            transparent 52%,
            rgba(15, 23, 42, .07) 100%);
}

/* === Mobilon nem mozognak a dekoratív foltok ===
   Az .animate-blob 11 helyen szerepel (adatvédelem, impresszum, referenciák,
   scan), és a legtöbb helyen HÁRMASÁVAL: három 384 px-es (w-96 h-96) elem,
   64 px-re elmosva (blur-3xl), mix-blend-multiply-jal, egyszerre animálva.
   Asztalon ez rendben van, telefonon viszont pont az a hardver kapja, ami a
   legkevésbé bírja — ráadásul kis kijelzőn a foltok nagy része a viewporton
   kívülre esik, tehát a mozgás alig látszik, a festés viszont megvan.

   A foltok maguk maradnak (a színes derengés a design része), csak állnak.
   Töréspont: a Tailwind `md` alatt, vagyis ahol egyoszlopos a layout. */
@media (max-width: 767px) {

    .animate-blob {
        animation: none !important;
    }
}

/* === Mozgáscsökkentés ===
   A háttér-foltok 384px-es, 64px-re elmosott elemek; folyamatos animációjuk
   gyenge gépen fölösleges terhelés. Aki rendszerszinten kevesebb mozgást kér,
   annál teljesen leállítjuk őket (és a többi dekoratív animációt is). */
@media (prefers-reduced-motion: reduce) {

    .animate-blob,
    .animate-pulse,
    .animate-ping,
    .animate-bounce,
    .ko-aurora::before,
    .ko-aurora::after,
    .hover\:animate-slow-scroll:hover>img {
        animation: none !important;
    }
}