/*
Theme Name: Mega Engine
Theme URI: https://megaengine.it/
Author: Mega Engine
Description: Block theme for the Mega Engine network — glass surfaces over an aurora field, industrial precision, zero external assets. No page builders, no web fonts, fast by default.
Version: 0.5.5
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 8.1
License: Proprietary
Text Domain: mega-engine
*/

/* =========================================================
   Token
   Un solo posto per vetro, profondità e movimento: il plugin
   (app.css) legge questi stessi token, così le due superfici
   non possono divergere.
   ========================================================= */
:root {
    --me-ink: #0b0e14;
    --me-muted: #59637a;
    --me-accent: #f2610c;
    --me-violet: #6d5efc;
    --me-cyan: #12b5c9;

    /* Vetro: opacità + sfocatura + bordo che simula la rifrazione. */
    --me-glass-bg: rgba(255, 255, 255, 0.58);
    --me-glass-bg-strong: rgba(255, 255, 255, 0.78);
    --me-glass-border: rgba(255, 255, 255, 0.75);
    --me-glass-edge: rgba(11, 14, 20, 0.07);
    --me-blur: 20px;

    /* Ombre a due stadi: contatto + diffusione. Una sola ombra
       sembra sempre finta. */
    --me-shadow-1: 0 1px 2px rgba(11, 14, 20, .05), 0 8px 24px -8px rgba(11, 14, 20, .10);
    --me-shadow-2: 0 2px 6px rgba(11, 14, 20, .07), 0 24px 60px -18px rgba(11, 14, 20, .22);

    --me-radius: 18px;
    --me-radius-sm: 12px;
    --me-ease: cubic-bezier(.22, .8, .3, 1);
}

@media (prefers-color-scheme: dark) {
    :root {
        --me-ink: #eef1f7;
        --me-muted: #99a3b8;
        --me-glass-bg: rgba(146, 160, 190, 0.10);
        --me-glass-bg-strong: rgba(146, 160, 190, 0.16);
        --me-glass-border: rgba(255, 255, 255, 0.14);
        --me-glass-edge: rgba(0, 0, 0, 0.5);
        --me-shadow-1: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px -8px rgba(0, 0, 0, .55);
        --me-shadow-2: 0 2px 6px rgba(0, 0, 0, .45), 0 24px 60px -18px rgba(0, 0, 0, .7);
    }
}

body {
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
    color: var(--me-ink);
}

a { text-underline-offset: 3px; }
html, body { overflow-x: clip; }

/* Il focus non si nasconde mai: è l'unico modo di navigare per chi
   non usa il mouse, e il vetro tende a mangiarsi i contorni. */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
    outline: 2px solid var(--me-accent);
    outline-offset: 3px;
    border-radius: 6px;
}

/* =========================================================
   Aurora: il campo luminoso dietro al vetro
   Senza qualcosa di vivo dietro, una superficie sfocata sembra
   solo grigia. Tre macchie che respirano lentamente, in un
   pseudo-elemento fisso: nessun nodo in più nel DOM, nessun
   reflow, solo composizione GPU.
   ========================================================= */
body::before {
    content: "";
    position: fixed;
    inset: -20vmax;
    z-index: -2;
    pointer-events: none;
    background:
        radial-gradient(38vmax 30vmax at 18% 8%, rgba(242, 97, 12, .20), transparent 60%),
        radial-gradient(34vmax 28vmax at 84% 12%, rgba(109, 94, 252, .18), transparent 62%),
        radial-gradient(40vmax 34vmax at 62% 88%, rgba(18, 181, 201, .15), transparent 64%);
    animation: me-drift 34s var(--me-ease) infinite alternate;
}

/* Grana finissima: toglie il banding dai gradienti ampi, che su
   schermi a 8 bit è la cosa che più fa sembrare "fatto in casa". */
body::after {
    content: "";
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    opacity: .035;
    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='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
}

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

@media (prefers-color-scheme: dark) {
    body { background: #070910; }
    body::before { opacity: .55; }
    body::after { opacity: .05; }
}

/* =========================================================
   Superficie in vetro — utility condivisa
   ========================================================= */
.me-glass {
    background: var(--me-glass-bg);
    -webkit-backdrop-filter: blur(var(--me-blur)) saturate(180%);
    backdrop-filter: blur(var(--me-blur)) saturate(180%);
    border: 1px solid var(--me-glass-border);
    box-shadow: var(--me-shadow-1), inset 0 1px 0 rgba(255, 255, 255, .5);
}

/* Se il browser non sa sfocare, il vetro diventa opaco invece che
   illeggibile: il testo sopra un gradiente non sfocato è il modo
   più rapido di rendere un sito inutilizzabile. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    :root { --me-glass-bg: rgba(255, 255, 255, .94); --me-glass-bg-strong: rgba(255, 255, 255, .97); }
    @media (prefers-color-scheme: dark) {
        :root { --me-glass-bg: #11151f; --me-glass-bg-strong: #161b27; }
    }
}

/* =========================================================
   Wordmark
   ========================================================= */
.me-wordmark {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    font-weight: 800;
    font-size: 17px;
    letter-spacing: -0.02em;
    text-decoration: none;
    color: inherit;
    white-space: nowrap;
}
.me-wordmark__mark {
    display: inline-block;
    width: 14px;
    height: 14px;
    border: 3.5px solid currentColor;
    border-radius: 3px;
    position: relative;
    transform: rotate(45deg);
    transition: transform .5s var(--me-ease);
}
.me-wordmark:hover .me-wordmark__mark { transform: rotate(135deg); }
.me-wordmark__mark::after {
    content: "";
    position: absolute;
    inset: 2px;
    background: var(--me-accent);
    border-radius: 1px;
    box-shadow: 0 0 10px rgba(242, 97, 12, .7);
}
.me-wordmark em {
    font-style: normal;
    background: linear-gradient(92deg, var(--me-accent), var(--me-violet));
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

/* =========================================================
   Header in vetro, appiccicato in alto
   ========================================================= */
.me-siteheader {
    position: sticky;
    top: 0;
    z-index: 100;
    /* NIENTE backdrop-filter qui: renderebbe l'header containing block dei
       discendenti position:fixed e il drawer mobile resterebbe intrappolato
       nella sua altezza. Il vetro vive nello pseudo-elemento sotto. */
    background: transparent;
    border-bottom: 1px solid var(--me-glass-edge);
    padding-top: 12px;
    padding-bottom: 12px;
}
.me-siteheader::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background: var(--me-glass-bg-strong);
    -webkit-backdrop-filter: blur(var(--me-blur)) saturate(180%);
    backdrop-filter: blur(var(--me-blur)) saturate(180%);
}
.me-siteheader__row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
}
.me-topnav {
    display: flex;
    gap: 4px;
    align-items: center;
    font-size: 14.5px;
    font-weight: 550;
}
.me-topnav a {
    text-decoration: none;
    color: inherit;
    padding: 8px 13px;
    border-radius: 999px;
    transition: background .18s var(--me-ease), color .18s var(--me-ease);
}
/* La CTA è esclusa: questa regola (0,2,1) batterebbe .me-topnav__cta
   (0,1,0) e al passaggio del mouse sostituirebbe il gradiente con un
   grigio quasi trasparente — testo bianco su sfondo chiaro, invisibile. */
.me-topnav a:hover:not(.me-topnav__cta) { background: rgba(11, 14, 20, .06); }
@media (prefers-color-scheme: dark) { .me-topnav a:hover:not(.me-topnav__cta) { background: rgba(255, 255, 255, .09); } }

/* [me_nav] vive in un blocco wp:shortcode, il cui render core passa da
   wpautop: i link arrivano avvolti in un <p> e il flex/gap dichiarato su
   .me-topnav si applicherebbe al paragrafo, non alle voci. display:contents
   rende il <p> trasparente al layout; margin:0 è il ripiego per i motori
   che non lo supportano (almeno senza i margini di default del browser). */
.me-topnav > p {
    display: contents;
    margin: 0;
}

/* CTA: pulsante pieno, ben visibile — dove si clicca dev'essere ovvio.
   Niente riflesso ::after: era decorativo e sbordava sulle voci accanto
   («Come funziona»), perché WebKit/Blink non lo ritagliavano in modo
   affidabile con overflow:hidden. Rimosso del tutto; il pulsante resta
   gradiente + ombra + un lieve sollevamento all'hover. */
.me-topnav__cta {
    background: linear-gradient(96deg, var(--me-accent), #ff8a3d);
    color: #fff !important;
    font-weight: 650;
    padding: 9px 20px !important;
    border-radius: 999px !important;
    margin-left: 6px;
    box-shadow: 0 6px 20px -6px rgba(242, 97, 12, .65);
    transition: transform .2s var(--me-ease), box-shadow .2s var(--me-ease);
}
.me-topnav__cta:hover {
    transform: translateY(-1px);
    box-shadow: 0 10px 28px -6px rgba(242, 97, 12, .8);
}

/* =========================================================
   Menu mobile — bottone nel header, drawer creato dal JS e
   appeso a <body>. NIENTE elementi fixed dentro l'header: ogni
   antenato con backdrop-filter li intrappolerebbe (pagato tre
   volte). Il drawer vive fuori da tutto, per costruzione.
   ========================================================= */
.me-menu-btn {
    display: none;
    flex-direction: column;
    justify-content: center;
    gap: 4px;
    width: 42px;
    height: 42px;
    padding: 0 11px;
    border-radius: 999px;
    border: 1px solid var(--me-glass-border);
    background: var(--me-glass-bg-strong);
    cursor: pointer;
}
.me-menu-btn span { display: block; height: 2px; border-radius: 2px; background: var(--me-ink); transition: transform .2s var(--me-ease), opacity .2s var(--me-ease); }
.me-menu-btn[aria-expanded="true"] span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.me-menu-btn[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.me-menu-btn[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

@media (max-width: 860px) {
    .me-topnav { display: none; }
    .me-menu-btn { display: inline-flex; }
}

/* =========================================================
   Hero
   ========================================================= */
.me-hero {
    position: relative;
    padding: clamp(48px, 9vw, 104px) 0 clamp(32px, 5vw, 56px);
    text-align: center;
}
.me-hero > * { position: relative; }
.me-hero h1 {
    margin: 0 0 16px;
    font-size: clamp(34px, 6.4vw, 60px);
    line-height: 1.04;
    letter-spacing: -0.03em;
}
/* Solo l'ultima parola del titolo prende il gradiente: se lo prende
   tutto, non risalta niente. */
.me-hero h1 em {
    font-style: normal;
    background: linear-gradient(96deg, var(--me-accent), var(--me-violet) 70%);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}
.me-hero p {
    max-width: 640px;
    margin-left: auto;
    margin-right: auto;
    color: var(--me-muted);
    font-size: clamp(16px, 2.2vw, 19px);
}
.me-hero .me-hero-cta,
.me-hero .me-usecases { justify-content: center; }

/* =========================================================
   Titoli di sezione
   ========================================================= */
.me-section-title {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    font-weight: 650;
    color: var(--me-muted);
    margin: clamp(48px, 7vw, 80px) 0 8px;
}
.me-section-title::before {
    content: "";
    width: 20px;
    height: 3px;
    border-radius: 2px;
    background: linear-gradient(90deg, var(--me-accent), var(--me-violet));
}

/* =========================================================
   Comparsa allo scroll — la aggiunge app.js, qui solo lo stato
   ========================================================= */
.me-reveal { opacity: 0; transform: translateY(14px); }
.me-reveal.is-in {
    opacity: 1;
    transform: none;
    transition: opacity .6s var(--me-ease), transform .6s var(--me-ease);
}

/* =========================================================
   Footer
   ========================================================= */
.me-footer-note { font-size: 13px; color: var(--me-muted); }
.me-footer-note a { color: inherit; }
.me-footer-note a:hover { color: var(--me-accent); }
@media (max-width: 640px) {
    .me-footer .wp-block-columns { gap: 4px !important; }
    .me-footer .wp-block-column { flex-basis: 100% !important; margin-bottom: 14px; }
}

.wp-block-table { overflow-x: auto; }
pre, code { overflow-wrap: anywhere; }

/* =========================================================
   Movimento ridotto: chi lo chiede ha spesso disturbi
   vestibolari. Si spegne tutto, non si attenua.
   ========================================================= */
@media (prefers-reduced-motion: reduce) {
    body::before { animation: none; }
    .me-reveal { opacity: 1; transform: none; transition: none; }
    *, *::before, *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
    }
}
