:root {
  --bg:#0a0a0f; --bg2:#10101a; --gold:#c9a84c; --gold2:#e8c97a;
  --silver:#8a9bb5; --text:#d4cfc8; --dim:#5a5560; --border:#1e1e2e;
  --glow:rgba(201,168,76,0.12); --red:#FF4444; --green:#00FF88; --blue:#4488FF;
  --saffron:#FF9933; --saffron-dim:rgba(255,153,51,0.12);
}
*{box-sizing:border-box;margin:0;padding:0;}
body{background:var(--bg);color:var(--text);font-family:'Crimson Pro',Georgia,serif;min-height:100vh;}
body::before{content:'';position:fixed;inset:0;
  background-image:
    radial-gradient(1px 1px at 8% 15%,rgba(255,255,255,.35) 0%,transparent 100%),
    radial-gradient(1px 1px at 25% 72%,rgba(255,255,255,.25) 0%,transparent 100%),
    radial-gradient(1px 1px at 48% 38%,rgba(255,255,255,.40) 0%,transparent 100%),
    radial-gradient(1px 1px at 72% 12%,rgba(255,255,255,.28) 0%,transparent 100%),
    radial-gradient(1px 1px at 88% 58%,rgba(255,255,255,.32) 0%,transparent 100%),
    radial-gradient(1px 1px at 35% 45%,rgba(255,255,255,.22) 0%,transparent 100%),
    radial-gradient(1px 1px at 78% 80%,rgba(255,255,255,.20) 0%,transparent 100%);
  pointer-events:none;z-index:0;}
.wrap{position:relative;z-index:1;max-width:1500px;margin:0 auto;padding:36px 20px;}

header{text-align:center;margin-bottom:36px;}
header h1{font-family:'Cinzel',serif;font-size:clamp(1.6rem,3.5vw,2.8rem);font-weight:700;color:var(--gold);letter-spacing:.18em;text-transform:uppercase;text-shadow:0 0 50px rgba(201,168,76,.35);}

/* Mode toggle */
.mode-toggle{display:flex;justify-content:center;gap:0;margin-bottom:28px;}
.mode-btn{
  padding:10px 28px;background:transparent;
  border:1px solid var(--border);color:var(--dim);
  font-family:'Cinzel',serif;font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;
  cursor:pointer;transition:all .25s;
}
.mode-btn:first-child{border-right:none;}
.mode-btn.active-w{background:rgba(201,168,76,.1);border-color:var(--gold);color:var(--gold);}
.mode-btn.active-j{background:var(--saffron-dim);border-color:var(--saffron);color:var(--saffron);}

/* Form */
.form-card{background:var(--bg2);border:1px solid var(--border);padding:36px;margin-bottom:40px;box-shadow:0 0 60px rgba(0,0,0,.5);position:relative;}
.form-card::before{content:'✦  ✦  ✦';position:absolute;top:-11px;left:50%;transform:translateX(-50%);background:var(--bg2);padding:0 14px;color:var(--gold);font-size:.6rem;letter-spacing:.4em;}
.form-title{font-family:'Cinzel',serif;font-size:.7rem;letter-spacing:.25em;text-transform:uppercase;color:var(--gold);margin-bottom:26px;text-align:center;}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(175px,1fr));gap:16px;margin-bottom:26px;}
.field{display:flex;flex-direction:column;gap:7px;}
.field label{font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.2em;text-transform:uppercase;color:var(--silver);}
.field input,
.field select{background:rgba(255,255,255,.03);border:1px solid var(--border);color:var(--text);font-family:'Crimson Pro',serif;font-size:1rem;padding:9px 12px;outline:none;transition:border-color .25s,box-shadow .25s;width:100%;box-sizing:border-box;}
.field input:focus,
.field select:focus{border-color:var(--gold);box-shadow:0 0 20px var(--glow);}
.field input::placeholder{color:var(--dim);}
.btn{display:block;width:100%;padding:14px;background:transparent;border:1px solid var(--gold);color:var(--gold);font-family:'Cinzel',serif;font-size:.76rem;letter-spacing:.3em;text-transform:uppercase;cursor:pointer;transition:all .25s;position:relative;overflow:hidden;}
.btn::before{content:'';position:absolute;inset:0;background:var(--gold);transform:translateX(-100%);transition:transform .25s;z-index:0;}
.btn:hover::before{transform:translateX(0);}
.btn:hover{color:#0a0a0f;}
.btn span{position:relative;z-index:1;}
.btn:disabled{opacity:.4;cursor:not-allowed;}
.btn:disabled::before{display:none;}

/* Кнопки действий формы в одну линию: Построить карту / Прогноз / Рассчитать время */
.action-buttons{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;align-items:stretch;}
.action-buttons .btn{margin:0;flex:1 1 0;min-width:140px;padding:12px 6px;font-size:.6rem;letter-spacing:.12em;}

/* Сплит-кнопка прогноза: [дата] [окно ±N лет] [запуск прогноза] */
.forecast-split{display:flex;flex:1.5 1 0;min-width:260px;border:1px solid var(--saffron);box-sizing:border-box;}
.forecast-split .forecast-date{
  flex:0 0 38%;width:auto;margin:0;text-align:center;
  background:transparent;border:none;border-right:1px solid var(--saffron);
  color:var(--saffron);font-family:ui-monospace,'Crimson Pro',monospace;
  font-size:.82rem;border-radius:0;
}
.forecast-split .forecast-date:focus{border-right-color:var(--saffron);background:rgba(216,160,74,.06);}
.forecast-split .forecast-window{
  flex:0 0 18%;width:auto;margin:0;text-align:center;
  background:transparent;border:none;border-right:1px solid var(--saffron);
  color:var(--saffron);font-family:ui-monospace,'Crimson Pro',monospace;
  font-size:.82rem;border-radius:0;
  -moz-appearance:textfield;appearance:textfield;
}
.forecast-split .forecast-window::-webkit-outer-spin-button,
.forecast-split .forecast-window::-webkit-inner-spin-button{
  -webkit-appearance:none;margin:0;
}
.forecast-split .forecast-window:focus{background:rgba(216,160,74,.06);}
.forecast-split button{
  flex:1;padding:12px 4px;background:transparent;border:none;color:var(--saffron);
  font-family:'Cinzel',serif;font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;
  cursor:pointer;transition:all .2s;
}
.forecast-split button:hover{background:var(--saffron);color:#0a0a0f;}

/* Кнопка «Рассчитать время» — зелёный акцент ректификации */
#rectify-btn{border-color:#7DBF6E;color:#7DBF6E;}
#rectify-btn::before{background:#7DBF6E;}
#rectify-btn:hover{color:#0a0a0f;}   /* ID-правило перебивало .btn:hover — текст оставался зелёным */

/* Плашка выбранной локации (под секцией координат, выше кнопок) */
.selected-location{
  margin-top:8px;padding:7px 10px;font-family:'Crimson Pro',serif;font-size:.85rem;
  color:var(--gold);background:rgba(201,168,76,.07);border-left:2px solid var(--gold);
}
#city-picker-slot:empty{display:none;}

/* Кнопка «Запустить расчёт» внутри пузыря интервьюера */
.rect-run-btn{
  margin-top:8px;padding:7px 16px;background:transparent;border:1px solid #7DBF6E;
  color:#7DBF6E;font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.18em;
  text-transform:uppercase;cursor:pointer;transition:all .2s;
}
.rect-run-btn:hover{background:#7DBF6E;color:#0a0a0f;}

/* ── Режимы отображения #result (natal / forecast / rectification) ── */
/* Секция транзитов видна только в режиме прогноза */
#forecast-charts{display:none;}
#result.view-forecast #forecast-charts{display:block;}
/* В прогнозе «Карта планет» (натальное колесо) скрыта — место занимают
   бивил + дирекции + возвраты в #forecast-charts. */
#result.view-forecast #ch-chart,
#result.view-forecast #cb-chart{display:none;}
/* Ректификация — только чат: прячем карты, аспекты, театр, мандалу, транзиты, шапку */
#result.view-rectification .chart-name,
#result.view-rectification #ch-chart,
#result.view-rectification #cb-chart,
#result.view-rectification #ch-aspects,
#result.view-rectification #cb-aspects,
#result.view-rectification #theatre-wrap,
#result.view-rectification #mandala-wrap,
#result.view-rectification #forecast-charts{display:none;}
/* «Интерпретировать карту» в режиме ректификации перебила бы интервью
   натальным стримом в тот же чат — прячем (натальное чтение — через кнопки формы). */
#result.view-rectification #interpret-btn{display:none;}

/* Транзитная секция: подписи, бивил по центру, две карты в ряд */
#forecast-charts .fc-cap{font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.15em;text-transform:uppercase;color:var(--saffron);text-align:center;margin:6px 0;}
#forecast-charts .fc-section-title{font-family:'Cinzel',serif;font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);border-bottom:1px solid var(--border);margin:18px 0 10px;padding-bottom:5px;}
/* Сворачиваемые секции дирекций (<details open>): summary как заголовок +
   указатель-треугольник; раскрыты по умолчанию (атрибут open в HTML). */
#forecast-charts .fc-dir-section>summary.fc-section-title{cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;}
#forecast-charts .fc-dir-section>summary.fc-section-title::-webkit-details-marker{display:none;}
#forecast-charts .fc-dir-section>summary.fc-section-title::before{content:"▾";font-size:.8rem;letter-spacing:0;color:var(--dim);transition:transform .15s;}
#forecast-charts .fc-dir-section:not([open])>summary.fc-section-title::before{transform:rotate(-90deg);}
/* Бивил — фиксированный квадрат 600×600 (как viewBox SVG), по центру. */
.fc-biwheel{max-width:600px;margin:0 auto 14px;}
.fc-pair{display:flex;gap:14px;flex-wrap:wrap;}
.fc-pair-col{flex:1 1 0;min-width:260px;}
/* Дирекции: ключи (Птолемей | Naibod) в строку; под каждой картой — её перфекты */
.fc-dir-row{display:flex;gap:14px;flex-wrap:wrap;}
.fc-dir-col{flex:1 1 0;min-width:280px;}
.fc-perf-tbl{margin-top:6px;}
.fc-perf-row{display:flex;justify-content:space-between;gap:10px;font-size:.82rem;padding:3px 6px;border-bottom:1px dotted var(--border);}
.fc-perf-row[data-age]{cursor:pointer;transition:background .12s;}
/* Direction-перфекты реагируют на КЛИК (toggle подсветки + cross-ring линии),
   hover не рисует ничего → еле заметный фон, только намёк что строка кликабельна.
   Транзит-перфекты ниже — наоборот, hover реально показывает аспект-линию,
   там фон ярче. */
.fc-dir-col .fc-perf-row[data-age]:hover{background:rgba(201,168,76,.05);}
.fc-transit-perfs .fc-perf-row[data-tr-lines]:hover{background:rgba(201,168,76,.14);}
.fc-perf-row[data-age].active{background:rgba(201,168,76,.28);box-shadow:inset 0 0 0 1px var(--gold);}
.fc-perf-cfg{font-size:1.02rem;letter-spacing:.08em;cursor:help;}
.fc-perf-date{color:var(--gold);font-variant-numeric:tabular-nums;white-space:nowrap;}
.fc-perf-event{font-size:1.02rem;cursor:help;flex-shrink:0;line-height:1;display:inline-flex;gap:3px;flex-wrap:wrap;justify-content:center;}
.fc-perf-event-i{cursor:help;}
/* Транзит-перфекты: ±30 дней даёт сотни строк (Луна доминирует) — кладём
   в скроллируемый бокс. Тегированные подсвечиваем тёплой полосой слева. */
.fc-transit-perfs{max-height:340px;overflow-y:auto;border:1px solid var(--border);border-radius:6px;padding:4px 0;margin-top:8px;}
.fc-perf-row.fc-perf-tagged{border-left:3px solid var(--gold);padding-left:8px;}
.fc-perf-empty{color:var(--muted,#888);justify-content:center;border-bottom:none;font-style:italic;}

#loading{display:none;text-align:center;padding:50px;}
.spinner{width:36px;height:36px;border:1px solid var(--border);border-top-color:var(--gold);border-radius:50%;animation:spin 1.4s linear infinite;margin:0 auto 16px;}
@keyframes spin{to{transform:rotate(360deg);}}
.loading-text{font-family:'Cinzel',serif;font-size:.72rem;letter-spacing:.25em;color:var(--gold);text-transform:uppercase;}
#error-box{display:none;background:rgba(255,68,68,.08);border:1px solid rgba(255,68,68,.25);color:#ff9999;padding:13px 17px;margin-bottom:18px;font-size:.95rem;}

#result{display:none;}
.chart-name{font-family:'Cinzel',serif;text-align:center;margin-bottom:20px;}
.chart-name .cname{font-size:1.4rem;color:var(--gold2);letter-spacing:.1em;}
.chart-name .cinfo{font-size:.8rem;color:var(--dim);margin-top:4px;letter-spacing:.05em;}
/* Аянамша badge */
.ayanamsha-badge{display:inline-block;margin-top:6px;padding:3px 10px;border:1px solid rgba(255,153,51,.3);color:var(--saffron);font-size:.72rem;font-family:'Cinzel',serif;letter-spacing:.1em;}

.main-grid{
  display:grid;
  grid-template-columns:1fr;
  gap:0;
}
@media(max-width:960px){.main-grid{grid-template-columns:1fr;}}

/* SVG карта — колонка 1, строка 1 */
.chart-wrap{background:var(--bg2);border:1px solid var(--border);padding:14px;box-shadow:0 0 50px rgba(0,0,0,.4);grid-column:1;grid-row:1;}
.chart-wrap svg{width:100%;height:auto;display:block;}

/* Расширенный блок аспектов (двухосевая модель) — занимает место бывшей
   сводной таблицы. В sidebar аспектов больше нет, они только здесь. */
.aspects-panel{background:var(--bg2);border:1px solid var(--border);padding:22px;}
.aspects-panel .asp-row{font-size:.95rem;padding:6px 0;}
.aspects-panel .asp-group-title{font-size:.7rem;}
.aspects-panel .asp-group-desc{font-size:.78rem;margin-bottom:14px;}

/* Боковая колонка — строки 1+2 */
/* Коллапсируемые блоки */
.collapsible-header{display:flex;align-items:center;gap:10px;cursor:pointer;padding:9px 16px;border:1px solid var(--border);background:var(--bg2);user-select:none;grid-column:1/-1;transition:background .2s;}
.collapsible-header:hover{background:rgba(255,255,255,.03);}
.ch-title{font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--dim);}
.ch-arrow{font-size:.65rem;color:var(--dim);transition:transform .25s;margin-left:auto;}
.collapsible-header.open .ch-arrow{transform:rotate(90deg);}
.collapsible-body{overflow:hidden;max-height:0;transition:max-height .35s cubic-bezier(.4,0,.2,1);grid-column:1/-1;}
.collapsible-body.open{max-height:3000px;}
/* Блок прогноза содержит до 5 колёс — потолок 3000px обрезал низ (возвраты
   уезжали под «Аспекты»). Как у театра — без потолка по высоте. */
#cb-forecast.open{max-height:none;}
.inner-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,0.9fr);gap:16px;}

.sidebar{display:flex;flex-direction:column;gap:16px;grid-column:2;grid-row:1/3;}

/* В джйотише — планеты и аспекты рядом, арудха под ними */
.sidebar.jyotish-mode {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: auto auto;
}
.sidebar.jyotish-mode #panel-planets-wrap { grid-column: 1; }
.sidebar.jyotish-mode .panel:nth-child(2)  { grid-column: 2; }
.sidebar.jyotish-mode #panel-arudha        { grid-column: 1 / -1; }

/* Чат — вся ширина, строка 3 */
.chat-area{grid-column:1;background:var(--bg2);border:1px solid var(--border);display:flex;flex-direction:column;height:480px;}
.panel-title{font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);margin-bottom:13px;padding-bottom:8px;border-bottom:1px solid var(--border);}
.panel-title.saffron{color:var(--saffron);}

/* Планеты */
.planet-row{display:grid;grid-template-columns:24px 1fr auto;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid rgba(255,255,255,.03);}
.planet-row:last-child{border-bottom:none;}
.p-sym{font-size:1.15rem;text-align:center;line-height:1;}
.p-name{font-size:.9rem;}
.p-pos{font-family:'Cinzel',serif;font-size:.68rem;color:var(--silver);text-align:right;}
.p-nak{font-size:.72rem;color:var(--saffron);grid-column:2/-1;padding-bottom:2px;opacity:.85;}

/* Дома: однострочная разметка с фиксированной колонкой под лейбл (As/IC/.../AVx). */
.house-row{display:grid;grid-template-columns:38px minmax(0,auto) 1fr 22px;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid rgba(255,255,255,.03);}
.house-row:last-child{border-bottom:none;}
.house-row .h-lbl{font-family:'Cinzel',serif;font-size:.78rem;color:var(--saffron);letter-spacing:.05em;}
.house-row .h-pos{font-family:'Cinzel',serif;font-size:.7rem;color:var(--silver);text-align:right;}
.house-row .h-lord{font-size:1rem;text-align:center;line-height:1;opacity:.85;}
.house-row .cusp-bodies{display:flex;flex-wrap:wrap;gap:4px 8px;justify-content:flex-start;}
.house-row .cusp-body{font-size:.72rem;color:var(--saffron);white-space:nowrap;opacity:.9;}
.houses-unavailable{color:var(--dim);font-size:.78rem;font-style:italic;padding:8px 0;line-height:1.5;}

/* Разделитель между обычными планетами и чувствительными точками. */
.planet-divider{height:1px;background:rgba(255,255,255,.08);margin:8px 0 6px;}
.extra-row{font-style:italic;}

/* Аспекты — SVG hover/tap */
.planet-grp{cursor:pointer;transition:opacity .18s ease;}
.asp-line{transition:opacity .18s ease;pointer-events:none;}

/* Аспекты */
.asp-row{display:flex;align-items:center;gap:6px;padding:4px 0;font-size:.85rem;border-bottom:1px solid rgba(255,255,255,.03);flex-wrap:wrap;}
.asp-row:last-child{border-bottom:none;}
.asp-row.harmonic{opacity:.72;}
.asp-pl{white-space:nowrap;}
.asp-sym{font-family:serif;}
.asp-label{color:var(--dim);font-size:.73rem;font-style:italic;}
.asp-orb{color:var(--dim);font-size:.7rem;font-variant-numeric:tabular-nums;}
.asp-notes{color:var(--silver);font-size:.78rem;font-style:italic;flex:1 1 100%;padding-left:2px;margin-top:2px;}
.asp-amp{color:var(--gold);font-size:.68rem;letter-spacing:.02em;flex:1 1 100%;padding-left:2px;}
.asp-phase{color:var(--saffron);font-size:.65rem;font-style:italic;letter-spacing:.02em;}
.asp-tr{color:var(--dim);font-size:.68rem;font-style:italic;margin-left:3px;}
.asp-apply{color:#7ec699;font-weight:600;}
.asp-sep{color:var(--silver);font-weight:600;}
.p-retro{color:#d08a5b;font-family:serif;font-size:.82rem;}
.asp-row.asp-tail{opacity:.6;}
.asp-tail-wrap{margin-top:4px;}
.asp-more{display:block;width:100%;background:transparent;border:none;color:var(--dim);font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;padding:6px 0;margin-top:4px;cursor:pointer;transition:color .15s;border-top:1px dashed rgba(255,255,255,.08);}
.asp-more:hover{color:var(--gold);}
.asp-group-title{font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;margin:10px 0 4px;padding-bottom:4px;border-bottom:1px solid rgba(255,255,255,.06);}
.asp-group-title:first-child{margin-top:0;}
.asp-group-active{color:var(--gold);}
.asp-group-latent{color:var(--silver);}
.asp-empty{color:var(--dim);font-size:.78rem;padding:4px 0;}
.asp-group-desc{color:var(--dim);font-size:.72rem;line-height:1.5;margin:2px 0 8px;font-style:italic;}

/* Театр карты — карточки 12 домов */
.theatre-panel{padding:4px 14px 8px;}
.th-house{padding:9px 0;border-bottom:1px solid var(--border);}
.th-house:last-of-type{border-bottom:none;}
.th-house-head{display:flex;align-items:baseline;gap:10px;margin-bottom:4px;}
.th-hnum{font-family:'Cinzel',serif;color:var(--gold2);font-weight:600;font-size:.82rem;min-width:46px;}
.th-hsphere{color:var(--gold);font-size:.72rem;letter-spacing:.04em;}
.th-row{font-size:.85rem;color:var(--text);padding:1px 0;}
.th-key{color:var(--dim);font-size:.74rem;}
.th-pl{font-size:.84rem;color:var(--text);padding:1px 0 1px 16px;}
.th-pl.th-guest{font-style:italic;opacity:.85;}
.th-pg{color:var(--gold2);}
.th-hr{color:var(--gold2);}
.th-dim{color:var(--silver);font-size:.8rem;}
.th-interpret-btn{display:block;width:100%;margin:0 0 12px;padding:8px;background:var(--bg);border:1px solid var(--gold);color:var(--gold2);font-family:'Cinzel',serif;font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;border-radius:4px;transition:background .2s;}
.th-interpret-btn:hover{background:var(--glow);}
.th-scene-btn{display:inline-block;margin-top:8px;font-size:.66rem;color:var(--silver);background:transparent;border:1px solid var(--border);border-radius:4px;padding:2px 9px;cursor:pointer;white-space:nowrap;}
.th-scene-btn:hover{border-color:var(--gold);color:var(--gold2);}
.th-reading{flex:1 1 100%;margin-top:6px;padding:7px 8px 3px;font-size:.86rem;line-height:1.55;color:var(--text);border-top:1px solid rgba(255,255,255,.06);}
.th-reading:empty{display:none;border:none;margin:0;padding:0;}
/* Театр растёт под стрим-ответы — снимаем клип max-height у collapsible (без скролл-бокса). */
#cb-theatre.open{max-height:none;}

/* Мифо-схема (SVG): диспозитор + аспекты + силы */
.th-house{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start;}
.th-house-body{flex:1;min-width:0;}
.th-scheme{flex:0 0 212px;}
.th-scheme-svg{width:100%;height:auto;}
@media(max-width:760px){.th-house{flex-direction:column;}.th-scheme{flex-basis:auto;width:100%;max-width:280px;}}
.sch-node rect{stroke-width:1;}
.sch-node text{font-size:10px;fill:var(--text);}
.sch-sub{font-size:7.5px;fill:var(--silver);}
.sch-director rect{fill:rgba(201,168,76,.16);stroke:var(--gold);}
.sch-actor rect{fill:rgba(90,180,170,.16);stroke:#5ab4aa;}
.sch-host rect{fill:rgba(150,110,200,.18);stroke:#9a72c8;}
.sch-asp rect{fill:rgba(255,255,255,.05);stroke:var(--border);}
.sch-edge{stroke-width:1.3;fill:none;}
.sch-rule{stroke:var(--gold);color:var(--gold);}
.sch-disp{stroke:#9a72c8;color:#9a72c8;}
.sch-union{stroke:#d4b25a;color:#d4b25a;}      /* слияние — унисон */
.sch-axis{stroke:#5a86c8;color:#5a86c8;}       /* полюса оси — октава */
.sch-ally{stroke:#5a9e6a;color:#5a9e6a;}       /* природный союз — квинта */
.sch-tension{stroke:#d2604a;color:#d2604a;}    /* несущее напряжение — кварта */
.sch-soft{stroke:#5ab4aa;color:#5ab4aa;}       /* мягкая приязнь — терция */
.sch-hidaff{stroke:#9a8fd0;color:#9a8fd0;}     /* скрытое родство — антис */
.sch-hidten{stroke:#a8485c;color:#a8485c;}     /* скрытое противодействие — контр-антис */
.sch-neutral{stroke:var(--silver);color:var(--silver);}
.sch-elabel{font-size:7px;fill:var(--dim);}
.sch-zone{font-size:7.5px;fill:var(--dim);letter-spacing:.05em;}
.sch-force-list{font-size:8px;fill:var(--silver);}
.th-chart-scheme{margin:0 0 12px;border:1px solid var(--border);border-radius:4px;padding:4px 9px;}
.th-chart-scheme summary{font-size:.7rem;color:var(--gold);cursor:pointer;letter-spacing:.04em;}
.ch-scheme-svg{width:100%;max-width:420px;height:auto;margin:6px auto 0;display:block;}
.sch-disp-note{font-size:.78rem;color:var(--silver);padding:4px 2px;}
.sch-legend{font-size:10px;fill:var(--dim);}
.sch-disp-t{fill:#9a72c8;}.sch-union-t{fill:#d4b25a;}.sch-axis-t{fill:#5a86c8;}.sch-ally-t{fill:#5a9e6a;}
.sch-tension-t{fill:#d2604a;}.sch-soft-t{fill:#5ab4aa;}.sch-hidaff-t{fill:#9a8fd0;}.sch-hidten-t{fill:#a8485c;}
.chat-reset-btn{background:transparent;border:1px solid var(--border);color:var(--silver);border-radius:6px;min-width:32px;cursor:pointer;font-size:1rem;line-height:1.4;}
.chat-reset-btn:hover{border-color:var(--gold);color:var(--gold2);}

/* Арудха */
.arudha-row{display:grid;grid-template-columns:42px 1fr auto;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid rgba(255,255,255,.03);}
.arudha-row:last-child{border-bottom:none;}
.al-label{font-family:'Cinzel',serif;font-size:.72rem;color:var(--saffron);font-weight:600;}
.al-sign{font-size:.9rem;}
.al-lord{font-size:.72rem;color:var(--dim);text-align:right;}

/* Чат */
.chat-area{grid-column:1;background:var(--bg2);border:1px solid var(--border);display:flex;flex-direction:column;height:480px;}
/* Тулбар чата: персоны + кнопки */
.chat-toolbar{padding:8px 10px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:6px;flex-shrink:0;flex-wrap:wrap;box-sizing:border-box;width:100%;overflow:visible;}
.chat-interpret-btn{margin-left:auto;flex-shrink:0;padding:6px 15px;background:transparent;border:1px solid var(--gold);color:var(--gold);font-family:'Cinzel',serif;font-size:.58rem;letter-spacing:.18em;text-transform:uppercase;cursor:pointer;transition:all .2s;}
.chat-interpret-btn:hover{background:var(--gold);color:#0a0a0f;}
.chat-interpret-btn:disabled{opacity:.35;cursor:not-allowed;pointer-events:none;}
.persona-btn:disabled,.persona-btn.locked{opacity:.35;cursor:not-allowed;pointer-events:none;}

.forecast-date{
  background:rgba(255,255,255,.03);border:1px solid var(--border);
  color:var(--text);font-family:'Crimson Pro',serif;font-size:.88rem;
  padding:4px 8px;outline:none;transition:border-color .2s;width:130px;
}
.forecast-date:focus{border-color:var(--saffron);}

/* Селектор персоны */
.persona-selector{display:flex;align-items:center;gap:4px;flex-shrink:1;min-width:0;}
.persona-btn{
  width:32px;height:32px;border-radius:50%;border:1.5px solid var(--border);
  background:transparent;cursor:pointer;font-size:1.1rem;
  display:flex;align-items:center;justify-content:center;
  transition:all .2s;position:relative;
}
.persona-btn:hover{border-color:var(--silver);transform:scale(1.1);}
.persona-btn.active{border-color:var(--gold);background:rgba(201,168,76,.15);box-shadow:0 0 10px rgba(201,168,76,.25);}
.persona-btn[data-persona="grok"].active{border-color:#a0522d;background:rgba(160,82,45,.15);box-shadow:0 0 10px rgba(160,82,45,.25);}
.persona-btn[data-persona="vera"].active{border-color:var(--silver);background:rgba(138,155,181,.15);box-shadow:0 0 10px rgba(138,155,181,.2);}
.persona-btn[data-persona="lira"].active{border-color:#c084fc;background:rgba(192,132,252,.12);box-shadow:0 0 10px rgba(192,132,252,.2);}

/* Юнгианский overlay-toggle: рядом с персонами, тот же размер что у persona-btn */
.jung-toggle{
  width:32px;height:32px;border-radius:50%;border:1.5px solid var(--border);
  background:transparent;cursor:pointer;font-family:'Cinzel',serif;font-weight:600;
  font-size:1rem;color:var(--silver);
  display:flex;align-items:center;justify-content:center;
  transition:all .2s;flex-shrink:0;
}
.jung-toggle:hover{border-color:#c084fc;transform:scale(1.1);}
.jung-toggle.active{border-color:#c084fc;background:rgba(192,132,252,.15);
  box-shadow:0 0 10px rgba(192,132,252,.25);color:#e9d5ff;}
.jung-toggle.locked{cursor:default;pointer-events:none;}
#persona-tooltip {
  position:fixed;
  background:#1a1a2e;border:1px solid var(--border);
  padding:5px 11px;font-family:'Cinzel',serif;font-size:.58rem;letter-spacing:.1em;
  white-space:nowrap;color:var(--silver);pointer-events:none;
  z-index:9999;border-radius:2px;display:none;opacity:1;
}
#persona-tooltip.tip-show {
  display:block;opacity:1;
}
#persona-tooltip.tip-mobile {
  display:block;
  animation: tipFadeOut 2s forwards;
}
@keyframes tipFadeOut {
  0%,70% { opacity:1; }
  100%   { opacity:0; }
}

/* ── RAG-переключатель ─────────────────────────────────────────────────────── */
.rag-toggle {
  display: flex;
  align-items: center;
  gap: 5px;
  margin-left: auto;
  flex-shrink: 0;
  position: relative;
}

/* Кнопка-иконка */
.rag-btn {
  width: 32px; height: 32px;
  border-radius: 50%;
  border: 1.5px solid var(--border);
  background: transparent;
  cursor: pointer;
  font-size: 1rem;
  display: flex; align-items: center; justify-content: center;
  transition: all .2s;
  position: relative;
  color: var(--dim);
}
.rag-btn:hover { border-color: var(--silver); }
.rag-btn.rag-active {
  border-color: #7c6fcd;
  background: rgba(124,111,205,.15);
  box-shadow: 0 0 10px rgba(124,111,205,.25);
  color: #b0a4f0;
}
/* Маленький значок топика */
.rag-btn .rag-dot {
  position: absolute;
  bottom: 0; right: 0;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: #7c6fcd;
  border: 1.5px solid var(--bg2);
  display: none;
}
.rag-btn.rag-active .rag-dot { display: block; }

/* Выпадающее меню RAG */
.rag-menu {
  position: absolute;
  bottom: calc(100% + 8px);
  right: 0;
  min-width: 210px;
  background: #14141f;
  border: 1px solid #2a2a3e;
  box-shadow: 0 -8px 30px rgba(0,0,0,.6);
  z-index: 999;
  display: none;
  flex-direction: column;
  overflow: hidden;
}
.rag-menu.open { display: flex; }

.rag-menu-header {
  padding: 8px 12px 6px;
  font-family: 'Cinzel', serif;
  font-size: .56rem;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--dim);
  border-bottom: 1px solid var(--border);
}

.rag-option {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 8px 12px;
  cursor: pointer;
  border: none;
  background: transparent;
  text-align: left;
  color: var(--text);
  font-family: 'Crimson Pro', serif;
  font-size: .95rem;
  transition: background .15s;
  white-space: nowrap;
}
.rag-option:hover { background: rgba(255,255,255,.04); }
.rag-option.selected { color: #b0a4f0; }

/* Кастомный чекбокс */
.rag-check {
  width: 14px; height: 14px;
  border: 1.5px solid var(--dim);
  border-radius: 2px;
  flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  transition: all .15s;
}
.rag-option.selected .rag-check {
  border-color: #7c6fcd;
  background: #7c6fcd;
}
.rag-option.selected .rag-check::after {
  content: '✓';
  font-size: .65rem;
  color: white;
  line-height: 1;
}

/* «Вся библиотека (профиль)» — отделена тонкой линией от списка топиков */
.rag-option-all:not(:last-child) {
  border-bottom: 1px solid var(--border);
  margin-bottom: 2px;
}

/* Счётчик чанков */
.rag-count {
  margin-left: auto;
  font-size: .7rem;
  color: var(--dim);
  font-family: 'Cinzel', serif;
}

/* Статус RAG недоступен */
.rag-unavailable {
  padding: 9px 12px;
  font-size: .82rem;
  color: var(--dim);
  font-style: italic;
}

/* Выбор профиля */
.rag-profiles {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 7px 10px 6px;
  border-bottom: 1px solid var(--border);
}
.rag-profile-btn {
  padding: 3px 9px;
  border: 1px solid var(--dim);
  border-radius: 10px;
  background: transparent;
  color: var(--dim);
  font-family: 'Cinzel', serif;
  font-size: .52rem;
  letter-spacing: .08em;
  text-transform: uppercase;
  cursor: pointer;
  transition: all .15s;
}
.rag-profile-btn:hover { border-color: var(--silver); color: var(--silver); }
.rag-profile-btn.active {
  border-color: #b0a4f0;
  color: #b0a4f0;
  background: rgba(176,164,240,.1);
}
/* Кнопка «Все» — отдельный цвет чтобы отличать от одиночного профиля */
.rag-profile-btn.rag-profile-all.active {
  border-color: var(--saffron);
  color: var(--saffron);
  background: var(--saffron-dim);
}

/* Полупрозрачная подложка позади листа (только на мобильных, иначе она
   перекрывает desktop-dropdown из-за stacking context у .wrap) */
.rag-backdrop {
  position: fixed; inset: 0;
  background: rgba(0,0,0,.45);
  z-index: 998;
  display: none;
}

@media (max-width: 768px),
       (orientation: landscape) and (max-height: 500px) {
  .rag-menu { right: -4px; min-width: 190px; }
}

@media (max-width: 600px) {
  .rag-backdrop.open { display: block; }
  /* Меню → bottom-sheet на узких экранах */
  .rag-menu {
    position: fixed;
    top: auto; left: 0; right: 0; bottom: 0;
    min-width: 0; max-height: 75vh;
    border-radius: 14px 14px 0 0;
    box-shadow: 0 -12px 40px rgba(0,0,0,.7);
    overflow-y: auto;
    /* Поднимаем меню над бэкдропом — у listа фиксированная позиция,
       поэтому stacking context .wrap уже не релевантен. */
    z-index: 999;
  }
  .rag-menu.open { animation: rag-slide-up .18s ease-out; }
  @keyframes rag-slide-up {
    from { transform: translateY(100%); }
    to   { transform: translateY(0); }
  }
  /* «Дёргалка» сверху листа */
  .rag-menu::before {
    content: '';
    display: block;
    width: 36px; height: 4px;
    margin: 8px auto 4px;
    border-radius: 2px;
    background: var(--border);
  }

  /* Более крупные тап-таргеты */
  .rag-option   { padding: 12px 16px; font-size: 1rem; }
  .rag-check    { width: 18px; height: 18px; }
  .rag-profiles { padding: 10px 12px; gap: 6px; }
  .rag-profile-btn {
    padding: 8px 12px;
    font-size: .62rem;
    min-height: 36px;
  }
}
.chat-messages{flex:1;overflow-y:auto;padding:18px;display:flex;flex-direction:column;gap:14px;scroll-behavior:smooth;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;}
.chat-messages::-webkit-scrollbar{width:4px;}
.chat-messages::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px;}
.msg{display:flex;gap:9px;}
.msg.user{flex-direction:row-reverse;}
.msg-bubble{max-width:76%;padding:10px 14px;font-size:1rem;line-height:1.65;}
.msg.assistant .msg-bubble{background:rgba(201,168,76,.06);border:1px solid rgba(201,168,76,.15);color:var(--text);}
.msg.user .msg-bubble{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text);}
.msg-avatar-col{display:flex;flex-direction:column;align-items:center;gap:6px;flex-shrink:0;margin-top:2px;}
.msg-avatar{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.95rem;border:1px solid var(--border);}
.msg.assistant .msg-avatar{background:rgba(201,168,76,.1);color:var(--gold);}
.msg.user .msg-avatar{background:rgba(255,255,255,.05);color:var(--silver);}
.msg-copy-btn{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border);color:var(--dim);cursor:pointer;padding:0;transition:color .15s,border-color .15s,background .15s;}
.msg-copy-btn:hover{color:var(--gold);border-color:var(--gold);background:rgba(201,168,76,.08);}
.msg-copy-btn.copied{color:var(--gold);border-color:var(--gold);background:rgba(201,168,76,.18);}
.msg-copy-btn.copied svg{display:none;}
.msg-copy-btn.copied::after{content:"✓";font-size:.9rem;line-height:1;}
.msg-copy-btn.failed{color:#c66;border-color:#c66;}
.msg-copy-btn[hidden]{display:none;}
.typing-dot{display:inline-block;width:6px;height:6px;background:var(--gold);border-radius:50%;margin:0 2px;animation:blink 1.2s infinite;}
.typing-dot:nth-child(2){animation-delay:.2s;}
.typing-dot:nth-child(3){animation-delay:.4s;}
@keyframes blink{0%,80%,100%{opacity:.2;}40%{opacity:1;}}
.chat-input-row{padding:12px 14px;border-top:1px solid var(--border);display:flex;gap:9px;}
.chat-input{flex:1;background:rgba(255,255,255,.03);border:1px solid var(--border);color:var(--text);font-family:'Crimson Pro',serif;font-size:1rem;padding:9px 13px;outline:none;resize:none;max-height:120px;transition:border-color .2s;}
.chat-input:focus{border-color:var(--gold);}
.chat-input::placeholder{color:var(--dim);}
.send-btn{padding:0 18px;background:transparent;border:1px solid var(--gold);color:var(--gold);font-family:'Cinzel',serif;font-size:.72rem;letter-spacing:.14em;cursor:pointer;transition:all .2s;white-space:nowrap;}
.send-btn:hover{background:var(--gold);color:#0a0a0f;}
.send-btn:disabled{opacity:.35;cursor:not-allowed;}
.think-toggle-label{display:flex;align-items:center;gap:5px;color:var(--dim);font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;user-select:none;white-space:nowrap;}
.think-toggle-label input{accent-color:var(--gold);cursor:pointer;}
.think-toggle-label:hover{color:var(--silver);}

/* Карта выбора места */
.location-section{margin-top:16px;border-top:1px solid var(--border);padding-top:16px;}
.location-toggle{display:flex;align-items:center;gap:10px;cursor:pointer;user-select:none;margin-bottom:12px;}
.location-toggle-label{font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--silver);}
.location-toggle-arrow{color:var(--gold);font-size:.8rem;transition:transform .2s;}
.location-toggle-arrow.open{transform:rotate(90deg);}
.location-fields{display:none;gap:14px;flex-direction:column;}
.location-fields.open{display:flex;}
.coord-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
#leaflet-map{width:100%;height:320px;border:1px solid var(--border);clip-path:inset(0 0 20px 0);}
.map-hint{font-size:.75rem;color:var(--dim);font-style:italic;margin-top:10px;margin-bottom:4px;}
.coord-display{font-family:'Cinzel',serif;font-size:.72rem;color:var(--gold);margin-top:4px;min-height:1.2em;}

/* дублирующие стили таблицы убраны — определены выше */

/* ── Мобильный чат ───────────────────────────────────────────────────────────
   Триггер: либо узкая ширина (≤768px), либо короткий landscape
   (≤500px по высоте при горизонтальной ориентации). Современные телефоны
   в landscape имеют ширину 800-900px и не попадают в max-width:768; без
   второй ветки правил карта остаётся слева, sidebar справа — это вся
   суть жалобы. Короткий landscape = телефон/мини-планшет горизонтально. */
@media (max-width: 768px),
       (orientation: landscape) and (max-height: 500px) {

  /* Шапка компактнее */
  header { margin-bottom: 20px; }
  header h1 { font-size: 1.4rem; letter-spacing: .1em; }

  .wrap { padding: 16px 12px; }

  /* Форма — одна колонка */
  .form-grid { grid-template-columns: 1fr; gap: 12px; }
  .form-card { padding: 20px 16px; }

  /* Результаты — одна колонка, всё складывается вертикально */
  .main-grid {
    grid-template-columns: 1fr;
    grid-template-rows: none;
  }

  /* SVG карта — первая */
  .chart-wrap { grid-column: 1; grid-row: auto; }

  /* Внутренний грид карты — одна колонка на мобиле */
  .inner-grid { grid-template-columns: 1fr; }

  /* Боковая панель: все блоки (планеты / дома / аспекты / арудха) —
     друг под другом одной колонкой. На мобиле боковая раскладка
     слишком тесная для двух столбцов, особенно с длинными строками
     аспектов; вертикально читаемее. */
  .sidebar,
  .sidebar.jyotish-mode {
    grid-column: 1;
    grid-row: auto;
    display: flex;
    flex-direction: column;
    gap: 12px;
  }

  /* Аспекты — компактнее на мобиле */
  .aspects-panel { padding: 14px; }
  .aspects-panel .asp-row { font-size: .85rem; }
  .aspects-panel .asp-group-desc { font-size: .72rem; }

  /* Fix 4: запретить горизонтальный скролл */
  html, body { overflow-x: hidden; max-width: 100%; }
  .wrap { overflow-x: hidden; max-width: 100%; }

  /* Чат — фиксированный внизу, на всю ширину */
  .chat-area {
    grid-column: 1;
    grid-row: auto;
    position: static;
    height: auto;
    max-height: none;
    border: 1px solid var(--border);
    border-radius: 0;
    box-shadow: none;
    transform: none;
    margin: 0;
    width: 100%;
    box-sizing: border-box;
    overflow: hidden;
  }

  .chat-messages {
    max-height: 60vh;
    padding: 12px;
    gap: 10px;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    touch-action: pan-y;
  }

  .msg-bubble {
    max-width: 88%;
    font-size: .95rem;
    line-height: 1.6;
    padding: 10px 13px;
  }

  .msg-avatar { width: 26px; height: 26px; font-size: .8rem; }
  .msg-copy-btn { width: 24px; height: 24px; }

  .chat-input-row {
    padding: 10px 12px;
    padding-bottom: max(10px, env(safe-area-inset-bottom));
    gap: 8px;
    background: var(--bg2);
  }

  .chat-input {
    font-size: 16px;
    padding: 11px 13px;
    border-radius: 22px;
    min-height: 44px;
  }

  .send-btn {
    width: 44px; height: 44px;
    padding: 0;
    border-radius: 50%;
    font-size: 1.3rem;
    letter-spacing: 0;
    display: flex; align-items: center; justify-content: center;
    flex-shrink: 0;
    /* текст кнопки заменяется на стрелку через JS на мобиле */
  }

  .chat-interpret-btn {
    padding: 5px 10px;
    font-size: .55rem;
  }

  /* Отступ снизу = высота свёрнутой шапки чата; точное значение проставляется через JS */
  #result { padding-bottom: 0; }

  /* Планеты крупнее на мобиле — размер применяется в drawChart().
     Знаки наоборот мельче: пояс знаков сжат до 52px (см. drawChart),
     поэтому шрифт глифов знаков уменьшен пропорционально (14px). */
  #chart-svg .sign-sym { font-size: 14px; }
  #chart-svg .planet-sym { font-size: 16.5px; }
}

/* ─── Карта констелляции (виншоттари-мандала) ───────────────────────────── */
/* Контейнер скрыт по умолчанию; state.js: updateMandalaVisibility ставит
   класс mandala-visible когда mode=jyotish + tab=forecast + есть timeline. */
#mandala-wrap{display:none;grid-column:1/-1;}
#mandala-wrap.mandala-visible{display:block;}
.mandala-inner{
  background:var(--bg2);border:1px solid var(--border);
  padding:24px;display:flex;flex-direction:column;align-items:center;gap:14px;
}
#mandala-svg-container{width:100%;max-width:680px;}
.mandala-svg{width:100%;height:auto;display:block;}
.mandala-sector{cursor:default;transition:filter .2s;}
.mandala-sector-current{filter:drop-shadow(0 0 14px rgba(255,176,46,.85));}
/* Текст внутри секторов — насыщенный тёмно-зелёный без обводки. Палитра
   планет специально пастельная (см. mandala.js: MANDALA_PLANET_COLORS),
   чтобы тёмный текст хорошо читался на всех секторах. */
.mandala-glyph{font-size:22px;font-weight:700;fill:#1c2e1f;}
.mandala-name{font-family:'Cinzel',serif;font-size:13px;font-weight:600;fill:#1c2e1f;letter-spacing:.06em;text-transform:uppercase;}
.mandala-yrs{font-size:11px;fill:#33503a;font-family:'Cinzel',serif;font-weight:500;}
.mandala-marker-line{stroke:var(--saffron);stroke-width:3;}
.mandala-marker-tri{fill:var(--saffron);}
.mandala-birth-line{stroke:#5fc09a;stroke-width:2.5;stroke-dasharray:5 4;}
.mandala-birth-dot{fill:#5fc09a;stroke:#0a0a0f;stroke-width:1.5;}
/* Центральная картинка (router txt2img/img2img). Плавный fade при появлении
   и при img2img-refine — вторая <image> поверх первой кросс-фейдом ~600мс. */
#mandala-center-image,
#mandala-center-image-next{transition:opacity .6s ease-in-out;}

/* Подписи секторов на время поворота: имя планеты и годы прячем (опасно
   читать вращающийся текст), глиф остаётся и едет вместе с сектором. */
.mandala-name,.mandala-yrs{transition:opacity .35s ease-in-out;}
.mandala-rotating .mandala-name,
.mandala-rotating .mandala-yrs{opacity:0;}

/* Tooltip с диапазоном лет для тач-устройств (на десктопе работает нативный
   SVG <title>). Создаётся и показывается из mandala.js по touchend. */
#mandala-tooltip{
  position:fixed;display:none;z-index:9999;pointer-events:none;
  background:#1a1a2e;border:1px solid var(--border);border-radius:4px;
  padding:7px 12px;max-width:240px;
  font-family:'Cinzel',serif;font-size:.72rem;line-height:1.45;
  letter-spacing:.04em;color:var(--silver);text-align:center;
  box-shadow:0 4px 14px rgba(0,0,0,.5);
}
#mandala-tooltip.tip-mobile{display:block;animation:tipFadeOut 2.5s forwards;}

/* Вопросы интервьюера ректификации: сохраняем переносы строк (LLM пишет
   построчный список) — иначе всё схлопывается в одну строку. */
.rect-question{white-space:pre-wrap;line-height:1.5;}

/* Панель post-result обсуждения (Q&A по готовому результату). */
.rect-discuss-panel{margin-top:10px;padding-top:8px;border-top:1px solid rgba(255,255,255,.12);}
.rect-discuss-hint{color:var(--dim);font-size:.8em;margin-bottom:5px;}
.rect-discuss-row{display:flex;gap:6px;}
.rect-discuss-row input{flex:1;padding:6px 8px;border-radius:6px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.05);color:inherit;}
.rect-discuss-row button{padding:6px 14px;cursor:pointer;border-radius:6px;border:1px solid var(--saffron);background:transparent;color:var(--saffron);}
.rect-discuss-row button:hover{background:var(--saffron);color:#1a1a1a;}

/* Панель «Небесные тела» (bodies.js): группы с шапкой-селектором + галочки тел */
.bodies-panel{padding:6px 10px 10px;font-size:13px;}
.bodies-group{margin-bottom:8px;}
.bodies-group-head{display:flex;align-items:center;gap:6px;font-weight:600;color:var(--gold);cursor:pointer;padding:3px 0;}
.bodies-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(135px,1fr));gap:2px 10px;padding:2px 0 4px 16px;}
.bodies-item{display:flex;align-items:center;gap:5px;cursor:pointer;white-space:nowrap;}
.bodies-sym{font-family:serif;min-width:1.6em;text-align:center;}
.bodies-item input,.bodies-group-head input{cursor:pointer;}

/* ─── Аутентификация: слот в шапке + модалка ───────────────────────────── */
header{position:relative;}
.auth-slot{position:absolute;top:0;right:0;display:flex;align-items:center;gap:10px;
  font-family:'Cinzel',serif;font-size:.62rem;letter-spacing:.12em;}
.auth-email{color:var(--silver);text-transform:lowercase;letter-spacing:.04em;font-size:.7rem;}
.auth-link{background:transparent;border:1px solid var(--border);color:var(--gold);cursor:pointer;
  font-family:'Cinzel',serif;font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;
  padding:6px 12px;transition:all .25s;}
.auth-link:hover{border-color:var(--gold);background:rgba(201,168,76,.1);}

.auth-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.7);backdrop-filter:blur(2px);}
.auth-modal.hidden{display:none;}
.auth-card{position:relative;background:var(--bg2);border:1px solid var(--border);
  padding:34px 30px;width:min(360px,90vw);box-shadow:0 0 60px rgba(0,0,0,.6);}
.auth-card::before{content:'✦';position:absolute;top:-11px;left:50%;transform:translateX(-50%);
  background:var(--bg2);padding:0 12px;color:var(--gold);font-size:.7rem;}
.auth-close{position:absolute;top:8px;right:12px;background:none;border:none;color:var(--dim);
  font-size:1.4rem;line-height:1;cursor:pointer;transition:color .2s;}
.auth-close:hover{color:var(--gold);}
.auth-title{font-family:'Cinzel',serif;font-size:.8rem;letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold);text-align:center;margin:0 0 22px;}
/* PRIVATE_MODE: отдельная страница входа (login.html) — карта по центру экрана. */
.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;}
.login-title{font-family:'Cinzel',serif;font-size:1.1rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--gold);text-align:center;margin:0 0 24px;}
.auth-fields{display:flex;flex-direction:column;gap:14px;}
.auth-fields .field input{background:rgba(255,255,255,.03);border:1px solid var(--border);color:var(--text);
  font-family:'Crimson Pro',serif;font-size:1rem;padding:9px 12px;outline:none;width:100%;box-sizing:border-box;
  transition:border-color .25s,box-shadow .25s;}
.auth-fields .field input:focus{border-color:var(--gold);box-shadow:0 0 20px var(--glow);}
.auth-error{min-height:1.1em;color:#c66;font-size:.85rem;}
.auth-submit{margin-top:4px;}

/* Гейт чата: приглашение войти на месте скрытого чата (аноним). */
.chat-gate{display:flex;align-items:center;justify-content:center;min-height:200px;
  border:1px dashed var(--border);margin-top:18px;}
.chat-gate-card{display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;padding:30px;}
.chat-gate-mark{color:var(--gold);font-size:1.4rem;}
.chat-gate-text{margin:0;color:var(--dim);font-family:'Crimson Pro',serif;font-style:italic;font-size:1.05rem;}

/* ─── Личный кабинет /me ───────────────────────────────────────────────── */
.me-back{display:inline-block;margin:4px 0 18px;}
.me-section{margin:0 0 34px;}
.me-h{font-family:'Cinzel',serif;font-size:.9rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--gold);border-bottom:1px solid var(--border);padding-bottom:8px;margin:0 0 14px;}
.me-hint{margin:-6px 0 14px;color:var(--dim);font-style:italic;font-size:.95rem;}

/* ─── Админка /admin ───────────────────────────────────────────────────── */
.admin-create{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:8px;}
.admin-create input{flex:1;min-width:160px;background:rgba(255,255,255,.03);border:1px solid var(--border);
  color:var(--text);font-family:'Crimson Pro',serif;font-size:1rem;padding:9px 12px;outline:none;
  box-sizing:border-box;transition:border-color .25s,box-shadow .25s;}
.admin-create input:focus{border-color:var(--gold);box-shadow:0 0 20px var(--glow);}
.me-empty{color:var(--dim);font-style:italic;}
.charts-list{display:flex;flex-direction:column;gap:10px;}
.chart-card{display:flex;align-items:center;gap:14px;padding:14px 16px;
  background:var(--bg2);border:1px solid var(--border);transition:border-color .25s;}
.chart-card:hover{border-color:var(--gold);}
.chart-card-info{flex:1;min-width:0;}
.chart-card-name{color:var(--text);font-size:1.05rem;}
.chart-card-sum{color:var(--dim);font-size:.85rem;margin-top:2px;}
.chart-card-del{color:#c66;border-color:rgba(204,102,102,.4);}
.chart-card-del:hover{border-color:#c66;background:rgba(204,102,102,.1);}
