:root{
 /* ===================== TINTA (sötét, ALAPÉRTELMEZETT) =====================
    MIÉRT EZ AZ AJÁNLOTT. Egész napos táblázat- és rajzolvasásra készült: a háttér
    mélyszürke-kékesfekete (nem tiszta fekete, hogy a fehér szöveg ne vibráljon), a
    panelek három, jól elváló lépcsőben világosodnak, a KIJELÖLÉS és a bekapcsolt gomb
    pedig BOROSTYÁN — az egyetlen meleg szín a felületen, ezért a szem azonnal megtalálja.
    Az alaprajzi szerepszínek a sötét alapon élénkek, egymástól távoliak. */
 --bg:#14171c;--bg2:#1a1e24;--panel:#1f242b;--panel2:#262c34;--edge:#39414b;--edge2:#0f1216;
 --txt:#e8ebef;--txt2:#a8b0b9;--txt3:#7d8590;--acc:#e0364a;--blue:#5aa9f0;--sel:#f2b53c;
 --ok:#8fd07a;--warn:#f0b14a;--err:#f2867a;--lab:#e2cf85;--errbg:#3a2320;
 --fs:13px;--fst:12.5px;--rowp:6px;
 /* ---- FELÜLETI SZÍNEK — EGYETLEN forrás ----
    Ezek a felület „bútorai”: fejléc, gombok, mezők, kijelölt sorok. Korábban közvetlenül
    a szabályokba voltak beégetve, ezért egy új színvilág felvételéhez negyven szabályt
    kellett volna lemásolni. Így egyetlen témablokk az összes felületet átállítja. */
 --hdrA:#262c34;--hdrB:#1c2127;   /* fejléc színátmenete            */
 --hov:#3a424c;                   /* gomb/chip hover                */
 --pill:#2d343d;                  /* chip, fa-sor hover             */
 --btn:#2c333c;--btnhov:#3a424c;  /* eszköztárgomb                  */
 --on:#f2b53c;--ontx:#1a1206;     /* bekapcsolt/elsődleges gomb — borostyán */
 --field:#121519;--fieldtx:#ffd98f; /* beviteli mező és értékszíne  */
 --canvasbg:#181c22;              /* diagramterület                 */
 --rowsel:#4a3a12;--rowseltx:#ffe9b8;   /* kijelölt táblázatsor — borostyán */
 --rowmsel:#3d381f;--rowmsel2:#413c22;  /* többes kijelölés         */
 --rowhov:#ffffff0a;--rowhovstick:#2b323a;
 --tdline:#ffffff12;              /* táblázat sorvonala             */
 --footbg:#101318;                /* alsó napló sávja               */
 --tagbg:#333b45;--tagtx:#b3bcc6; /* címke                          */
 --srcbg:#2a3139;--srctx:#93a0ad; /* eredetjelölés                  */
 --modon:#2a3139;--modontx:#ffffff;
 /* FIGYELMEZTETŐ és HIBA doboz háttere — eddig be volt égetve az AI szerkesztőbe,
    ezért világos témában olvashatatlan sötét foltként jelent meg. */
 --warnbg:#4a3a23;--errbox:#4a2323;--errbord:#7a3a3a;--errtx:#ffd4d4;--errtx2:#e3b0b0;
 /* AI MAGIC jelzőszínei — a fejlécgomb kerete és a szerkesztő címe ebből dolgozik. */
 --magic1:#7c6cf0;--magic2:#3d9bff;--magic3:#2fd6c4;
 /* ---- ALAPRAJZI JELÖLÉSSZÍNEK — EGYETLEN forrás ----
    A rajzi rátét minden színe INNEN jön (JS-ből a PLANC konstansokon keresztül); egyetlen
    színt sem szabad máshol beégetni, különben a jelmagyarázat és a rajz elcsúszik egymástól.
    Az alapértelmezés a SÖTÉT felülethez készült; a világos téma alább felülírja. */
 --pl-room:#2fd6c4;        /* helyiség körvonala — türkiz  */
 --pl-wall-unheated:#e8d44d; /* fűtetlen tér felé néző fal — sárga */
 --pl-wall-ext:#f0912b;    /* külső fal — narancs          */
 --pl-wall-int:#b07ce8;    /* belső fal — lila             */
 --pl-window:#3d9bff;      /* ablak — kék                  */
 --pl-door:#4fd66a;        /* ajtó — zöld                  */
 --pl-uncertain:#ff5a4d;   /* bizonytalan kapcsolat — piros, szaggatott */
 /* NYÍLÁSZÁRÓ-SZEREPEK. A szín azt mondja meg, MILYEN nyílászáró és ad-e hőveszteséget:
    a külső ablak és a külső ajtó lehűlő felület, a belső ajtó és a belső üvegezés nem,
    a nem bizonyított elem pedig addig semmit nem ad, amíg nincs eldöntve. */
 --pl-op-window:#3d9bff;       /* külső ablak — kék            */
 --pl-op-door-ext:#4fd66a;     /* külső ajtó — zöld            */
 --pl-op-door-balcony:#2fd6c4; /* erkélyajtó — türkiz          */
 --pl-op-door-int:#b07ce8;     /* belső ajtó — lila            */
 --pl-op-glazed-int:#8fd0e8;   /* belső üvegezés — halványkék  */
 --pl-op-gate:#f0912b;         /* kapu — narancs               */
 --pl-op-unsure:#ff5a4d;       /* nem bizonyított — piros      */
 --pl-src:#8d98a4;         /* az EREDETI rajz vonalai      */
 --pl-srctext:#aab3bd;     /* az EREDETI rajz feliratai    */
 --pl-dim:0.13;            /* nem kijelölt elemek halványítása */
}
body[data-theme=light]{
 --bg:#eef0f2;--bg2:#e2e5e9;--panel:#ffffff;--panel2:#eceff2;--edge:#c8ced5;--edge2:#b8bfc7;
 --txt:#1e2429;--txt2:#4d5760;--txt3:#7b858e;--acc:#c8102e;--blue:#1f6fb2;--sel:#0a7ea4;
 --ok:#2e7d32;--warn:#a35b00;--err:#c62828;--lab:#7a5c00;--errbg:#fdeceb;
 /* Világos háttéren ugyanaz a HAT szerep, sötétebb, telítettebb árnyalatban — a
    jelentés (türkiz/narancs/lila/kék/zöld/piros) nem változik. */
 --pl-room:#0a8f82;--pl-wall-ext:#c26a00;--pl-wall-int:#7b3fc4;--pl-wall-unheated:#6b6000;
 --pl-window:#1565c0;--pl-door:#1f8a3a;--pl-uncertain:#c62828;
 --pl-op-window:#1565c0;--pl-op-door-ext:#1f8a3a;--pl-op-door-balcony:#0a8f82;
 --pl-op-door-int:#7b3fc4;--pl-op-glazed-int:#3a7fa0;--pl-op-gate:#c26a00;
 --pl-op-unsure:#c62828;
 --pl-src:#7a838d;--pl-srctext:#5b646d;--pl-dim:0.16;
 --hdrA:#fbfcfd;--hdrB:#eceff2;--hov:#dde2e8;--pill:#e2e6ea;
 --btn:#f3f5f7;--btnhov:#e6ebef;--on:#cfe6f3;--ontx:#0d4a63;
 --field:#f2f5f8;--fieldtx:#1e2429;--canvasbg:#f5f7f8;
 --rowsel:#cfe6f3;--rowseltx:#0d3547;--rowmsel:#fbf0d6;--rowmsel2:#f7ecd0;
 --rowhov:#0000000a;--rowhovstick:#eef2f5;--tdline:#0000000f;
 --footbg:#f2f4f6;--tagbg:#e2e6ea;--tagtx:#4d5760;--srcbg:#e6eaee;--srctx:#6a747d;
 --modon:#f7f9fa;--modontx:#000000;
 --warnbg:#fdf0dc;--errbox:#fbe3e1;--errbord:#e8b4ae;--errtx:#8a1f16;--errtx2:#a4433a;
 --magic1:#6a5ae0;--magic2:#1f6fb2;--magic3:#0a8f82;
}

/* ===================== ÉJKÉK (sötét) =====================
   MIÉRT VAN. A meglévő sötét téma semleges szürke, és a panelszintek között kicsi a
   különbség: esti munkánál a rétegek összefolynak. Ez a színvilág mélykék alapra épül,
   NAGYOBB lépésközzel a háttér, a panel és a mező között — így a kijelölés és a beviteli
   mező akkor is elválik, ha a képernyő fényereje le van véve. A szerepszínek itt is
   ugyanazok, csak világosabb árnyalatban, hogy a sötét alapon is kiolvashatók legyenek. */
body[data-theme=night]{
 --bg:#121820;--bg2:#18202a;--panel:#1d2632;--panel2:#243040;--edge:#33415a;--edge2:#0d131a;
 --txt:#dbe6f2;--txt2:#9fb0c4;--txt3:#72829a;--acc:#e0364a;--blue:#5ab0f0;--sel:#26d7f0;
 --ok:#7fd98f;--warn:#f0b14a;--err:#f2867a;--lab:#e2cf85;--errbg:#33201f;
 --pl-room:#33e0cc;--pl-wall-ext:#ffa23d;--pl-wall-int:#c08cf5;--pl-wall-unheated:#f2dd5e;
 --pl-window:#54abff;--pl-door:#5fe07a;--pl-uncertain:#ff6b5e;
 --pl-op-window:#54abff;--pl-op-door-ext:#5fe07a;--pl-op-door-balcony:#33e0cc;
 --pl-op-door-int:#c08cf5;--pl-op-glazed-int:#9adcf2;--pl-op-gate:#ffa23d;
 --pl-op-unsure:#ff6b5e;
 --pl-src:#7e8ea4;--pl-srctext:#9aa9bd;--pl-dim:0.12;
 --hdrA:#26334a;--hdrB:#1a2432;--hov:#31415c;--pill:#26334a;
 --btn:#27344a;--btnhov:#31415c;--on:#2f5f87;--ontx:#e6f4ff;
 --field:#0e141c;--fieldtx:#ffd98f;--canvasbg:#131b25;
 --rowsel:#22557a;--rowseltx:#ffffff;--rowmsel:#3b3520;--rowmsel2:#403a24;
 --rowhov:#ffffff0d;--rowhovstick:#2a3648;--tdline:#ffffff14;
 --footbg:#0e141c;--tagbg:#26334a;--tagtx:#9fb0c4;--srcbg:#22303f;--srctx:#7e8ea4;
 --modon:#243040;--modontx:#ffffff;
 --warnbg:#3b3520;--errbox:#3a2220;--errbord:#6e3a36;--errtx:#ffd4d4;--errtx2:#e3b0b0;
 --magic1:#8f80ff;--magic2:#54abff;--magic3:#33e0cc;
}
/* ===================== FRISS (világos, élénk) =====================
   KINEK. A fiatal (18–22 éves) felhasználónak, aki a mai alkalmazásokat ismeri: fehér
   kártyák halvány lila alapon, ibolya elsődleges gomb, menta kijelölés, korall hiba.
   Élénk, de NEM játékos a rovására: a szöveg–háttér kontraszt mindenhol megüti az AA-t,
   a szerepszínek jelentése változatlan. */
body[data-theme=fresh]{
 --bg:#f4f3fa;--bg2:#ebe9f5;--panel:#ffffff;--panel2:#f3f1fb;--edge:#dcd8ee;--edge2:#c9c3e3;
 --txt:#1e1b33;--txt2:#5a5678;--txt3:#8b87a6;--acc:#ff4d6d;--blue:#5b4de0;--sel:#0fb5a3;
 --ok:#1f9d5c;--warn:#c76b00;--err:#d93a5a;--lab:#8a6300;--errbg:#fde8ec;
 --pl-room:#0a9c8d;--pl-wall-ext:#e0731a;--pl-wall-int:#7b4de0;--pl-wall-unheated:#8a7a00;
 --pl-window:#2b6fe8;--pl-door:#17a33a;--pl-uncertain:#e0304f;
 --pl-op-window:#2b6fe8;--pl-op-door-ext:#17a33a;--pl-op-door-balcony:#0a9c8d;
 --pl-op-door-int:#7b4de0;--pl-op-glazed-int:#3a86b8;--pl-op-gate:#e0731a;
 --pl-op-unsure:#e0304f;
 --pl-src:#8a86a3;--pl-srctext:#5f5b7a;--pl-dim:0.16;
 --hdrA:#ffffff;--hdrB:#f1effa;--hov:#e6e2f7;--pill:#ebe8f7;
 --btn:#f5f3fc;--btnhov:#e9e5f8;--on:#5b4de0;--ontx:#ffffff;
 --field:#f4f2fc;--fieldtx:#1e1b33;--canvasbg:#f7f6fc;
 --rowsel:#e6e2ff;--rowseltx:#2a1f7a;--rowmsel:#dff7f2;--rowmsel2:#d3f2ec;
 --rowhov:#5b4de00d;--rowhovstick:#f1effa;--tdline:#00000010;
 --footbg:#f1effa;--tagbg:#ebe8f7;--tagtx:#4d4870;--srcbg:#ece9f6;--srctx:#6b6688;
 --modon:#ffffff;--modontx:#1e1b33;
 --warnbg:#fff1dc;--errbox:#fde3e8;--errbord:#f0b3c0;--errtx:#8a1a30;--errtx2:#a8405a;
 --magic1:#6a5cf0;--magic2:#2b6fe8;--magic3:#0fb5a3;
}

/* ===================== STÚDIÓ (világos, nyugodt) =====================
   KINEK. A 35 körüli tervezőnek, aki napi 8 órát tölt a program előtt: bézs-szürke
   („greige”) alap kevés kékkel, fehér mezők, mélyzöldeskék (petrol) elsődleges szín.
   Nem hivalkodik — a figyelem a táblázaton és a rajzon marad. A fehér mező a panelnél
   világosabb, a kijelölt sor halvány petrol: mindkettő szemmel elválik. */
body[data-theme=studio]{
 --bg:#f0eeea;--bg2:#e7e4de;--panel:#f8f6f2;--panel2:#efece6;--edge:#d5d0c7;--edge2:#c2bcb1;
 --txt:#22262a;--txt2:#565d64;--txt3:#7f868d;--acc:#b8322c;--blue:#1f6f8b;--sel:#0e8a7a;
 --ok:#2f7d3a;--warn:#9a5a00;--err:#b8322c;--lab:#7a5c00;--errbg:#f9e7e4;
 --pl-room:#0b8478;--pl-wall-ext:#c27214;--pl-wall-int:#6a4bb8;--pl-wall-unheated:#6f6410;
 --pl-window:#1d5fb0;--pl-door:#25803a;--pl-uncertain:#c02f2a;
 --pl-op-window:#1d5fb0;--pl-op-door-ext:#25803a;--pl-op-door-balcony:#0b8478;
 --pl-op-door-int:#6a4bb8;--pl-op-glazed-int:#33718e;--pl-op-gate:#c27214;
 --pl-op-unsure:#c02f2a;
 --pl-src:#85806f;--pl-srctext:#5f5a4c;--pl-dim:0.16;
 --hdrA:#faf9f7;--hdrB:#ebe8e2;--hov:#e1ddd5;--pill:#e8e5df;
 --btn:#f3f1ed;--btnhov:#e6e2db;--on:#cfe6e2;--ontx:#0f4a42;
 --field:#ffffff;--fieldtx:#22262a;--canvasbg:#f5f3ef;
 --rowsel:#d3e8e4;--rowseltx:#0f3d37;--rowmsel:#f3e6c8;--rowmsel2:#eee0bd;
 --rowhov:#00000008;--rowhovstick:#efece7;--tdline:#00000012;
 --footbg:#ede9e3;--tagbg:#e8e5df;--tagtx:#4f565d;--srcbg:#ebe7e0;--srctx:#6b6f6a;
 --modon:#faf9f7;--modontx:#111417;
 --warnbg:#f6ead2;--errbox:#f7dedb;--errbord:#dcaaa4;--errtx:#7a1d18;--errtx2:#9c3f39;
 --magic1:#6a4bb8;--magic2:#1f6f8b;--magic3:#0e8a7a;
}
body[data-lum=light] .chip.err{background:#fbe3e1;color:#a92a1c}
body[data-lum=light] .chip.warn{background:#fdf0dc;color:#8a4d00}
body[data-lum=light] .tag.err{background:#fbe3e1;color:#a92a1c}
body[data-lum=light] .tag.warn{background:#fdf0dc;color:#8a4d00}
body[data-lum=light] .tag.ok{background:#e0f0e2;color:#2a6b2e}
body[data-lum=light] .tag.info{background:#dcecf5;color:#15556f}
body[data-lum=light] .issue:hover{background:#0000000a}
body[data-lum=light] .dl>div:nth-child(even){color:#1e2429}
body[data-lum=light] .mbody textarea{background:#fff;color:#1e2429}
*{box-sizing:border-box}html,body{height:100%;margin:0}
body{background:var(--bg);color:var(--txt);font:var(--fs)/1.45 "Segoe UI",Inter,system-ui,sans-serif;
 display:flex;flex-direction:column;overflow:hidden}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
input,select{font:inherit}
.ic{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.5;flex:none}

/* ---------- fejléc ---------- */
.hdr{display:flex;align-items:center;gap:10px;height:44px;padding:0 12px;flex:none;
 background:linear-gradient(var(--hdrA),var(--hdrB));border-bottom:1px solid var(--edge2)}
.brand{display:flex;align-items:center;gap:8px;font-weight:600;letter-spacing:.2px}
/* A MÁRKAJEL a feltöltött logóból KIVÁGOTT kép (assets/vai-mark.png, 147×200, átlátszó
   háttérrel): a fényes szalagok a sötét fejlécen pontosan az eredetit adják. Arány 0,735.
   VILÁGOS témán a fény-a-feketén jel elhalványulna, ezért ott egy kis, sötét, lekerekített
   lapkán áll — az eredeti logó is fekete alapon él.
   A kép széle TELJESEN átlátszó: a kivágás után a teljes négyzetben 5–40-es átlátszatlanságú
   fényudvar maradt, ami sötét háttéren (fejléc, Magic CAD töltésjelző) szürke dobozként látszott —
   a tulajdonos képpel jelezte. Javítva: átlátszatlanság − 30, átskálázva, a szélső 4 px elhalványítva. */
.brand i{display:flex;align-items:center;font-style:normal;border-radius:6px}
.brand .mark{width:auto;height:28px;display:block}
/* A MÁRKAJEL világos témán is a fejléc saját hátterén áll (nincs sötét doboz körülötte):
   a kép átlátszó, csak az ábra látszik; egy finom árnyék adja a kontrasztot. */
body[data-lum=light] .brand .mark{filter:drop-shadow(0 0 1px rgba(20,30,50,.55)) saturate(1.25) brightness(.8)}
.brand{font-size:15px;letter-spacing:1.5px}
.prj{color:var(--txt2);font-size:12.5px;margin-left:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:340px}
.prj b{color:var(--txt)}
.prj .dirty{color:var(--warn)}
.hbtn{display:flex;align-items:center;gap:5px;padding:6px 10px;border-radius:4px;color:var(--txt2);white-space:nowrap}
.hbtn:hover{background:var(--hov);color:var(--txt)}
.hbtn[disabled]{opacity:.35;cursor:default;background:none}
.hbtn.primary{background:var(--on);color:var(--ontx);position:relative}
/* HIBAJELVÉNY a Számítás gomb sarkában: kis piros kör felkiáltójellel. Csak akkor látszik,
   ha a projektben hiba van; a szöveges magyarázat a gomb tooltipjében marad. */
.hbtn .wm{position:absolute;top:-4px;right:-4px;width:14px;height:14px;border-radius:50%;
 background:var(--err);color:#fff;font-size:10px;font-weight:700;line-height:14px;text-align:center;
 box-shadow:0 0 0 2px var(--hdrA)}
.hbtn .wm.hid{display:none}
/* ---- "AI szerkesztő" gomb a felső sávban ----
   Finom, TÖBBSZÍNŰ szegély + halvány belső háttér — nem villog, nem animál folyamatosan
   (a `background-position` kizárólag hoverre/fókuszra mozdul, egyetlen átmenettel). Az
   ikon és a felirat a `.hbtn` közös szabályait örökli (kis képernyőn a felirat eltűnik,
   az ikon marad — lásd a `.hbtn .lbl` média-lekérdezést lent). */
.hbtn.aiedit{position:relative;border:1px solid transparent;color:var(--txt2);
  background:
    linear-gradient(var(--btn),var(--btn)) padding-box,
    linear-gradient(100deg,var(--magic1),var(--magic2) 45%,var(--magic3)) border-box;
  background-size:100% 100%,220% 220%;background-position:0 0,0 0;
  transition:background-position .45s ease,box-shadow .2s ease,color .2s ease}
.hbtn.aiedit:hover,.hbtn.aiedit:focus-visible{color:var(--txt);
  background-position:0 0,100% 60%;box-shadow:0 0 0 1px rgba(124,108,240,.35),0 0 10px rgba(61,155,255,.25)}
.hbtn.aiedit.on{color:#fff;
  background:linear-gradient(100deg,var(--magic1),var(--magic2) 45%,var(--magic3)) border-box;
  box-shadow:0 0 0 1px rgba(124,108,240,.5) inset}
/* A VILÁGOS TÉMÁKBAN a gomb kitöltése korábban TISZTA FEHÉR volt — a fejléc viszont
   maga is majdnem fehér, ezért a gomb gyakorlatilag eltűnt. A kitöltés mostantól a
   téma gombszíne, így minden színvilágban látszik a kerete és a felirata is. */
body[data-lum=light] .hbtn.aiedit.on{color:#fff}
.hsep{width:1px;height:24px;background:var(--edge)}
/* ---- ☰ FÁJL MENÜ --------------------------------------------------------------
   A lenyíló a felső sávból nő ki, ezért a `.hdr` fölé kell kerülnie (z-index), és a
   pozicionálás a burkolóhoz kötött — enélkül vízszintes görgetésnél elcsúszna a gombtól.
   A FÓKUSZ LÁTHATÓ: billentyűvel a menü csak akkor használható, ha látszik, hol állunk. */
.filemenu{position:relative}
.hbtn.busy{opacity:.6;cursor:progress}
.fmenu{position:absolute;top:calc(100% + 6px);left:0;z-index:60;min-width:262px;
  background:var(--panel);border:1px solid var(--edge2);border-radius:6px;
  box-shadow:0 10px 28px rgba(0,0,0,.38);padding:5px;display:flex;flex-direction:column}
.fmenu[hidden]{display:none}
/* A JOBBRA IGAZÍTOTT LENYÍLÓ módosító osztálya SAJÁT nevet visel („fmenu-right”), nem a
   fejléc általános „right” elrendezési osztályát. A BEJELENTETT HIBA: a témaválasztó
   „fmenu right” osztállyal állt a `.hdr .right{display:flex}` szabály hatókörében, amely
   azonos fajsúllyal, de KÉSŐBB áll a fájlban, mint a `.fmenu[hidden]{display:none}` —
   így a zárt menü üres, 262×12 px-es fehér dobozként mindig látszott a modulsor jobb
   szélén. */
.fmenu.fmenu-right{left:auto;right:0;min-width:262px}
.fmenu.fmenu-right .fmitem span{white-space:nowrap}
.fmitem[aria-checked=true]{background:var(--panel2);font-weight:600}
.fmitem .fmsw{width:14px;height:14px;border-radius:50%;border:1px solid var(--edge2);flex:none;margin-right:8px}
.fmitem{display:flex;align-items:center;justify-content:space-between;gap:18px;width:100%;
  padding:7px 10px;border-radius:4px;color:var(--txt);font-size:12.5px;text-align:left;
  background:none;border:0;cursor:pointer}
.fmitem:hover:not([disabled]),.fmitem:focus-visible{background:var(--panel2);outline:none}
.fmitem:focus-visible{box-shadow:inset 0 0 0 2px var(--acc)}
.fmitem[disabled]{opacity:.38;cursor:default}
.fmitem .fmk{color:var(--txt3);font-size:11.5px;white-space:nowrap}
.fmsep{height:1px;margin:5px 4px;background:var(--edge)}
/* Az „Exportálás” almenüje NEM kirepülő panel, hanem behúzott alcsoport: kis képernyőn és
   érintőképernyőn a kirepülő almenü használhatatlan, ez viszont mindenhol működik. */
.fmsub{display:flex;flex-direction:column;margin-left:12px;
  border-left:1px solid var(--edge);padding-left:4px}
.fmsub .fmitem{font-size:12px;padding:6px 10px;color:var(--txt2)}
.fmstate{margin:6px 4px 2px;padding-top:6px;border-top:1px solid var(--edge);
  color:var(--txt3);font-size:11.5px;white-space:normal;line-height:1.45}
/* ---- MENTÉSI ÁLLAPOT: KÉT KOMPAKT IKON ------------------------------------------
   A hosszú, levágott státuszszöveg helyett egy ÁLLAPOTJELZŐ és egy GOMB. A kettő
   szándékosan más elem: a bordó floppy nem kattintható (állapot), a zöld floppy igen
   (művelet). Ha ugyanúgy néznének ki, a felhasználó az állapotjelzőre kattintgatna.
   A SZÍN SOSEM AZ EGYETLEN JELZÉS: mindkettőnek van buborékja és akadálymentes címkéje,
   a gomb pedig `disabled` állapottal is jelzi, hogy nincs mit menteni. */
.sflag{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border-radius:5px;color:#ff6b7a;background:rgba(160,40,55,.16);flex:none}
.sflag[hidden]{display:none}
.sflag svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linejoin:round;stroke-linecap:round}
body[data-lum=light] .sflag{color:#9b1c2c;background:rgba(155,28,44,.12)}
.sbtn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;
  border-radius:5px;border:1px solid transparent;background:rgba(47,150,90,.18);
  color:#54d98c;cursor:pointer;flex:none;transition:background .15s ease,color .15s ease}
.sbtn svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linejoin:round;stroke-linecap:round}
.sbtn:hover:not([disabled]){background:rgba(47,150,90,.32);color:#7ce8a8}
.sbtn:focus-visible{outline:none;box-shadow:0 0 0 2px var(--acc)}
/* MENTETT (vagy nincs mit menteni): passzív, szürke, nem kattintható. */
.sbtn[disabled]{background:none;color:var(--txt3);cursor:default;opacity:.7}
/* MENTÉS FOLYAMATBAN: letiltva, de LÁTHATÓAN folyamatban — nem néma tiltás. */
.sbtn.busy{background:rgba(47,150,90,.18);color:#54d98c;opacity:1;cursor:progress}
.sbtn.busy svg{animation:sbtnpulse 1s ease-in-out infinite}
@keyframes sbtnpulse{0%,100%{opacity:.35}50%{opacity:1}}
body[data-lum=light] .sbtn{background:rgba(31,122,74,.14);color:#1f7a4a}
body[data-lum=light] .sbtn:hover:not([disabled]){background:rgba(31,122,74,.26)}
@media (max-width:640px){.fmenu{min-width:0;width:min(92vw,262px)}}
.hdr .right{margin-left:auto;display:flex;align-items:center;gap:8px}
/* A `hidden` ATTRIBÚTUM MINDIG REJT. Egyetlen általános elrendezési szabály (display:flex
   egy tároló osztályon) sem írhatja felül némán — pontosan ez történt a témaválasztóval. */
[hidden]{display:none !important}
#cAll{display:none}
@media (max-width:1560px){.hbtn .lbl{display:none}.hbtn{padding:6px 8px}}
@media (max-width:1340px){#cWarn,#cInfo{display:none}#cAll{display:flex}
  #calcState{max-width:150px;overflow:hidden;text-overflow:ellipsis}}
@media (max-width:1120px){.prj{max-width:130px}#calcState{display:none}}
.chip{display:flex;align-items:center;gap:5px;padding:4px 9px;border-radius:12px;font-size:12px;
 background:var(--pill);color:var(--txt2);cursor:pointer;white-space:nowrap}
.chip:hover{background:var(--hov)}
/* A HELYSZÍN JELZŐJE a projekt neve mellett (`siteChipRender`): hiányzó helyszín / klímaadat sárga. */
.chip.site{border:0;margin-left:2px}
.chip.site .ic{width:14px;height:14px}
.chip.site .lbl{max-width:200px;overflow:hidden;text-overflow:ellipsis}
@media (max-width:1340px){.chip.site .lbl{max-width:110px}}
@media (max-width:1120px){.chip.site .lbl{display:none}}
:focus-visible{outline:2px solid var(--sel);outline-offset:1px;border-radius:3px}
.tw:focus-visible,.chip:focus-visible,.status [tabindex]:focus-visible{outline:2px solid var(--sel)}
.chip.err{background:#4a2a28;color:#ffb3a8}.chip.warn{background:#45392a;color:#ffd79a}
.chip b{font-variant-numeric:tabular-nums}

/* ---------- modulsáv ---------- */
.mods{display:flex;gap:2px;padding:0 10px;background:var(--bg2);border-bottom:1px solid var(--edge2);flex:none;overflow-x:auto}
.mods button{padding:9px 15px;color:var(--txt2);border-bottom:2px solid transparent;font-size:13px;white-space:nowrap}
.mods button:hover{color:var(--txt)}
.mods button.on{color:var(--modontx);border-bottom-color:var(--acc);background:var(--modon)}
/* A DOC. ASSZISZTENS a fülsor végén: jobbra tolva, ikonnal — nem modulfül, hanem a jobb
   oldali beolvasó panel kapcsolója, és ezt a helye is mondja. */
.mods button.docasst{margin-left:auto;display:flex;align-items:center;gap:6px}
.mods button.docasst .ic{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.6;
 stroke-linecap:round;stroke-linejoin:round;flex:none}
.mods button .b{display:inline-block;margin-left:6px;padding:0 6px;border-radius:9px;font-size:11px;
 background:#4a2a28;color:#ffb3a8;vertical-align:1px}

/* A CSOPORT TAGJAI (Áttekintés és eredmények · Modell · Épületszerkezet) a fülsor alatt, egy sorban. */
.subtabs{display:flex;gap:2px;padding:0 10px;background:var(--panel2);border-bottom:1px solid var(--edge2);flex:none;overflow-x:auto}
.subtabs.hid{display:none}
.subtabs button{padding:6px 14px;color:var(--txt2);border-bottom:2px solid transparent;font-size:12.5px;white-space:nowrap}
.subtabs button:hover{color:var(--txt);background:#ffffff08}
.subtabs button.on{color:var(--modontx);border-bottom-color:var(--acc);background:var(--panel)}
.mods button.grp::after{content:"▾";margin-left:5px;font-size:10px;opacity:.55}
.chip.on{outline:2px solid var(--acc);outline-offset:1px}
/* Az összefoglaló kártyái és lépései kattinthatók: a részletes nézetre visznek. */
.card.go{cursor:pointer}.card.go:hover{border-color:var(--acc)}
.card.go .more{margin-top:6px;font-size:11.5px;color:var(--acc)}
.step.go{cursor:pointer}.step.go:hover span:not(.n){text-decoration:underline}

/* ---------- eszköztár ---------- */
.tools{display:flex;align-items:center;gap:6px;padding:6px 12px;background:var(--panel);
 border-bottom:1px solid var(--edge2);flex:none;overflow-x:auto;min-height:42px}
/* AZ ALAPRAJZ ESZKÖZSÁVJA: a legördülő (Megjelenítés ▾) a sáv alá nyílik, ezért nem vághatja le a
   vízszintes görgetés; sok elemnél inkább tördel, mint görget. */
.tools.plan{flex-wrap:wrap;overflow:visible;row-gap:4px;gap:5px;padding:4px 10px;min-height:38px}
.tools.plan .aibtn{padding:4px 9px}
.sect.planHead{padding:6px 12px 0}
.planSheetLine{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:12.5px;line-height:1.5;padding-right:30px}
.planSheetLine .tag{vertical-align:middle}
.tbtn{display:flex;align-items:center;gap:6px;padding:6px 11px;border-radius:4px;background:var(--btn);
 border:1px solid var(--edge);color:var(--txt);white-space:nowrap;font-size:12.5px}
.tbtn:hover{background:var(--btnhov)}
/* SZÖVEGES SÁVBAN (Nézet:, Csoport:, műveletsor) a gomb SORBAN áll, nem egymás alatt: a
   `.tbtn` alapból flex-blokk (az eszköztárban így kell), de egy bekezdésbe fűzve minden
   gomb külön sort nyitott — ez volt a Szerkezettár függőleges gomboszlopa. */
.sect .tbtn{display:inline-flex;vertical-align:middle}
.tbtn.on{background:var(--on);border-color:var(--edge);color:var(--ontx)}
.tbtn.primary{background:var(--on);border-color:transparent;color:var(--ontx);font-weight:600}
.tbtn.danger:hover{background:#5a3330}
.tsep{width:1px;height:22px;background:var(--edge);margin:0 3px}
.tfld{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--txt2);white-space:nowrap}
.tfld input,.tfld select,.srch{background:var(--field);border:1px solid var(--edge);color:var(--txt);
 padding:5px 8px;border-radius:4px;font-size:12.5px}
.tfld input{width:78px;text-align:right;font-variant-numeric:tabular-nums}
.tfld input:focus,.tfld select:focus,.srch:focus{outline:1px solid var(--blue)}

/* ---------- munkaterület ---------- */
.work{flex:1;display:flex;min-height:0}
.side{background:var(--panel);display:flex;flex-direction:column;min-height:0;flex:none;position:relative}
.side.l{border-right:1px solid var(--edge2)}
/* A PANEL MAGA NEM GÖRÖG. Korábban a teljes `#sideR` görgött, ezért hosszú adatlapnál
   a „Adatlap” fejléc (és benne a becsukó gomb) FELGÖRGÖTT a látóteren kívülre — a
   felhasználó nem látta, minek az adatlapját nézi, és nem érte el a bezárást sem.
   A görgetés ezért a tartalomé (`#dl`), a fejléc pedig fix marad. */
.side.r{border-left:1px solid var(--edge2);overflow:hidden}
#dl{flex:1;min-height:0;overflow:auto}
.side.hid{display:none}
/* KESKENY VISSZANYITÓ FÜL — a Projektpanel (#sideL) bezárt állapotában MINDIG látható,
   billentyűzettel is elérhető gomb. Nem a panel RÉSZE (az `.hid` alatt `display:none`),
   hanem önálló, keskeny sáv a munkaterület bal szélén — ezért marad látható akkor is,
   amikor a panel maga el van rejtve.
   ÉLŐ HIBA (előző kör): a gomb 20px széles, a panelével AZONOS (`var(--panel)`) hátterű
   volt — technikailag jelen volt, de vizuálisan "néhány pixeles, alig látható csík"-nak
   hatott, gyakorlatilag használhatatlanul. Ez itt EXPLICIT méret- és kontraszt-garanciát ad:
   `min-width`/`min-height` (nem csak `width`, mert egy `flex`-elrendezésben a `width` a
   `flex-basis`-t adja meg, amit egy szűk konténer még összenyomhatna — a `min-*` ezt zárja
   ki), önálló, a panelekétől ELTÉRŐ (kékes) háttérszín a láthatósághoz, és egy explicit
   `z-index`, hogy semmilyen más, átfedő elem (grip, canvas, modal-maradvány) ne vághassa el
   a kattinthatóságát. */
.reopenTab{flex:none;width:36px;min-width:36px;min-height:44px;align-self:stretch;
 border:none;border-right:1px solid var(--edge2);position:relative;z-index:6;
 background:var(--blue);color:#fff;cursor:pointer;line-height:1;
 display:flex;align-items:center;justify-content:center;padding:0;
 box-shadow:1px 0 4px rgba(0,0,0,.25)}
.reopenTab svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.4;
 stroke-linecap:round;stroke-linejoin:round;flex:none}
.reopenTab:hover{background:var(--sel);filter:brightness(1.05)}
.reopenTab:focus-visible{outline:2px solid #fff;outline-offset:-3px}
.reopenTab.hid{display:none}
.reopenTab.r{border-right:none;border-left:1px solid var(--edge2);box-shadow:-1px 0 4px rgba(0,0,0,.25)}
/* ALAPRAJZ: húzás (pásztázás) közben a böngésző NE jelölje ki kéken a rajz feliratait, és a
   feliratra kattintva ne váltson szövegkurzorra — a rajz nem szöveg, hanem nézet. */
#planSvg{user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}
#planSvg text{pointer-events:none;user-select:none;-webkit-user-select:none}
.ph .collapse{margin-left:auto;color:var(--txt3);cursor:pointer;padding:0 4px;
 background:none;border:none;font:inherit;font-size:14px;line-height:1}
.ph .collapse:hover{color:var(--txt)}
.ph .collapse:focus-visible{outline:2px solid var(--blue);outline-offset:1px}
/* ÁTMÉRETEZŐ FOGANTYÚ. 6 px széles, teljesen láthatatlan sáv volt: nem látszott, hogy a
   panel egyáltalán húzható, és egérrel is nehéz volt eltalálni. Most szélesebb a
   fogási terület, és egy halvány, függőleges jel MINDIG jelzi a húzhatóságot (nem csak
   hover-re — érintőképernyőn nincs hover). A `touch-action:none` kell ahhoz, hogy a
   húzás ne váltson át a böngésző görgetésére, a `user-select:none` pedig ahhoz, hogy
   húzás közben ne jelölődjön ki kéken a szomszédos szöveg. */
.grip{position:absolute;top:0;bottom:0;width:10px;cursor:col-resize;z-index:5;
 touch-action:none;user-select:none;-webkit-user-select:none;
 display:flex;align-items:center;justify-content:center}
.grip::before{content:"";width:2px;height:28px;border-radius:1px;background:var(--edge);}
.grip:hover{background:#4a9fe055}
.grip:hover::before{background:var(--blue)}
.grip.l{right:-5px}.grip.r{left:-5px}
/* Húzás közben az EGÉSZ dokumentumban tiltjuk a kijelölést: a mutató kifut a fogantyúról,
   és a mögötte lévő táblázat szövege egyébként kijelölődne. */
body.resizing{user-select:none;-webkit-user-select:none;cursor:col-resize}
.ph{padding:7px 10px;font-size:12px;color:var(--txt2);background:var(--panel2);
 border-bottom:1px solid var(--edge2);display:flex;align-items:center;gap:6px;flex:none}
.ph b{color:var(--txt);font-weight:600}
.ph .x{margin-left:auto;color:var(--txt3);cursor:pointer;padding:0 4px}
.ph .x:hover{color:var(--txt)}
.side.l .srch{margin:7px 8px;flex:none}
.tree{overflow:auto;flex:1;padding:2px 0 10px}
.tw{padding:5px 8px 5px 0;display:flex;align-items:center;gap:5px;cursor:pointer;white-space:nowrap;font-size:12.5px}
.tw:hover{background:var(--pill)}
.tw.sel{background:var(--rowsel);color:var(--rowseltx);box-shadow:inset 3px 0 0 var(--sel)}
.tw .ar{width:13px;color:var(--txt3);text-align:center;flex:none}
.tw .tg{font-size:11px;color:var(--txt3);flex:none}
.tw .bad{color:var(--err)}.tw .wr{color:var(--warn)}
.center{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}
.canvas{flex:none;position:relative;background:var(--canvasbg);border-bottom:1px solid var(--edge2);height:270px}
.canvas.hid{display:none}
#fig{width:100%;height:100%;display:block}
.legend{position:absolute;right:10px;bottom:8px;background:#0009;border:1px solid var(--edge);
 border-radius:4px;padding:6px 9px;font-size:11.5px;color:var(--txt2);line-height:1.6;pointer-events:none}
.legend s{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:-1px;text-decoration:none}
.body{flex:1;overflow:auto;min-height:0}
.hgrip{flex:none;height:9px;background:var(--panel2);border-bottom:1px solid var(--edge2);
 cursor:row-resize;display:flex;align-items:center;justify-content:center;gap:8px;position:relative}
.hgrip span{width:44px;height:3px;border-radius:2px;background:var(--edge)}
.hgrip:hover span{background:var(--blue)}
.hgrip b{position:absolute;right:10px;font-size:10.5px;color:var(--txt3);font-weight:400}
.hgrip.hid{display:none}
.drop{position:fixed;inset:0;display:none;place-items:center;background:#0a1a22e8;z-index:50;
 color:var(--sel);font-size:17px;border:3px dashed var(--sel)}
.drop.on{display:grid}

/* ---------- tartalom ---------- */
.sect{padding:8px 12px;background:var(--panel2);color:var(--txt2);font-size:12px;
 border-bottom:1px solid var(--edge2);position:sticky;top:0;z-index:3}
.sect b{color:var(--txt)}
.pad{padding:12px}
.cards{display:flex;gap:12px;flex-wrap:wrap;padding:12px}
.card{background:var(--panel);border:1px solid var(--edge);border-radius:6px;padding:12px 14px;min-width:200px}
.card h4{margin:0 0 6px;font-size:12px;color:var(--txt2);font-weight:600;text-transform:uppercase;letter-spacing:.4px}
.card .big{font-size:23px;font-weight:600;font-variant-numeric:tabular-nums}
.card .sub{font-size:12px;color:var(--txt3);margin-top:3px}
table{width:100%;border-collapse:collapse;font-size:var(--fst);font-variant-numeric:tabular-nums}
th{position:sticky;top:33px;background:var(--panel2);color:var(--txt2);font-weight:600;text-align:right;
 padding:7px 10px;border-bottom:1px solid var(--edge);white-space:nowrap;z-index:2}
th.l,td.l{text-align:left;font-variant-numeric:normal}
td{padding:var(--rowp) 10px;text-align:right;border-bottom:1px solid var(--tdline);white-space:nowrap}
tbody tr:hover td{background:var(--rowhov)}
tbody tr.sel td{background:var(--rowsel);color:var(--rowseltx)}
tbody tr.clk{cursor:pointer}
/* aktív helyiség (kék, .sel) és tömeges kijelölés (sárga sáv, .msel) vizuálisan eltérő —
   egy sor lehet mindkettő egyszerre (aktív ÉS a tömeges módosítás célja is) */
tbody tr.msel td{box-shadow:inset 3px 0 0 var(--warn)}
tbody tr.msel td.stick{box-shadow:inset 3px 0 0 var(--warn)}
tbody tr.msel:not(.sel) td{background:var(--rowmsel)}
tbody tr.msel:not(.sel) td.stick{background:var(--rowmsel2)}
th.stick,td.stick{position:sticky;left:0;background:var(--panel);z-index:1}
th.stick{z-index:3;background:var(--panel2)}
tbody tr:hover td.stick{background:var(--rowhovstick)}
tbody tr.sel td.stick{background:var(--rowsel)}
tfoot td{background:var(--panel2);font-weight:600;border-top:1px solid var(--edge);position:sticky;bottom:0}
td.warn{color:var(--warn)}td.err{color:var(--err)}td.ok{color:var(--ok)}
td select,td input{background:var(--field);border:1px solid var(--edge);color:var(--fieldtx);border-radius:3px;
 padding:3px 5px;font-size:12px;max-width:230px}
/* ---------- nyári hőterhelés ---------- */
.rtabs{display:flex;gap:2px;padding:8px 12px 0;background:var(--panel2);border-bottom:1px solid var(--edge2)}
.rtabs button{padding:8px 18px;color:var(--txt2);border-bottom:2px solid transparent;font-size:13px;
 border-radius:4px 4px 0 0}
.rtabs button:hover{color:var(--txt);background:#ffffff08}
.rtabs button.on{color:var(--modontx);border-bottom-color:var(--acc);background:var(--panel)}
table.audit{width:100%;border-collapse:collapse;font-size:12px}
table.audit th,table.audit td{border:1px solid var(--edge);padding:3px 6px;text-align:right}
table.audit th{background:var(--panel2);color:var(--txt2);font-weight:600}
table.audit td.l,table.audit th.l{text-align:left}
table.audit td.err{color:var(--err)}
table.audit tfoot td{background:var(--panel2);font-weight:600}
.dl .kpiSum{grid-column:1/-1;padding:10px 12px;cursor:pointer;
  border-top:2px solid var(--sel);border-bottom:1px solid var(--edge2)}
.dl .kpiSum.ok{background:#123a41}
.dl .kpiSum.warn{background:#3a2f12}
.dl .kpiSum.err{background:var(--errbg,#3a2320)}
body[data-lum=light] .dl .kpiSum.ok{background:#dbf1f6}
body[data-lum=light] .dl .kpiSum.warn{background:#fdf0dc}
body[data-lum=light] .dl .kpiSum.err{background:#fbe3e1}
.dl .kpiSum.sample{background:#2a2a52}
body[data-lum=light] .dl .kpiSum.sample{background:#e8e4fb}
.kpiSum.sample .kpiSumVal{color:#b6a8f7}
.kpiSum.sample .kpiSumSub{color:#b6a8f7;font-weight:600}
body[data-lum=light] .kpiSum.sample .kpiSumVal{color:#5b3fc4}
body[data-lum=light] .kpiSum.sample .kpiSumSub{color:#5b3fc4}
.badgeSample{display:inline-block;background:#6a4fd4;color:#fff;font-size:10px;font-weight:700;
  padding:1px 6px;border-radius:3px;letter-spacing:.4px;vertical-align:middle}
.kpiCell.sample small{color:#8f7de0}
.kpiSumLab{font-size:11px;color:var(--txt3);text-transform:uppercase;letter-spacing:.3px;margin-bottom:3px}
.kpiSumSym{color:var(--lab)}
.kpiSumVal{font-size:20px;font-weight:700;color:var(--txt);display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.kpiSumVal small{font-size:12px;font-weight:400;color:var(--txt2);white-space:nowrap}
.kpiSum.warn .kpiSumVal,.kpiSum.err .kpiSumVal{color:var(--warn)}
.kpiSum.err .kpiSumVal{color:var(--err)}
.kpiSumSub{font-size:11.5px;color:var(--txt2);margin-top:5px}
.kpiSum.warn .kpiSumSub,.kpiSum.err .kpiSumSub{color:var(--err);font-weight:600}
.dl .kpiSum button.mini{margin-top:7px;margin-right:6px}
.kpiCell{display:flex;flex-direction:column;gap:1px;line-height:1.25}
.kpiCell b{font-variant-numeric:tabular-nums}
.kpiCell small{font-size:10.5px;color:var(--txt3)}
.kpiCell.warn small,.kpiCell.err small{color:var(--err)}
.chartWrap{position:relative;padding:6px 12px 0;min-width:680px}
.chartWrap svg{width:100%;height:auto;display:block}
.chartTip{position:absolute;pointer-events:none;display:none;z-index:6;min-width:210px;
 background:var(--panel);border:1px solid var(--edge);border-radius:6px;padding:8px 10px;
 font-size:12px;box-shadow:0 6px 18px #0006}
.chartTip b{color:var(--txt)}
.chartTip table{width:100%;font-size:11.5px}
.chartTip td{padding:1px 0;border:0}
.legend2{display:flex;gap:6px;flex-wrap:wrap;padding:8px 12px}
.legend2 button{display:flex;align-items:center;gap:6px;padding:4px 9px;border-radius:12px;
 border:1px solid var(--edge);background:var(--panel);font-size:11.5px;color:var(--txt2)}
.legend2 button.off{opacity:.4;text-decoration:line-through}
.legend2 button i{width:10px;height:10px;border-radius:2px;display:block}
.hgrid{display:flex;gap:2px;overflow-x:auto;padding:6px 0}
.hgrid .hcol{width:34px;flex:none;text-align:center;cursor:pointer;user-select:none}
.hgrid .hbar{height:74px;display:flex;align-items:flex-end;background:var(--panel2);
 border:1px solid var(--edge);border-radius:3px;overflow:hidden}
.hgrid .hbar span{display:block;width:100%;background:var(--blue)}
.hgrid .hcol.sel .hbar{outline:2px solid var(--sel)}
.hgrid .hbarEmpty{border-style:dashed;border-color:var(--err);opacity:.6}
.hgrid .hlab{font-size:10px;color:var(--txt3);margin-top:2px}
.hgrid input{width:32px;padding:2px;font-size:10.5px;text-align:center;background:var(--panel);
 border:1px solid var(--edge);color:var(--txt);border-radius:3px;margin-top:2px}
/* érvénytelen felületadatlap-mező: piros keret + alatta a hibaüzenet, nem engedi menteni */
.invalid{border-color:var(--err)!important;outline:1px solid var(--err)}
.fielderr{color:var(--err);font-size:11px;margin-top:3px;line-height:1.3}
.tag{display:inline-block;padding:1px 7px;border-radius:9px;font-size:11px;background:var(--tagbg);color:var(--tagtx)}
.tag.err{background:#4a2a28;color:#ffb3a8}.tag.warn{background:#45392a;color:#ffd79a}
.tag.info{background:#2c3f4a;color:#b6dcec}.tag.ok{background:#2d3f2c;color:#c0e6ae}
.idtag{display:inline-block;min-width:38px;padding:1px 5px;border-radius:3px;font-size:11px;
 font-weight:600;text-align:center;margin-right:6px;color:#10151a}
.issue{display:flex;gap:10px;padding:10px 12px;border-bottom:1px solid var(--edge2);align-items:flex-start}
.issue:hover{background:#ffffff08}
.issue .b{flex:1;min-width:0}
.issue h5{margin:0 0 3px;font-size:13px;font-weight:600}
.issue p{margin:0;font-size:12px;color:var(--txt2)}
.issue .acts{display:flex;gap:6px;flex:none;align-items:center}
.mini{padding:4px 9px;border:1px solid var(--edge);border-radius:4px;background:#3b424a;font-size:12px}
.mini:hover{background:#474f58}
.mini.primary{background:var(--on);color:var(--ontx);border-color:transparent}

/* ---------- Profil párbeszéd ---------- */
.pfHead{display:flex;gap:16px;align-items:center;margin:2px 0 14px}
.pfAvWrap{display:flex;flex-direction:column;align-items:center;gap:6px;flex:none}
.pfAvWrap img,#pfAvatarPlaceholder{width:64px;height:64px;border-radius:50%;object-fit:cover;background:#3b424a}
#pfAvatarPlaceholder{align-items:center;justify-content:center;color:#fff;font-size:24px;font-weight:700;background:var(--blue)}
.pfAvBtn{font-size:11px;color:var(--txt3);cursor:pointer;text-decoration:underline dotted}
.pfAvBtn:hover{color:var(--txt)}
.pfWho .pfName{font-size:16px;font-weight:600}
.pfWho .pfMail{font-size:12.5px;color:var(--txt3);margin-top:2px}
.pfSec{border-top:1px solid var(--edge2);padding:12px 0 6px}
.pfSec h4{margin:0 0 8px;font-size:11.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--txt3);font-weight:600}
.pfRow{display:grid;grid-template-columns:150px minmax(0,1fr) auto;gap:8px;align-items:center;margin:6px 0}
.pfRow label,.pfRow .pfLbl{font-size:12.5px;color:var(--txt2)}
.pfRow input{width:100%;min-width:0;box-sizing:border-box}
.pfRow .pfVal{font-variant-numeric:tabular-nums;color:var(--txt3);letter-spacing:2px}
.pfRow.pfRowEnd{grid-template-columns:1fr auto auto}
.pfRow.pfRowEnd>:first-child{grid-column:2}
.pfPwBox{margin-top:4px;padding:8px 10px;border:1px solid var(--edge2);border-radius:6px;background:var(--panel2)}
.pfMsg{font-size:12px;min-height:14px;margin-top:2px}
@media (max-width:560px){.pfRow{grid-template-columns:1fr}.pfRow.pfRowEnd{grid-template-columns:1fr 1fr}.pfRow.pfRowEnd>:first-child{grid-column:auto}}

/* ---------- adatlap ---------- */
/* ADATLAP-RÁCS. A megnevezés-oszlopnak GARANTÁLT hely kell: az `auto` értékoszlop egy
   szerkesztőmező + eredetcímke esetén annyi helyet vitt el, hogy a megnevezés (pl.
   „Belmagasság (H) [m]”, „Álmennyezeti magasság (RC) [m]”) nullára szorult és a szöveg
   kilógva LEVÁGÓDOTT — épp azt nem lehetett elolvasni, melyik érték melyik. A megnevezés
   ezért legalább 108 px-t kap és tördelhet, az értékoszlop pedig zsugorodhat. */
/* Az `auto` értékoszlop a MÁSIK irányba is elromlott: keskeny panelen nullára zsugorodott,
   és az érték tört minden karakternél („1,\n160”). Ezért most MINDKÉT oszlopnak van
   alsó korlátja, és a maradék helyen osztoznak — a panel minimális szélessége (lásd
   app-shell.js húzási korlát) ehhez a két alsó korláthoz van igazítva. */
.dl{display:grid;grid-template-columns:minmax(108px,1.1fr) minmax(104px,1fr);gap:1px;background:var(--edge2)}
.dl>div{background:var(--panel);padding:6px 10px;font-size:12.5px;color:var(--txt2);
 display:flex;align-items:center;min-height:28px;min-width:0;overflow-wrap:break-word}
/* Az értékoszlop sorokra tördelhet (érték, majd alatta az eredetcímke), de a SZÁMOT nem
   szakítja meg: egy „168,9 / 2 m³” alakban tördelt szám olvashatatlan és félreérthető. */
.dl>div:nth-child(even){justify-content:flex-end;color:var(--txt);font-variant-numeric:tabular-nums;
 text-align:right;flex-wrap:wrap;row-gap:3px}
.dl>div:nth-child(even)>span:not(.chip),.dl>div:nth-child(even)>b{white-space:nowrap}
/* SZERKESZTŐELEM az adatlapon: a cellán nem lóghat túl. A hosszú választólisták (pl.
   „SZ001 · Külső fal 38 tégla (U 1,160)”) korábban a megnevezés-oszlop fölé nyúltak, és
   eltakarták, MELYIK adatot szerkeszti a felhasználó. */
.dl>div>select,.dl>div>input{max-width:100%;min-width:0}
.dl .h{grid-column:1/-1;background:var(--panel2);color:var(--txt3);font-size:11.5px;text-transform:uppercase;letter-spacing:.4px}
.dl .tot{background:#343b42;color:#fff;font-weight:600}
/* A MAGYARÁZÓ MEGJEGYZÉS normál szövegfolyam. A rács celláinak `display:flex` beállítása
   a megjegyzés bekezdésén belül a szövegrészeket és a kiemelt (<b>) értékeket SORBA
   rendezte, egymásra tolva („teljes falhossz6,940 m× belmagasság3,470 m”) — a bruttó →
   levonás → nettó levezetés így olvashatatlan volt. */
.dl .note{grid-column:1/-1;display:block;font-size:11.5px;line-height:1.6;color:var(--txt3);
 text-align:left!important}
.dl small{color:var(--txt3);font-size:11px;margin-left:5px}
/* ADAT EREDETE címke. Az adatlap szűk értékoszlopában a hosszú eredetszöveg (pl. „a falhoz
   rendelt nyílászárók geometriai felülete”) EGY SORBAN kilógott a celláből, és a következő
   sor feliratára feküdt. Tördelhet, de a cellán nem lóghat túl. */
.src{font-size:10.5px;padding:0 5px;border-radius:8px;background:var(--srcbg);color:var(--srctx);
 margin-left:6px;max-width:100%;white-space:normal;overflow-wrap:break-word;line-height:1.45}

/* ---------- alsó panel ---------- */
.foot{flex:none;background:var(--footbg);border-top:1px solid var(--edge2);display:none;flex-direction:column}
.foot.on{display:flex}
.log{height:92px;overflow:auto;padding:6px 12px;font:12px/1.6 Consolas,ui-monospace,monospace;color:var(--txt3)}
.log .ok{color:var(--ok)}.log .er{color:var(--err)}.log .wr{color:var(--warn)}.log .in{color:var(--txt)}
.cli{display:flex;align-items:center;gap:8px;padding:5px 12px;border-top:1px solid var(--edge2);
 font:12.5px Consolas,monospace}
.cli span{color:var(--txt3)}.cli input{flex:1;background:none;border:0;color:var(--txt);outline:none;font:inherit}
.status{flex:none;display:flex;align-items:center;gap:14px;padding:5px 12px;background:var(--bg2);
 border-top:1px solid var(--edge2);font-size:12px;color:var(--txt3)}
.status .r{margin-left:auto;display:flex;gap:14px}

/* ---------- párbeszéd ---------- */
.modal{position:fixed;inset:0;background:#000b;display:none;place-items:center;z-index:60}
.modal.on{display:grid}
.mbox{width:min(880px,94vw);max-height:88vh;background:var(--panel);border:1px solid var(--edge);
 border-radius:8px;display:flex;flex-direction:column;overflow:hidden}
.mbox h3{margin:0;padding:12px 16px;font-size:14px;background:var(--panel2);border-bottom:1px solid var(--edge2)}
.mbody{padding:14px 16px;overflow:auto;font-size:13px}
.mbody textarea{width:100%;height:300px;background:var(--field);color:var(--txt);border:1px solid var(--edge);
 border-radius:4px;padding:9px;font:12px Consolas,monospace;resize:vertical;outline:none}
.mfoot{display:flex;justify-content:flex-end;gap:8px;padding:11px 16px;background:var(--panel2);border-top:1px solid var(--edge2)}
.mfoot button{padding:7px 16px;background:#3b424a;border:1px solid var(--edge);border-radius:4px}
.mfoot button.primary{background:#3d5a6b;border-color:#4d7c94;color:#eaf7fd}
.mfoot button:hover{filter:brightness(1.15)}
.pal{width:min(620px,92vw);background:var(--panel);border:1px solid var(--edge);border-radius:8px;overflow:hidden}
.pal input{width:100%;padding:13px 16px;background:#22262a;border:0;border-bottom:1px solid var(--edge);
 color:#fff;font-size:15px;outline:none}
.pal .list{max-height:340px;overflow:auto}
.pal .it{padding:9px 16px;cursor:pointer;display:flex;gap:10px;align-items:center;font-size:13px}
.pal .it.on,.pal .it:hover{background:#2c4d5c}
.pal .it code{color:var(--txt3);font-size:11.5px;margin-left:auto}

/* ---------- auth-kapu ---------- */
#authGate{position:fixed;inset:0;background:var(--bg2);z-index:1000;display:grid;place-items:center;padding:20px}
#authGate.hid{display:none}
/* Amíg a kapu látszik, a mögötte lévő UI ne csak vizuálisan tűnjön el, hanem
   billentyűzet-fókusszal (Tab) se legyen elérhető — a `visibility:hidden` mindkettőt
   biztosítja, a puszta z-index-es átfedés csak az egeret blokkolná. */
body.gate-on .hdr,body.gate-on .mods,body.gate-on .subtabs,body.gate-on .tools,body.gate-on .work,body.gate-on .foot,
body.gate-on #profileChip{visibility:hidden}
.agBox{width:min(380px,92vw);background:var(--panel);border:1px solid var(--edge);border-radius:8px;padding:24px}
/* A FIZETŐFAL három csomagkártyát mutat egymás mellett — ahhoz a bejelentkezési doboz
   szűk. Csak ebben a nézetben szélesítjük ki; a bejelentkezés/regisztráció marad keskeny,
   mert ott a szűk hasáb olvashatóbb. Kis képernyőn a rács magától egy oszlopba rendeződik. */
.agBox.wide{width:min(760px,94vw)}
.agBox.wide #authGate{max-height:none}
#authGate{overflow:auto}
.agBox h2{margin:0 0 4px;font-size:18px}
.agBox p.sub{margin:0 0 18px;color:var(--txt3);font-size:12.5px}
.agBox label{display:block;font-size:12.5px;color:var(--txt2);margin:0 0 14px}
.agBox input{width:100%;margin-top:4px;padding:9px 10px;background:#22262a;color:var(--txt);
 border:1px solid var(--edge);border-radius:4px;font-size:13px;outline:none;box-sizing:border-box}
.agBox input:focus{border-color:var(--blue)}
.agBox .agBtn{width:100%;padding:10px;background:#3d5a6b;border:1px solid #4d7c94;color:#eaf7fd;
 border-radius:4px;font-size:13px;cursor:pointer;margin-top:2px}
.agBox .agBtn:hover{filter:brightness(1.15)}
.agBox .agBtnAlt{width:100%;padding:10px;background:var(--panel2);border:1px solid var(--edge);color:var(--txt);
 border-radius:4px;font-size:13px;cursor:pointer;margin-top:2px;display:flex;align-items:center;
 justify-content:center;gap:8px}
.agBox .agBtnAlt:hover{filter:brightness(1.1)}
.agBox .agBtnAlt svg{width:16px;height:16px;flex:none}
.agBox .agSep{display:flex;align-items:center;gap:10px;margin:14px 0;color:var(--txt3);font-size:11.5px}
.agBox .agSep::before,.agBox .agSep::after{content:"";flex:1;height:1px;background:var(--edge2)}
.agBox .agLinks{display:flex;justify-content:space-between;margin-top:14px;font-size:12px}
.agBox .agLinks a{color:var(--blue);cursor:pointer;text-decoration:none}
.agBox .agLinks a:hover{text-decoration:underline}
.agBox .agMsg{margin-top:12px;font-size:12.5px;padding:8px 10px;border-radius:4px}
.agBox .agMsg.er{background:#4a2323;color:#ffb4b4}
.agBox .agMsg.ok{background:#1f3d2b;color:#a8e6b8}
/* Kétlépcsős azonosítás (authenticator app): QR-kód, kézi kulcs, kódmező — a kapuban és a profilban. */
.agBox select{width:100%;margin-top:4px;padding:9px 10px;background:#22262a;color:var(--txt);
 border:1px solid var(--edge);border-radius:4px;font-size:13px;box-sizing:border-box}
.agQr{display:flex;justify-content:center;align-items:center;min-height:196px;margin:0 0 12px}
/* A Supabase QR-kódja viewBox nélküli SVG — saját méretén jelenik meg (a kényszerített méret levágná). */
.agQr img{max-width:100%;background:#fff;padding:8px;border-radius:8px}
.agQr span{color:var(--txt3);font-size:12.5px;text-align:center}
.agQr .agQrErr{color:#ffb4b4}
.agKey{margin:0 0 14px;font-size:12px;color:var(--txt3)}
.agKey summary{cursor:pointer;color:var(--blue)}
.agKey code{display:block;margin-top:6px;word-break:break-all;font-size:13px;color:var(--txt);letter-spacing:1px}
input.agCode{font-size:20px;letter-spacing:6px;text-align:center;font-variant-numeric:tabular-nums}
.pfRow .pfVal.pfMfaVal{letter-spacing:0}
.pfHint{font-size:12px;color:var(--txt3);margin:4px 0}
.agBox .agBrand{display:flex;align-items:center;gap:8px;margin-bottom:18px}
.agBox .agBrand i{font-style:normal;display:flex;align-items:center}
.agBox .agBrand .mark{width:auto;height:40px;display:block}
.agBox .agBrand i{border-radius:8px}
body[data-lum=light] .agBox .agBrand i{background:#0b0d12;padding:2px 6px}
.agBox .agBrand b{font-size:20px;letter-spacing:2px}

/* ---------- profil-chip (a fejléc jobb szélén, a színvilág-gomb mellett) ----------
   Korábban a bal alsó sarokban lebegett, a projektfa fölött — takarta a fa alját, és nem
   ott volt, ahol a felhasználó a fiókját keresi (jobb felül, a többi beállítás mellett). */
#profileChip{display:none;align-items:center;gap:7px;padding:3px 8px 3px 3px;border-radius:18px;
 border:1px solid transparent;cursor:pointer;max-width:200px;color:var(--txt2)}
#profileChip:hover,#profileChip:focus-visible{border-color:var(--edge);background:var(--hov);color:var(--txt)}
#profileChip:focus-visible{outline:2px solid var(--blue);outline-offset:1px}
#profileChip.on{display:flex}
#profileChip .pcAv{width:26px;height:26px;border-radius:50%;object-fit:cover;flex:none;background:#3b424a}
#profileChip .pcAvPh{width:26px;height:26px;border-radius:50%;background:var(--blue);color:#fff;flex:none;
 display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
#profileChip .pcText{overflow:hidden}
#profileChip .pcName{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Az e-mail a fejlécben nem fér el, és nem is kell: a tooltip és a Profil párbeszéd mondja. */
#profileChip .pcEmail{display:none}
@media (max-width:1560px){#profileChip .pcText{display:none}#profileChip{padding:3px}}

/* ---------- kezdőképernyő: középen a Doc. asszisztens, jobbra a projektek ---------- */
.start{max-width:940px;margin:0 auto;padding:34px 20px}
.start h1{font-size:24px;margin:0 0 4px;font-weight:600}
.start p.lead{color:var(--txt2);margin:0 0 24px}
.start.ss2{max-width:1240px;padding:24px 22px 40px}
.ss2 .sshead h1{font-size:22px;letter-spacing:-.2px}
.ss2 .sshead p.lead{margin:0 0 18px;font-size:13px;max-width:780px;line-height:1.5}
.ssrestore{background:var(--panel);border:1px solid var(--warn);border-radius:12px;padding:14px 16px;margin-bottom:16px}
.ssgrid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:18px;align-items:start}
@media(max-width:1100px){.ssgrid{grid-template-columns:minmax(0,1fr)}}
.ssmid,.ssside{display:flex;flex-direction:column;gap:14px;min-width:0}
.ssdoc{background:var(--panel);border:1px solid var(--edge);border-radius:14px;overflow:hidden;display:flex;
 flex-direction:column;box-shadow:0 8px 26px #0002}
body.ssmode #sideL,body.ssmode #sideR,body.ssmode #reopenL,body.ssmode #reopenR{display:none!important}
.ssdoc.flash{animation:ssflash .9s ease-out}
@keyframes ssflash{0%{box-shadow:0 0 0 3px var(--blue)}100%{box-shadow:0 8px 26px #0002}}
.ssdoch{display:flex;align-items:center;gap:11px;padding:12px 16px;border-bottom:1px solid var(--edge);background:var(--panel2)}
.ssdoch .ic{width:21px;height:21px;color:var(--blue);stroke-width:1.6}
.ssdoch b{font-size:14.5px;display:block}
.ssdoch small{font-size:12px;color:var(--txt3)}
.ssdoch .dis{margin-left:auto;font-size:11px;color:var(--lab);text-align:right;max-width:190px}
.ssdoc .aib{padding:14px 16px;min-height:140px}
.ssdoc .aif{padding:10px 16px;border-top:1px solid var(--edge);background:var(--panel2)}
.ssdoc .aif:empty{display:none}
.ssdoc textarea{width:100%;box-sizing:border-box;background:var(--bg2);color:var(--txt);
 border:1px solid var(--edge);border-radius:6px;padding:7px 9px;font:inherit;font-size:12.5px;resize:vertical;min-height:74px}
.ssdoc textarea:focus{outline:0;border-color:var(--blue)}
.ssdoc .aidrop{padding:28px 24px;min-height:118px;border-radius:12px}
.ssdoc .aidrop svg{width:32px;height:32px}
.ssdoc .aidrop .t1{font-size:15px}
.sscard{background:var(--panel);border:1px solid var(--edge);border-radius:12px;padding:12px 14px}
.sscard:empty{display:none}
.sssec{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--txt3);font-weight:600;margin:0 0 8px}
.sssec span{text-transform:none;letter-spacing:0;font-weight:400;margin-left:6px}
.ssmuted{font-size:12px;color:var(--txt3);line-height:1.5}
.sshelp{padding:0 4px}
.ssact{display:flex;flex-direction:column;gap:8px}
.ssbtn{display:flex;align-items:center;gap:11px;width:100%;text-align:left;padding:10px 12px;border-radius:10px;
 border:1px solid var(--edge);background:var(--bg2);color:var(--txt);font:inherit;cursor:pointer}
.ssbtn:hover{border-color:var(--blue)}
.ssbtn .ic,.ssmi .ic,.ssli .ic{width:18px;height:18px;stroke-width:1.7;color:var(--blue)}
.ssbtn b,.ssmi b{display:block;font-size:13px}
.ssbtn small,.ssmi small{display:block;font-size:11.5px;color:var(--txt3);margin-top:1px}
.ssbtn.primary{background:var(--blue);border-color:var(--blue);color:#0c1a24}
.ssbtn.primary .ic,.ssbtn.primary small{color:#0c1a24}
body[data-lum=light] .ssbtn.primary,body[data-lum=light] .ssbtn.primary .ic,body[data-lum=light] .ssbtn.primary small{color:#fff}
.ssmenu{position:fixed;z-index:90;width:280px;background:var(--panel);border:1px solid var(--edge);border-radius:11px;
 padding:5px;box-shadow:0 12px 32px #0006}
.ssmi{display:flex;gap:10px;align-items:flex-start;width:100%;text-align:left;padding:8px 9px;border:0;border-radius:8px;
 background:none;color:var(--txt);font:inherit;cursor:pointer}
.ssmi:hover{background:var(--bg2)}
.sslist{display:flex;flex-direction:column;gap:1px}
.ssli{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:7px 8px;border:0;border-radius:8px;
 background:none;color:var(--txt);font:inherit;cursor:pointer;min-width:0}
.ssli:hover{background:var(--bg2)}
.ssli .m{flex:1;min-width:0}
.ssli b{display:block;font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ssli small{display:block;font-size:11.5px;color:var(--txt3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ssli .go{font-size:11.5px;color:var(--blue);flex:none;opacity:0}
.ssli:hover .go,.ssli:focus .go{opacity:1}
.ssli .st{font-size:11.5px;flex:none;max-width:45%;text-align:right}
.steps{margin-top:26px;background:var(--panel);border:1px solid var(--edge);border-radius:8px;padding:6px 0}
.step{display:flex;gap:11px;align-items:center;padding:9px 16px;border-bottom:1px solid var(--edge2);font-size:13px}
.step:last-child{border:0}
.step i{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--edge);display:grid;place-items:center;
 font-style:normal;font-size:11px;color:var(--txt3);flex:none}
.step.done i{background:var(--ok);border-color:var(--ok);color:#1c2418}
.step.now i{border-color:var(--blue);color:var(--blue)}
.step .n{margin-left:auto;font-size:12px;color:var(--txt3)}

/* ===== VAI Asszisztens panel — kizárólag CSS-változókból építkezik, ezért világos és
   sötét témában egyaránt olvasható. A panel a jobb szélen, fix szélességgel jelenik meg,
   1366 px-en is elfér a munkaterület mellett. ===== */
.aip{position:fixed;top:0;right:0;bottom:0;width:392px;max-width:100vw;z-index:60;
 background:var(--panel);border-left:1px solid var(--edge);display:none;
 flex-direction:column;box-shadow:-8px 0 24px #0003}
.aip.on{display:flex}
@media(max-width:1500px){.aip{width:352px}}
/* SZÉLES NÉZET. A beolvasás táblázatai (újraimport, nyílászárók, ellenőrzési sor) a 392 px-es
   sávban csak vízszintes csúszkával voltak olvashatók. A széles nézet egyetlen kattintással
   a képernyő nagy részére nyitja a panelt, és ugyanígy csukható vissza. A választás megmarad. */
.aip.wide{width:min(1180px,96vw)}
@media(max-width:1500px){.aip.wide{width:96vw}}
.aip .aih .x#aiWide{margin-left:auto}
.aip .aih .x#aiWide+.x{margin-left:0}
.aip .aih{padding:10px 12px;border-bottom:1px solid var(--edge);background:var(--panel2);flex:none}
.aip .aih .t{display:flex;align-items:center;gap:8px;font-weight:600;font-size:14px}
.aip .aih .t .ic{width:17px;height:17px;color:var(--blue);flex:none}
.aip .aih .x{margin-left:auto;cursor:pointer;color:var(--txt3);font-size:15px;padding:0 4px}
.aip .aih .x:hover{color:var(--txt)}
.aip .dis{font-size:11.5px;color:var(--lab);margin-top:4px}
.aip .aib{flex:1;overflow:auto;padding:10px 12px}
.aip .aif{flex:none;padding:8px 12px;border-top:1px solid var(--edge);background:var(--panel2)}
.aist{display:inline-flex;align-items:center;gap:5px;font-size:11px;padding:2px 8px;border-radius:10px;
 border:1px solid var(--edge);color:var(--txt2);margin-top:6px}
.aist b{font-weight:600}
.aist.live{border-color:var(--ok);color:var(--ok)}
.aist.busy{border-color:var(--blue);color:var(--blue)}
.aist.off{border-color:var(--edge2);color:var(--txt3)}
/* "AI konfigurálva" — a végpont és a kulcs rendben, de valódi modellhívás még nem futott.
   Szándékosan NEM zöld, hogy ne legyen összetéveszthető az igazolt "Élő AI" állapottal. */
.aist.cfg{border-color:var(--blue);color:var(--blue)}
.aist.err{border-color:var(--err);color:var(--err)}
.aist.warnq{border-color:var(--warn);color:var(--warn)}
/* A DEMO MÓD vizuálisan SOHA nem téveszthető össze az élő AI-val. */
.aist.demo{border-color:var(--warn);color:var(--warn);background:#e8a13b1f;font-weight:700;
 letter-spacing:.3px;text-transform:uppercase}
.aidemo{border:2px dashed var(--warn);background:#e8a13b1a;color:var(--warn);border-radius:7px;
 padding:7px 10px;font-size:12px;font-weight:600;margin-bottom:9px;line-height:1.35}
.aisec{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--txt3);
 margin:12px 0 6px;font-weight:600}
.aisec:first-child{margin-top:0}
.aif .aibtn{width:100%}
.aibtn{display:block;padding:7px 11px;border-radius:6px;border:1px solid var(--edge);
 background:var(--panel2);color:var(--txt);font:inherit;font-size:12.5px;cursor:pointer}
.aibtn:hover:not(:disabled){border-color:var(--blue)}
.aibtn:disabled{opacity:.5;cursor:progress}
.aibtn.primary{background:var(--blue);border-color:var(--blue);color:#0c1a24;font-weight:600}
body[data-lum=light] .aibtn.primary{color:#fff}
.aibtn.warn{border-color:var(--warn);color:var(--warn)}
.airow{display:flex;gap:6px;margin-top:8px}
.airow .aibtn{flex:1}
.aip textarea{width:100%;box-sizing:border-box;background:var(--bg2);color:var(--txt);
 border:1px solid var(--edge);border-radius:6px;padding:7px 9px;font:inherit;font-size:12.5px;
 resize:vertical;min-height:74px}
.aip textarea:focus{outline:0;border-color:var(--blue)}
.aic{border:1px solid var(--edge);border-left:3px solid var(--txt3);border-radius:6px;
 padding:8px 10px;margin-bottom:7px;background:var(--bg2);font-size:12.5px;line-height:1.45}
.aic.error{border-left-color:var(--err)}
.aic.warning{border-left-color:var(--warn)}
.aic.info{border-left-color:var(--blue)}
.aic.q{border-left-color:var(--lab)}
.aic.next{border-left-color:var(--ok)}
.aic b{display:block;margin-bottom:2px}
.aic .fld{display:inline-block;margin-top:4px;font-size:11px;color:var(--txt3);
 border:1px solid var(--edge);border-radius:3px;padding:0 5px}
.aisum{background:var(--bg2);border:1px solid var(--edge);border-radius:6px;padding:9px 10px;
 font-size:12.5px;line-height:1.5;margin-bottom:9px}
.aierr{border:1px solid var(--err);background:var(--errbg);color:var(--err);border-radius:6px;
 padding:9px 10px;font-size:12.5px;line-height:1.45}
.aiempty{color:var(--txt3);font-size:12.5px;line-height:1.5;padding:6px 0}
.aipv{border:1px solid var(--blue);border-radius:7px;padding:9px 10px;background:var(--bg2);font-size:12.5px}
.aipv table{width:100%;border-collapse:collapse}
.aipv td{padding:3px 2px;border-bottom:1px solid var(--edge2);vertical-align:middle}
.aipv td:first-child{color:var(--txt2);width:44%}
.aipv td.miss{color:var(--txt3);font-style:italic}
.aipv input{width:100%;box-sizing:border-box;background:var(--panel);color:var(--txt);
 border:1px solid var(--edge);border-radius:4px;padding:3px 6px;font:inherit;font-size:12.5px}
.aispin{display:inline-block;width:11px;height:11px;border:2px solid var(--blue);border-right-color:transparent;
 border-radius:50%;animation:aisp .7s linear infinite}
.aispin.lg{width:18px;height:18px;border-width:2.5px}
@keyframes aisp{to{transform:rotate(360deg)}}

/* ===== BEOLVASÓ PANEL: fájlválasztó és folyamatjelző =====
   A nyers <input type="file"> böngészőnként más és mindig idegen test a felületen; a
   szaggatott keretes felület viszont egyértelműen mondja, mit kell tenni, és fogadja a
   ráhúzott fájlt is. A natív input megmarad a DOM-ban (rejtve), mert a kisegítő
   technológiák és a mérések azt használják. */
.aidrop{display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;
 padding:13px 14px;border:1px dashed var(--edge);border-radius:9px;background:var(--panel2);
 color:var(--txt);font:inherit;text-align:left;cursor:pointer;
 transition:border-color .15s,background .15s}
.aidrop:hover,.aidrop.over{border-color:var(--blue);background:var(--bg2)}
.aidrop.over{border-style:solid}
.aidrop.off{opacity:.55;cursor:progress}
.aidrop svg{flex:0 0 auto;stroke:var(--blue)}
.aidrop .t1{font-size:13px;font-weight:600}
.aidrop .t2{font-size:11.5px;color:var(--txt3);margin-top:2px}
.aidrop input[type=file]{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}

/* A FOLYAMATJELZŐ. Pörgő karika + a fájl neve + a szakasz + százalék, alatta sáv. A
   pörgés attól is látszik, ha a százalék sokáig áll (nagy fájl egy szakaszon belül). */
.aiproc{padding:12px 14px;border:1px solid var(--edge);border-radius:9px;background:var(--panel2)}
.aiproc .txt{flex:1 1 auto;min-width:0}
.aiproc .nm{font-size:12.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.aiproc .ph{font-size:11.5px;color:var(--txt3);margin-top:2px}
.aiproc .pct{font-size:12px;color:var(--txt2);font-variant-numeric:tabular-nums;flex:0 0 auto}
.aiprogtrack{height:4px;border-radius:2px;background:var(--edge2);overflow:hidden;margin-top:9px}
.aiprogbar{height:100%;background:var(--blue);border-radius:2px;transition:width .25s}
/* Ismeretlen hosszúságú szakasz: oda-vissza futó csík, nem hazug 0%. */
.aiprogbar.ind{width:32%;animation:aiprogind 1.2s ease-in-out infinite}
@keyframes aiprogind{0%{transform:translateX(-110%)}100%{transform:translateX(320%)}}

/* A SZOLGÁLTATÓ-SOR a beolvasásnál csak lábjegyzet: a geometriát nem AI számolja. */
.aiprov.slim{padding:8px 11px;border-left-width:3px}
.aiprov.slim .mdl{font-size:10.5px;color:var(--txt3);word-break:break-all}

/* ===== Bevezetés új felhasználóknak (js/app-onboarding.js) ===== */
/* A haladásjelző a felső sávban. A `chip` alapstílusát örökli; a kék keret
   megkülönbözteti a hiba-/figyelmeztetés-jelzőktől — ez nem probléma, hanem útmutatás. */
.chip.ob{border-color:var(--blue);color:var(--blue);cursor:pointer}
.chip.ob:hover{background:#4a9fe01f}
.chip.ob.ok{border-color:var(--ok);color:var(--ok)}

/* A köszöntő párbeszéd indulási lehetőségei — nagy, jól célozható kártyák, mert ez a
   legelső interakció, amit egy új felhasználó végez. */
.obopt{display:block;width:100%;text-align:left;padding:10px 12px;border:1px solid var(--edge);
  background:var(--panel);color:var(--txt);border-radius:5px;cursor:pointer;font:inherit}
.obopt:hover{border-color:var(--blue);background:var(--panel2)}
.obopt b{display:block;font-size:13.5px;margin-bottom:2px}
.obopt span{display:block;font-size:12px;color:var(--txt3)}

/* Az „Első lépések” lista sorai. */
.obrow{display:flex;gap:10px;align-items:flex-start;padding:7px 0;border-top:1px solid var(--edge2)}
.obrow:first-child{border-top:none}
.obmark{flex:0 0 18px;text-align:center;color:var(--txt3);font-size:14px;line-height:1.4}
.obrow.done .obmark{color:var(--ok)}
.obrow.done b{color:var(--txt2);text-decoration:line-through;text-decoration-color:var(--txt3)}

/* ===== Előfizetési csomagok (js/app-billing.js) ===== */
.plgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin:10px 0}
.plcard{border:1px solid var(--edge);border-radius:6px;padding:12px;background:var(--panel);
  display:flex;flex-direction:column;gap:6px}
.plcard.cur{border-color:var(--ok)}
.plcard h5{margin:0;font-size:14px}
.plcard .pltag{font-size:11px;color:var(--txt3)}
.plcard .plprice{font-size:18px;font-weight:600;color:var(--txt)}
.plcard .plper{font-size:11.5px;color:var(--txt3);font-weight:400}
.plcard ul{margin:4px 0 0;padding-left:16px;font-size:12px;color:var(--txt2);line-height:1.6}
.plcard button{margin-top:auto}
.plsw{display:inline-flex;border:1px solid var(--edge);border-radius:5px;overflow:hidden}
.plsw button{border:none;background:var(--panel);color:var(--txt2);padding:4px 12px;cursor:pointer;font:inherit;font-size:12px}
.plsw button.on{background:var(--blue);color:#fff}
.plsave{font-size:11.5px;color:var(--ok);margin-left:8px}


/* ================= AI MAGIC =================
   A beolvasó/szerkesztő felület „komponálója”: EGY kártya, benne a parancsmező és a
   hozzá tartozó vezérlők. A korábbi elrendezésben a mező alatt ötsornyi példamondat-gomb
   állt, ami a lényeget letolta; a színek pedig be voltak égetve, ezért világos témában a
   mező élesen elütött a háttértől. Itt MINDEN szín a téma változóiból jön, tehát mind a
   négy színvilágban helyesen jelenik meg. */
.magicTitle{margin:0 0 4px;font-size:19px;font-weight:650;letter-spacing:.2px;
  display:flex;align-items:center;gap:8px;
  background:linear-gradient(100deg,var(--magic1),var(--magic2) 45%,var(--magic3));
  -webkit-background-clip:text;background-clip:text;color:transparent}
.magicIcon{font-size:15px;-webkit-text-fill-color:var(--magic2);color:var(--magic2)}
.magicCard{border:1px solid var(--edge);border-radius:12px;background:var(--panel2);
  padding:4px;transition:box-shadow .2s ease,border-color .2s ease}
.magicCard:focus-within{border-color:var(--magic2);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--magic2) 22%,transparent)}
/* A MAGASSÁG FIX. A sarokban lévő méretező fogantyú csak zavart: a mező magasságát a
   felület adja meg, és az elég is. */
.magicInput{width:100%;background:transparent;color:var(--txt);border:0;outline:none;
  padding:12px 12px 6px;font:13.5px/1.55 inherit;resize:none;box-sizing:border-box;
  height:96px}
.magicInput::placeholder{color:var(--txt3)}
.magicBar{display:flex;flex-direction:column;gap:8px;padding:6px 8px 8px}
.magicChip{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;
  border:1px solid var(--edge);background:var(--btn);color:var(--txt2);font-size:12px;
  cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}
.magicChip:hover:not([disabled]){background:var(--btnhov);color:var(--txt);border-color:var(--magic2)}
.magicChip[disabled]{opacity:.45;cursor:default}
.magicSkills{border:1px solid var(--edge);border-radius:9px;background:var(--panel);
  padding:6px;display:flex;flex-direction:column;gap:4px;max-height:260px;overflow:auto}
.magicSkillRow{display:flex;gap:6px;align-items:stretch}
.magicSkillPick{flex:1;text-align:left;padding:7px 10px;border-radius:7px;border:1px solid transparent;
  background:transparent;color:var(--txt);cursor:pointer;display:flex;flex-direction:column;gap:2px}
.magicSkillPick:hover{background:var(--pill);border-color:var(--edge)}
.magicSkillPick b{font-size:12.5px}
.magicSkillPick span{font-size:11.5px;color:var(--txt3);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.magicSkillDel{flex:none;width:30px;border-radius:7px;border:1px solid transparent;
  background:transparent;color:var(--txt3);cursor:pointer}
.magicSkillDel:hover{background:var(--pill);color:var(--err);border-color:var(--edge)}
@media(max-width:700px){.magicTitle{font-size:17px}}

/* ---- AI Magic: képcsatolás és beszélgetés-átirat ---- */
.magicCard.over{border-color:var(--magic2);border-style:dashed}
.magicAttach{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:4px 10px 6px}
.magicAttach .hint{font-size:11px;color:var(--txt3);flex:1 1 200px}
.magicThumb{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;width:84px}
.magicThumb img{width:84px;height:60px;object-fit:cover;border-radius:6px;border:1px solid var(--edge)}
.magicThumb .nm{font-size:10.5px;color:var(--txt3);max-width:84px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.magicThumb .x{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;border:1px solid var(--edge);
  background:var(--panel);color:var(--txt2);font-size:10px;line-height:16px;padding:0;cursor:pointer}
.magicThumb .x:hover{color:var(--err);border-color:var(--err)}
.magicThread{display:flex;flex-direction:column;gap:8px;margin:14px 0 4px}
.magicMsg{max-width:88%;padding:9px 12px;border-radius:12px;font-size:13px;line-height:1.5;position:relative;
  border:1px solid var(--edge);background:var(--panel2)}
.magicMsg.user{align-self:flex-end;background:color-mix(in srgb,var(--magic2) 14%,var(--panel2));border-color:color-mix(in srgb,var(--magic2) 40%,var(--edge));border-bottom-right-radius:4px}
.magicMsg.ai{align-self:flex-start;border-bottom-left-radius:4px}
.magicMsg.ai.err{border-color:var(--err)}
.magicMsg .who{display:block;font-size:11px;font-weight:600;color:var(--magic2);margin-bottom:3px}
.magicMsg .tx{white-space:pre-wrap;word-break:break-word}
.magicMsg .ims{display:flex;gap:6px;margin-top:6px}
.magicMsg .ims img{height:64px;border-radius:6px;border:1px solid var(--edge)}
.magicMsg .at{display:block;font-size:10.5px;color:var(--txt3);margin-top:4px;text-align:right}
.magicReply{display:flex;gap:8px;align-items:flex-end;margin-top:6px}
.magicReply textarea{flex:1;min-height:44px;resize:none;background:var(--field);color:var(--txt);border:1px solid var(--edge);
  border-radius:10px;padding:8px 10px;font:inherit;font-size:13px}
.magicReply textarea:focus{outline:none;border-color:var(--magic2)}
.magicThread .hint{font-size:11px;color:var(--txt3)}
.magicThread .foot{display:flex;justify-content:flex-end;margin-top:2px}
.magicThread .foot .magicChip{width:auto;flex:0 0 auto}

/* ===== ALAPRAJZ — KÉZI FELVÉTEL: CAD-eszközsáv a lapfejlécben =====
   A CAD-programok eszköztárának felépítését követi: bal szélen a szerkesztés kapcsolója,
   utána feliratozott, ikonos eszközcsoportok, jobbra az állapotkapcsolók (illesztés,
   ortho), alatta az aktív eszköz opciósávja és a parancssor. ZÁRT szerkesztésnél az
   eszközcsoportok halványak és nem kattinthatók — a rajz ilyenkor nézet, nem munkafelület. */
.cadBar{display:flex;align-items:stretch;gap:0;flex-wrap:wrap;margin:10px 0 0;padding:5px 7px;
  border:1px solid var(--edge);border-radius:10px;background:var(--panel2);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.035)}
.cadLock{display:flex;align-items:center;gap:6px;padding:0 11px;margin-right:7px;
  border:1px solid var(--edge);border-radius:8px;background:var(--field);color:var(--txt2);
  font-size:11.5px;font-weight:600;cursor:pointer;white-space:nowrap}
.cadLock:hover{color:var(--txt);border-color:var(--txt3)}
.cadLock.on{background:color-mix(in srgb,var(--ok) 20%,var(--field));
  border-color:color-mix(in srgb,var(--ok) 60%,var(--edge));color:var(--ok)}
.cadGrp{display:flex;flex-direction:column;justify-content:space-between;gap:2px;
  padding:0 7px;border-left:1px solid var(--edge)}
.cadGrpBtns{display:flex;gap:2px}
.cadGrpCap{font-size:8.5px;text-transform:uppercase;letter-spacing:.09em;color:var(--txt3);
  text-align:center;user-select:none}
.cadBtn{width:30px;height:27px;display:grid;place-items:center;padding:0;
  border:1px solid transparent;border-radius:6px;background:transparent;color:var(--txt2);cursor:pointer}
.cadBtn:hover:not(:disabled){background:var(--field);border-color:var(--edge);color:var(--txt)}
 /* AKTÍV ESZKÖZ — KÉK, a CAD-ek megszokott kijelölésszíne. A márka pirosát szándékosan
    nem használjuk rá: a piros ebben a felületen hibát és veszélyt jelöl. */
.cadBtn.on{background:color-mix(in srgb,var(--blue) 22%,transparent);
  border-color:color-mix(in srgb,var(--blue) 70%,var(--edge));color:var(--blue)}
.cadBtn:disabled{cursor:default}
.cadBar.locked .cadGrp{opacity:.32;filter:grayscale(1)}
/* A SZABAD eszközök (vonalzó, falvég mozgatása) zárt szerkesztésnél is élesek, ezért nem szürkülnek. */
.cadBar.locked .cadBtn.free{opacity:1;filter:none}
.cadBar.locked .cadGrp:has(.cadBtn.free){opacity:1;filter:none}
.cadBar.locked .cadGrp:has(.cadBtn.free) .cadBtn:disabled{opacity:.32;filter:grayscale(1)}
.cadRight{display:flex;align-items:center;gap:4px;margin-left:auto;padding-left:8px}
.cadToggle{display:flex;align-items:center;gap:5px;height:27px;padding:0 9px;
  border:1px solid var(--edge);border-radius:7px;background:transparent;color:var(--txt2);
  font-size:11px;cursor:pointer;white-space:nowrap}
.cadToggle:hover{color:var(--txt);background:var(--field)}
.cadToggle.on{background:color-mix(in srgb,var(--blue) 18%,transparent);
  border-color:color-mix(in srgb,var(--blue) 55%,var(--edge));color:var(--blue)}
/* „Minden fal” a Szerkesztés kapcsoló mellett — szabad nézeti kapcsoló, zárt szerkesztésnél is éles. */
.cadToggle.cadGhost{align-self:center;margin-right:7px;border-color:var(--edge)}
.cadToggle.cadCaret{padding:0 5px;margin-left:-5px;border-top-left-radius:0;border-bottom-left-radius:0}
.planManMenuWrap{position:relative;display:inline-flex}
.planManMenuWrap>.cadToggle:first-child{border-top-right-radius:0;border-bottom-right-radius:0}
/* Az aktív eszköz opciósávja (a CAD-ek parancssori kapcsolói, látható mezőkkel). */
.cadOpts{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:-1px 0 0;padding:5px 9px;
  border:1px solid var(--edge);border-radius:0 0 9px 9px;background:var(--panel);font-size:11.5px}
.cadOptCap{font-weight:600;color:var(--txt);font-size:11.5px}
.cadOptFld{display:flex;align-items:center;gap:4px;color:var(--txt2)}
.cadOptFld input{background:var(--field);color:var(--txt);border:1px solid var(--edge);
  border-radius:5px;padding:2px 6px;font:inherit;font-size:11.5px}
.cadOptFld input:focus{outline:none;border-color:var(--blue)}
.cadOptUnit{color:var(--txt3)}
.cadOptHint{color:var(--txt3);font-size:11px}
.cadOptBtn{padding:2px 8px;border:1px solid var(--edge);border-radius:6px;background:transparent;
  color:var(--txt2);font-size:11px;cursor:pointer}
.cadOptBtn:hover{color:var(--txt);background:var(--field)}
.cadSeg{display:inline-flex;border:1px solid var(--edge);border-radius:7px;overflow:hidden}
.cadSegBtn{padding:3px 9px;border:none;border-right:1px solid var(--edge);background:transparent;
  color:var(--txt2);font-size:11px;cursor:pointer}
.cadSegBtn:last-child{border-right:none}
.cadSegBtn:hover{background:var(--field);color:var(--txt)}
.cadSegBtn.on{background:color-mix(in srgb,var(--blue) 22%,transparent);color:var(--blue);font-weight:600}
/* Parancssor: mit vár éppen a program a következő kattintástól. */
.cadCmd{margin:5px 0 2px;font-size:11.5px;color:var(--txt3);font-variant-numeric:tabular-nums}
/* Illesztési beállítások legördülője. */
.planManMenu{position:absolute;top:calc(100% + 5px);right:0;z-index:40;min-width:210px;
  background:var(--panel);border:1px solid var(--edge);border-radius:9px;padding:9px 11px;
  box-shadow:0 10px 28px rgba(0,0,0,.4);display:flex;flex-direction:column;gap:4px}
.planManMenu .planManMenuHead{font-weight:600;font-size:11.5px;color:var(--txt2);margin-bottom:2px}
.planManMenu label{display:flex;gap:6px;align-items:center;font-size:12px;cursor:pointer}
.planManMenuRow{display:flex;gap:6px;align-items:center;font-size:12px;margin-top:4px;
  padding-top:6px;border-top:1px solid var(--edge)}
.planManMenuNote{font-size:10.5px;color:var(--txt3);margin-top:4px;line-height:1.35}
/* A nézeti csoport nagyítás-kijelzője és a jobb oldali kiegészítők. */
.cadZoom{min-width:44px;padding:0 4px;font-size:10.5px;color:var(--txt3);
  display:grid;place-items:center;font-variant-numeric:tabular-nums}
.cadReview{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 45%,var(--edge))}
.cadReview:hover{background:color-mix(in srgb,var(--warn) 14%,transparent);color:var(--warn)}
.cadCmd{display:flex;align-items:center;gap:10px}
.cadCmdSheet{margin-left:auto;color:var(--txt2);font-size:11px;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;max-width:46%}
.cadCmdSheet.warn{color:var(--warn);font-weight:600}
.planManMenuWide{min-width:250px}
.planManLegend{margin-top:6px;padding-top:6px;border-top:1px solid var(--edge);
  font-size:10.5px;color:var(--txt3);line-height:1.6}
.planManLegend s{display:inline-block;width:10px;height:10px;border-radius:2px;
  margin:0 3px 0 6px;text-decoration:none;vertical-align:-1px}
/* Szerkesztés módban a rajzterület kerete kék — látszik, hogy a kattintás felvesz. */
.planEditing{border-color:color-mix(in srgb,var(--blue) 55%,var(--edge)) !important;
  box-shadow:0 0 0 1px color-mix(in srgb,var(--blue) 22%,transparent)}

/* ===== MŰVELET-VISSZAJELZÉS (toast) =====
   A naplósor nem visszajelzés: a Napló összecsukva van a lap alján, és a felhasználó a
   művelet HELYÉT nézi, nem a lábléce sarkát. A bejelentett élmény: „sikerült, de nem kaptam
   visszajelzést, szóval szerintem meg sem valósult.” Ezért minden SIKERES, visszavonható
   művelet után rövid, magától eltűnő kártya jelenik meg zöld pipával, a művelet nevével.
   Nem modális: nem kell elkattintani, és nem fogja meg az egérmutatót (pointer-events).
   Kattintásra azonnal eltűnik. */
.toasts{position:fixed;right:18px;bottom:104px;z-index:60;display:flex;flex-direction:column;
  gap:8px;align-items:flex-end;pointer-events:none}
.toast{display:flex;gap:9px;align-items:flex-start;max-width:420px;padding:10px 14px;
  background:var(--panel2);border:1px solid var(--edge);border-left:3px solid var(--ok);
  border-radius:7px;box-shadow:0 8px 26px rgba(0,0,0,.45);color:var(--txt);font-size:13px;
  line-height:1.45;pointer-events:auto;cursor:pointer;
  animation:toastIn .16s ease-out}
.toast.out{opacity:0;transform:translateY(6px);transition:opacity .25s,transform .25s}
.toast .ti{flex:none;width:17px;height:17px;margin-top:1px}
.toast .ti svg{width:17px;height:17px;fill:none;stroke:var(--ok);stroke-width:2.4;
  stroke-linecap:round;stroke-linejoin:round}
.toast.wr{border-left-color:var(--warn)} .toast.wr .ti svg{stroke:var(--warn)}
.toast.er{border-left-color:var(--err)}  .toast.er .ti svg{stroke:var(--err)}
.toast b{font-weight:600}
@keyframes toastIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.toast{animation:none}.toast.out{transition:none}}

/* A RAJZ ALATTI INFORMÁCIÓS SÁV FEJLÉCE. Nagy terven a szűrősor, a jelmagyarázat, a
   tájolási összesítő és az ellenőrzési sor együtt a képernyő alsó harmadát foglalta el,
   miközben a tervező a RAJZOT nézi. A fejléc egy kattintással összecsukja — és csukva is
   kiírja a lényeget (nyílászárószám, tájolás állapota, ellenőrzendő tételek). */
.planInfoHead{border:1px solid transparent;transition:background .12s,border-color .12s}
.planInfoHead:hover{background:var(--btn);border-color:var(--edge)}

/* ÉSZAKJEL a rajz sarkában (planCompass). A mező a többi űrlapmezővel EGYEZŐ kinézetű —
   a natív, fehér hátterű input a sötét rajzon idegen testként világított. */
.planCompass input{background:var(--field);border:1px solid var(--edge);color:var(--fieldtx);
  border-radius:3px;font-variant-numeric:tabular-nums}
.planCompass input:focus{outline:none;border-color:var(--blue)}

/* projektfa: „Épületenként” kapcsoló bekapcsolt állapota */
#treeBldToggle.on{background:var(--on);color:var(--ontx);border-color:transparent}

/* ---------- nyári eredménynézet: nem ragadó blokkok, lenyitható bontás ---------- */
.sumBlk{margin:10px 12px;padding:10px 12px;background:var(--panel2);border:1px solid var(--edge2);
 border-radius:6px;font-size:12px;color:var(--txt2)}
.sumBlk b{color:var(--txt)}
details.sumBlk>summary{cursor:pointer;list-style-position:inside}
.sumBlk .sumH{margin-bottom:6px}
.sumSub{padding:4px 12px 0;font-size:12px;color:var(--txt2)}
.sumSub b{color:var(--txt)}
.cards.compact{padding:8px 12px 4px;gap:8px}
.cards.compact .card{min-width:150px;padding:8px 11px}
.cards.compact .card h4{font-size:11px;margin-bottom:3px}
.cards.compact .card .big{font-size:17px}
.sumTbl{font-size:12.5px;width:100%}
.sumTbl td{padding:4px 8px;vertical-align:top}
.sumTbl td.nt{white-space:normal;color:var(--txt3);font-size:11.5px}
.sumTbl td:first-child{white-space:normal}
.sumTbl tr.grp{cursor:pointer}
.sumTbl tr.grp:hover td{background:var(--rowhov)}
.sumTbl .tw{display:inline-block;width:14px;color:var(--lab)}
.sumTbl .cnt{display:inline-block;min-width:16px;padding:0 5px;border-radius:8px;background:var(--panel);
 border:1px solid var(--edge);font-size:10.5px;color:var(--txt3);text-align:center}
.sumTbl tr.det td{font-size:11.5px;color:var(--txt2);background:var(--panel)}
.sumTbl tr.det td:first-child{padding-left:30px}
.sumTbl tr.det .ind{padding-left:14px;display:inline-block}
.sumTbl tr.tot td{border-top:1px solid var(--edge)}
.sumTbl td:first-child{min-width:300px}
.sumTbl td:nth-child(2){width:90px}

/* ===== 3D-nézet (IFC) — js/app-ifc3d.js ===== */
.ifc3d{display:flex;height:100%;min-height:420px;gap:0}
.ifc3d-view{flex:1;min-width:0;position:relative;background:var(--canvasbg);border-right:1px solid var(--edge)}
.ifc3d-view.drag{outline:2px dashed var(--on);outline-offset:-6px}
.ifc3d-canvas{position:absolute;inset:0;overflow:hidden}
.ifc3d-canvas canvas{display:block;width:100%;height:100%;touch-action:none}
.ifc3d-state{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;text-align:center;color:var(--txt2)}
.ifc3d-drop{display:flex;flex-direction:column;gap:10px;align-items:center;border:1px dashed var(--edge);border-radius:8px;padding:28px 36px;max-width:440px}
.ifc3d-drop b{color:var(--txt);font-size:15px}
.ifc3d-prog{margin-top:8px;font-size:12px;color:var(--txt3)}
.ifc3d-side{width:300px;flex:none;overflow:auto;background:var(--panel);font-size:12.5px}
.ifc3d-sec{padding:9px 12px;border-bottom:1px solid var(--edge)}
.ifc3d-sec>b{display:block;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ifc3d-sub{color:var(--txt2);font-size:12px;margin-top:2px}
.ifc3d-row{display:flex;align-items:center;gap:6px;padding:2px 0;cursor:pointer}
.ifc3d-row span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ifc3d-row i{font-style:normal;color:var(--txt3);font-size:11.5px}
.ifc3d-row a,.ifc3d-link,.ifc3d-proj a{color:var(--blue);cursor:pointer;font-size:11.5px;text-decoration:none}
.ifc3d-row a:hover,.ifc3d-link:hover,.ifc3d-proj a:hover{text-decoration:underline}
.ifc3d-legend{display:flex;flex-direction:column;gap:2px;margin-top:6px;font-size:12px}
.ifc3d-legend s{display:inline-block;width:11px;height:11px;border-radius:2px;margin-right:6px;vertical-align:-1px}
.ifc3d-proj{margin:6px 0;padding:6px 8px;background:var(--panel2);border-radius:5px}
.ifc3d-proj .tbtn{margin-top:5px}
.ifc3d-props{margin-top:6px}
.ifc3d-props summary{cursor:pointer;color:var(--txt2);font-weight:600}
.ifc3d-props table{width:100%;border-collapse:collapse;margin-top:3px}
.ifc3d-props td{padding:2px 4px;border-bottom:1px solid var(--tdline);vertical-align:top;word-break:break-word}
.ifc3d-props td:first-child{color:var(--txt2);width:44%}
/* az Alaprajz 3D-panelje (ifc3dPlanPane) */
.plan3dRow{display:flex;gap:6px;align-items:stretch}
.ifc3d-pane{position:relative;flex:none;min-width:280px;display:flex;flex-direction:column;border:1px solid var(--edge);border-radius:8px;overflow:hidden;background:var(--canvasbg)}
.ifc3d-pane-grip{position:absolute;left:0;top:0;bottom:0;width:6px;cursor:ew-resize;z-index:3}
.ifc3d-pane-grip:hover{background:color-mix(in srgb,var(--on) 35%,transparent)}
.ifc3d-pane-head{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:5px 8px 5px 12px;background:var(--panel);border-bottom:1px solid var(--edge);font-size:12px}
.ifc3d-pane-head .tbtn{padding:1px 7px;font-size:11.5px}
.ifc3d-pane-title{min-width:0;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:4px;color:var(--txt2)}
.ifc3d-pane-title b{color:var(--txt)}
.ifc3d-pane-info{padding:4px 12px;font-size:12px;background:var(--panel);border-bottom:1px solid var(--edge);min-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ifc3d-pane-view{position:relative;flex:1;min-height:200px}
.ifc3d-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#ff2bd6;margin-right:6px;vertical-align:0;box-shadow:0 0 6px #ff2bd6}
/* 3D-nézet: több modell (szakágak) — js/app-ifc3d.js ifc3dModelsHtml, ifc3dPaneModelsHtml */
.ifc3d-swatch{display:inline-block;width:10px;height:10px;border-radius:2px;flex:none;border:1px solid rgba(0,0,0,.35);vertical-align:-1px;text-decoration:none}
.ifc3d-model{padding:5px 0;border-top:1px dashed var(--edge)}
.ifc3d-model:first-of-type{border-top:0}
.ifc3d-model select{font-size:11.5px;max-width:190px}
.ifc3d-model label{cursor:pointer}
.ifc3d-chips{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:3px}
.ifc3d-chip{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border-radius:9px;border:1px solid var(--edge);color:var(--txt3);cursor:pointer;font-size:11.5px;text-decoration:none;opacity:.55}
.ifc3d-chip.on{color:var(--txt);opacity:1}
.ifc3d-hits{max-height:220px;overflow:auto;margin-top:3px}
.ifc3d-hit{display:flex;gap:6px;padding:2px 4px;border-radius:4px;cursor:pointer;color:var(--txt);font-size:12px;text-decoration:none}
.ifc3d-hit:hover{background:var(--bg3,rgba(255,255,255,.06))}
.ifc3d-hit i{margin-left:auto;font-style:normal;color:var(--txt3);font-size:11px}

/* ===== 3D-KOORDINÁCIÓ: hibajegyek, nézőpontok, ütközések, eszközök (js/app-ifc3d-coord.js) ===== */
.ifc3d-side.wide{width:380px}
.bim-tabs{display:flex;flex-wrap:wrap;position:sticky;top:0;z-index:2;background:var(--panel);border-bottom:1px solid var(--edge)}
.bim-tab{flex:1 1 auto;text-align:center;padding:7px 5px;cursor:pointer;color:var(--txt2);font-size:12px;border-bottom:2px solid transparent;text-decoration:none;white-space:nowrap}
.bim-tab:hover{color:var(--txt)}
.bim-tab.on{color:var(--txt);border-bottom-color:var(--on);font-weight:600}
.bim-tab i{font-style:normal;background:var(--err);color:#fff;border-radius:8px;padding:0 5px;font-size:10.5px;margin-left:2px}
.bim-btns{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin:6px 0}
.bim-btns .tbtn{padding:3px 9px;font-size:12px}
.bim-filter{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:4px 0}
.bim-filter select,.bim-filter input{font-size:11.5px;min-width:0}
.bim-filter input{grid-column:1/3}
.bim-list{display:flex;flex-direction:column;gap:3px;margin-top:4px}
.bim-row{display:flex;gap:7px;padding:5px;border-radius:6px;cursor:pointer;border:1px solid transparent}
.bim-row:hover{background:var(--panel2)}
.bim-row.on{border-color:var(--on);background:var(--panel2)}
.bim-thumb{width:76px;height:48px;object-fit:cover;border-radius:4px;flex:none;background:var(--canvasbg);border:1px solid var(--edge)}
.bim-rowb{min-width:0;flex:1;font-size:12px}
.bim-rowb>div:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bim-st{display:inline-block;padding:0 6px;border-radius:8px;background:var(--c);color:#fff;font-size:11px;line-height:16px}
.bim-title{width:100%;font-size:14px;font-weight:600;margin:4px 0}
.bim-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px 8px}
.bim-grid label,.bim-lab{display:flex;flex-direction:column;font-size:11px;color:var(--txt3);gap:2px}
.bim-grid select,.bim-grid input{font-size:12px;min-width:0}
.bim-lab{margin-top:6px}.bim-lab textarea{font-size:12px;width:100%}
.bim-shot{width:100%;border-radius:5px;margin-top:8px;border:1px solid var(--edge);cursor:pointer}
.bim-cms{display:flex;flex-direction:column;gap:5px;margin:4px 0;max-height:280px;overflow:auto}
.bim-cm{background:var(--panel2);border-radius:5px;padding:5px 7px;font-size:12px;word-break:break-word}
.bim-pins{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:2}
.bim-pin{position:absolute;transform:translate(-50%,-100%);pointer-events:auto;cursor:pointer;min-width:20px;height:20px;padding:0 5px;border-radius:10px 10px 10px 2px;
  background:var(--c);color:#fff;font:600 11px/20px system-ui,sans-serif;text-align:center;box-shadow:0 1px 4px rgba(0,0,0,.55);border:1.5px solid #fff;user-select:none}
.bim-pin.sel{outline:2px solid #ff2bd6;outline-offset:1px;z-index:3}
.bim-pin:hover{filter:brightness(1.15);z-index:4}
.bim-tab i.n{background:var(--panel2);color:var(--txt2)}
.tools-sec{padding-top:6px;padding-bottom:6px}
.tools-head{display:block;cursor:pointer;color:var(--txt);text-decoration:none;user-select:none}
.tools-head b{display:inline}
.tools-on{font-size:10.5px;background:var(--on);color:#111;border-radius:7px;padding:0 6px;margin-left:4px}
.tools-body{margin-top:5px}
.tools-modes{display:flex;flex-wrap:wrap;gap:4px;margin:5px 0}
.tools-mode{padding:2px 8px;border:1px solid var(--edge);border-radius:10px;cursor:pointer;font-size:11.5px;color:var(--txt2);text-decoration:none}
.tools-mode:hover{color:var(--txt)}
.tools-mode.on{background:var(--on);color:#111;border-color:var(--on)}
.tools-res{display:flex;flex-direction:column;gap:2px;margin:4px 0}
.tools-mrow{display:flex;gap:6px;align-items:center;font-size:12px;background:var(--panel2);border-radius:4px;padding:2px 6px}
.tools-mrow span{flex:1}
.tools-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:2}
.tools-label{position:absolute;transform:translate(-50%,-130%);background:rgba(20,22,26,.85);color:#f0a830;border:1px solid #f0a830;border-radius:4px;padding:1px 5px;font:600 11px system-ui,sans-serif;white-space:nowrap}
.ifc3d-canvas canvas.tools-cube,.tools-cube{position:absolute;top:8px;right:8px;width:110px;height:110px;z-index:3;cursor:pointer;filter:drop-shadow(0 2px 4px rgba(0,0,0,.45))}
/* tulajdonságok: kereső, színezés, fa, mennyiség (js/app-ifc3d-props.js) */
.find-rows{display:flex;flex-direction:column;gap:3px;margin:4px 0}
.find-row{display:flex;gap:4px;align-items:center}
.find-row input,.find-row select{min-width:0;font-size:12px}
.find-row input[data-fk]{flex:1.4}.find-row input[data-fv]{flex:1}
.prof-legend{display:flex;flex-direction:column;gap:2px;margin:5px 0;max-height:300px;overflow:auto}
.prof-legend .tools-mrow span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.prof-legend .tools-mrow i{font-style:normal;color:var(--txt2);font-size:11px}
.tree3-wrap{max-height:380px;overflow:auto;font-size:12px}
.tree3{display:flex;gap:4px;align-items:center;padding:1px 0;white-space:nowrap}
.tree3>a[data-tt]{width:12px;cursor:pointer;color:var(--txt2);text-decoration:none}
.tree3 span,.tree3 b,.tree3 a[data-tel]{flex:1;overflow:hidden;text-overflow:ellipsis}
.tree3 a[data-tel]{cursor:pointer;color:var(--txt);text-decoration:none}
.tree3 a[data-tel]:hover{text-decoration:underline}
.tree3 i{font-style:normal;color:var(--txt2);font-size:11px}
.tree3.l2{padding-left:12px}.tree3.l3{padding-left:24px}.tree3.l4{padding-left:48px}
.tree3.on{background:var(--panel2);border-radius:4px}
.tree3 input.part{opacity:.55}
.qty-tab{width:100%;border-collapse:collapse;font-size:11.5px;margin:5px 0}
.qty-tab th,.qty-tab td{padding:2px 4px;border-bottom:1px solid var(--edge);text-align:right;white-space:nowrap}
.qty-tab th:first-child,.qty-tab td:first-child{text-align:left;max-width:130px;overflow:hidden;text-overflow:ellipsis}
.qty-tab tr[data-qg]{cursor:pointer}.qty-tab tr[data-qg]:hover{background:var(--panel2)}
.qty-tab tr.tot td{font-weight:700;border-bottom:none}
/* jelölés (redline) a 3D-képen (js/app-ifc3d-markup.js) */
.mk-layer{position:absolute;inset:0;z-index:5;pointer-events:none}
.mk-layer .mk-svg{position:absolute;inset:0;width:100%;height:100%}
.mk-layer.on .mk-svg{pointer-events:auto;cursor:crosshair}
.mk-layer.on{box-shadow:inset 0 0 0 3px #ff3030}
.mk-bar{position:absolute;top:8px;left:8px;display:flex;gap:3px;align-items:center;flex-wrap:wrap;justify-content:center;max-width:calc(100% - 140px);
  background:rgba(22,24,28,.94);border:1px solid var(--edge);border-radius:8px;padding:5px 7px;pointer-events:auto;box-shadow:0 4px 14px rgba(0,0,0,.4)}
.mk-bar:empty{display:none}
.mk-title{font-size:12px;color:#ff6b6b;font-weight:700;margin-right:4px}
.mk-btn{min-width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:5px;cursor:pointer;color:#e6e6e6;text-decoration:none;font-size:14px;border:1px solid transparent}
.mk-btn:hover{background:#2c3038}.mk-btn.on{border-color:#ff3030;background:#3a2226}
.mk-btn s{display:block;width:16px;background:#e6e6e6;border-radius:2px}
.mk-col{width:16px;height:16px;border-radius:50%;cursor:pointer;border:2px solid #555}
.mk-col.on{border-color:#fff;box-shadow:0 0 0 2px #ff3030}
.mk-sep{width:1px;height:18px;background:#444;margin:0 3px}
.mk-text{position:absolute;pointer-events:auto;font:700 15px system-ui,sans-serif;background:rgba(0,0,0,.6);border:1px dashed currentColor;border-radius:3px;padding:1px 4px;min-width:120px;outline:none}
.bim-mk{font-size:10.5px;color:#ff6b6b}
/* bélyegek, áttekintő, előzmények (js/app-ifc3d-coord.js) */
.bim-pin.stamp{background:var(--sc);box-shadow:0 0 0 2.5px var(--c),0 1px 4px rgba(0,0,0,.55);font-size:10px}
.bim-stamps{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin:4px 0}
.bim-stamp{display:inline-block;padding:1px 6px;border-radius:9px;background:var(--sc);color:#fff;font:700 10.5px/16px system-ui,sans-serif;cursor:pointer;text-decoration:none;border:2px solid transparent}
.bim-stamp.on{border-color:#fff;box-shadow:0 0 0 2px var(--on)}
.bim-stampedit{display:flex;flex-direction:column;gap:2px;margin:4px 0}
.bim-dcards{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;margin:6px 0}
.bim-dcard{display:flex;flex-direction:column;align-items:center;padding:5px 2px;border-radius:6px;background:var(--panel2);border-top:3px solid var(--c);cursor:pointer;text-decoration:none;color:var(--txt)}
.bim-dcard b{font-size:17px}.bim-dcard span{font-size:10.5px;color:var(--txt2)}
.bim-dbar{display:flex;height:16px;border-radius:4px;overflow:hidden;margin:4px 0}
.bim-dbar a{display:flex;align-items:center;justify-content:center;color:#fff;font-size:10.5px;font-weight:700;cursor:pointer;text-decoration:none;min-width:14px}
.bim-dlist{display:flex;flex-direction:column;gap:1px}
.bim-dlist a{display:flex;gap:6px;padding:2px 6px;border-radius:4px;background:var(--panel2);font-size:12px;cursor:pointer;color:var(--txt);text-decoration:none}
.bim-dlist a span{flex:1}.bim-dlist a i{font-style:normal;color:var(--txt2)}
.bim-dtab td a{color:var(--txt)}
.bim-hist{display:flex;flex-direction:column;gap:4px;font-size:12px;max-height:220px;overflow:auto;margin:4px 0;padding:4px 6px;background:var(--panel2);border-radius:5px}
/* nézőpont-bemutató (js/app-ifc3d-tour.js) */
.tour-cap{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:6;display:flex;gap:8px;align-items:center;background:rgba(22,24,28,.9);color:#eee;
  border:1px solid var(--edge);border-radius:18px;padding:5px 12px;font-size:13px;box-shadow:0 4px 14px rgba(0,0,0,.45)}
.tour-cap a{cursor:pointer;color:#eee;text-decoration:none;padding:0 3px;font-size:13px}.tour-cap a:hover{color:var(--on)}
.tour-rec{color:#ff4040;font-weight:700;animation:tourblink 1s steps(2) infinite}
@keyframes tourblink{50%{opacity:.25}}
/* 4D ütemezés (js/app-ifc3d-4d.js) */
.s4-tab{display:flex;flex-direction:column;gap:4px;margin:5px 0;max-height:360px;overflow:auto}
.s4-task{border-left:4px solid var(--c);background:var(--panel2);border-radius:5px;padding:3px 5px;display:flex;flex-direction:column;gap:2px}
.s4-task.on{box-shadow:0 0 0 1px var(--c)}
.s4-r{display:flex;gap:4px;align-items:center;font-size:11.5px}
.s4-r input,.s4-r select{min-width:0;font-size:11.5px;padding:1px 3px}
.s4-r input[data-s4f=name]{flex:1;font-weight:600}.s4-r input[data-s4f=link]{flex:1}
.s4-r input[type=date]{width:118px}.s4-r i{font-style:normal;color:var(--txt2);white-space:nowrap}
.s4-sim{margin-top:6px;padding-top:6px;border-top:1px solid var(--edge)}
.s4-badge{position:absolute;left:10px;bottom:12px;z-index:4;background:rgba(22,24,28,.88);color:#eee;border:1px solid var(--edge);border-radius:6px;padding:4px 9px;font-size:12.5px;pointer-events:none;max-width:60%}
/* raszter (js/app-ifc3d-grid.js) */
.grid-tags{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:2}
.grid-tag{position:absolute;transform:translate(-50%,-50%);min-width:20px;height:20px;padding:0 4px;border-radius:10px;border:1.5px solid #4aa3ff;background:rgba(14,22,34,.85);
  color:#cfe6ff;font:700 11px/17px system-ui,sans-serif;text-align:center}
/* ütközésvizsgálat (js/app-ifc3d-clash.js) */
.clash-tests{display:flex;flex-direction:column;gap:3px;margin-top:4px}
.clash-test{padding:5px 7px;border-radius:6px;cursor:pointer;border:1px solid transparent;font-size:12px}
.clash-test:hover{background:var(--panel2)}
.clash-test.on{border-color:var(--on);background:var(--panel2)}
.clash-run{margin-top:6px;font-size:12px;color:var(--txt2)}
.clash-stats{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0}
.clash-stat{padding:1px 7px;border-radius:9px;border:1px solid var(--edge);border-left:4px solid var(--c,var(--edge));font-size:11.5px;color:var(--txt2);cursor:pointer;text-decoration:none}
.clash-stat b{color:var(--txt)}
.clash-stat.on{background:var(--panel2);color:var(--txt);border-color:var(--on)}
.clash-list{display:flex;flex-direction:column;gap:2px;margin-top:4px}
.clash-grp{margin-top:6px;padding:2px 0;border-bottom:1px solid var(--edge);font-size:12px}
.clash-row{display:flex;gap:7px;align-items:flex-start;padding:4px 5px;border-radius:5px;cursor:pointer;border:1px solid transparent}
.clash-row:hover{background:var(--panel2)}
.clash-row.on{border-color:#ff2bd6;background:var(--panel2)}
.clash-no{flex:none;min-width:24px;text-align:center;border-radius:9px;background:var(--c);color:#fff;font:600 11px/18px system-ui,sans-serif;padding:0 4px}
.clash-det{margin:6px 0;padding:7px 8px;background:var(--panel2);border-radius:6px;font-size:12px;display:flex;flex-direction:column;gap:3px}
.clash-side{margin-top:8px;padding:6px 8px;border:1px solid var(--edge);border-radius:6px}
.clash-cats{display:flex;flex-wrap:wrap;gap:2px 10px;font-size:11.5px}
.clash-mark{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;cursor:pointer;min-width:18px;height:18px;padding:0 4px;border-radius:4px;
  background:var(--c);color:#fff;font:600 10.5px/18px system-ui,sans-serif;text-align:center;box-shadow:0 1px 4px rgba(0,0,0,.55);border:1.5px solid #111;user-select:none}
.clash-mark.sel{outline:2px solid #ff2bd6;outline-offset:1px;z-index:3}

/* ---------- beszélgetés a beolvasásról: Claude-szerű csevegés (js/app-import-chat.js) ---------- */
.ichat{border:1px solid var(--edge);border-radius:12px;background:var(--bg2);margin:10px 0;overflow:hidden;display:flex;flex-direction:column}
.ichead{display:flex;gap:9px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--edge);background:var(--panel2)}
.ichead .ic{width:18px;height:18px;color:var(--blue)}
.ichead b{display:block;font-size:13px}
.ichead small{display:block;font-size:11px;color:var(--txt3);line-height:1.35}
.iclist{max-height:440px;overflow:auto;padding:12px;display:flex;flex-direction:column;gap:11px}
.icmsg{display:flex;gap:9px;align-items:flex-start;max-width:100%}
.icmsg.me{justify-content:flex-end}
.icmsg.me .icb{background:var(--panel2);border:1px solid var(--edge);border-radius:14px 14px 4px 14px;max-width:82%;padding:7px 12px}
.icmsg.as .icb,.icmsg.se .icb{flex:1;min-width:0;padding:1px 0}
.icav{width:24px;height:24px;border-radius:50%;flex:none;display:grid;place-items:center;
 background:color-mix(in srgb,var(--blue) 18%,transparent);color:var(--blue)}
.icav svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.7}
.icmsg.se .icav{background:color-mix(in srgb,var(--ok) 18%,transparent);color:var(--ok)}
.icwho{font-size:11px;color:var(--txt3);font-weight:600;margin-bottom:2px}
.icwho span{font-weight:400;margin-left:4px}
.ictxt{font-size:13px;line-height:1.55;color:var(--txt);overflow-wrap:anywhere}
.icmsg.sys{justify-content:center;font-size:11.5px;color:var(--txt3);text-align:center;padding:0 24px;line-height:1.45}
.icchips{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.icchip{font-size:11.5px;padding:2px 8px;border-radius:10px;border:1px solid var(--edge);color:var(--txt2)}
.icchip.ok{border-color:color-mix(in srgb,var(--ok) 55%,var(--edge));color:var(--ok)}
.icchip.warn{border-color:var(--warn);color:var(--warn)}
.icchip.bad{border-color:var(--err);color:var(--err)}
.icesc{margin-top:8px;padding:8px 10px;border:1px solid var(--warn);border-radius:9px;font-size:12.5px;display:flex;flex-direction:column;gap:7px;line-height:1.45}
.icesc .aibtn{align-self:flex-start}
.ictyping{display:inline-flex;gap:3px;vertical-align:middle;margin-right:5px}
.ictyping i{width:6px;height:6px;border-radius:50%;background:var(--txt3);animation:ictype 1.2s infinite ease-in-out}
.ictyping i:nth-child(2){animation-delay:.15s}.ictyping i:nth-child(3){animation-delay:.3s}
@keyframes ictype{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}
.icmsg.typing .icb{font-size:12.5px;color:var(--txt3);padding-top:4px}
.icsugg{display:flex;flex-wrap:wrap;gap:6px;padding:0 12px 9px}
.icsg{font:inherit;font-size:12px;padding:4px 11px;border-radius:14px;border:1px solid var(--edge);background:var(--panel);color:var(--txt2);cursor:pointer}
.icsg:hover{border-color:var(--blue);color:var(--txt)}
.icin{display:flex;gap:8px;align-items:flex-end;padding:9px 12px;border-top:1px solid var(--edge);background:var(--panel)}
.ichat .icin textarea{flex:1;width:auto;min-width:0;min-height:40px;max-height:160px;resize:vertical;background:var(--bg2);color:var(--txt);
 border:1px solid var(--edge);border-radius:10px;padding:8px 10px;font:inherit;font-size:13px;box-sizing:border-box}
.ichat .icin textarea:focus{outline:0;border-color:var(--blue)}
.icsend{font:inherit;font-size:12.5px;font-weight:600;padding:9px 15px;border-radius:10px;border:1px solid var(--blue);background:var(--blue);color:#0c1a24;cursor:pointer;flex:none}
.icsend:disabled{opacity:.5;cursor:default}
body[data-lum=light] .icsend{color:#fff}
