/* ============================================================
   COMPONENTS — переиспользуемые кирпичики (по DESIGN.md §6).
   Требует tokens.css + base.css.
   ============================================================ */

/* === Карточка (базовая поверхность) === */
.card{background:var(--surface);border:1px solid var(--card-border);border-radius:var(--r-card);box-shadow:var(--shadow-soft)}
.card:hover{box-shadow:var(--shadow)} /* ховер — только тень, без сдвига */
.card .card-pad{padding:24px}

/* === Чипы === */
.chips{display:flex;gap:10px;flex-wrap:wrap}
.chip{font-size:.875rem;font-weight:700;padding:7px 16px;border-radius:var(--r-pill);color:var(--ink);text-decoration:none}
.chip.on{background:var(--orange);color:#fff}
.chip.yellow{background:var(--p-yellow);color:var(--d-yellow)}
.chip.lilac{background:var(--p-lilac);color:var(--d-lilac)}
.chip.mint{background:var(--p-mint);color:var(--d-mint)}
.chip.sage{background:var(--p-sage);color:var(--d-sage)}
.chip.outline{background:transparent;color:var(--muted);border:1.5px solid var(--hairline)}

/* === Пастельные плитки категорий === */
.cats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}
.cat{border-radius:var(--r-card);padding:24px;min-height:128px;display:flex;flex-direction:column;justify-content:space-between;text-decoration:none}
.cat .ci{width:46px;height:46px;border-radius:13px;background:rgba(255,255,255,.55);display:flex;align-items:center;justify-content:center}
[data-theme="dark"] .cat .ci{background:rgba(255,255,255,.10)}
.cat h3{font-size:1.125rem;font-weight:700;color:var(--ink);margin:0}
.cat p{font-size:.8125rem;color:var(--ink);opacity:.72;font-weight:500;margin:0}
.cat.yellow{background:var(--p-yellow)}.cat.yellow .ci{color:var(--d-yellow)}
.cat.lilac{background:var(--p-lilac)}.cat.lilac .ci{color:var(--d-lilac)}
.cat.mint{background:var(--p-mint)}.cat.mint .ci{color:var(--d-mint)}
.cat.sage{background:var(--p-sage)}.cat.sage .ci{color:var(--d-sage)}

/* === Таблица-зебра (дивы) === */
.tbl{border:1px solid var(--hairline);border-radius:18px;overflow:hidden;box-shadow:var(--shadow-soft)}
.tbl .thead,.tbl .trow{display:grid;grid-template-columns:1.4fr 1fr 1fr}
.tbl .thead{background:var(--ink);color:var(--canvas)}
.tbl .thead>div{padding:15px 18px;font-size:.875rem;font-weight:700}
.tbl .trow>div{padding:15px 18px;font-size:.9375rem;color:var(--ink);border-top:1px solid var(--hairline)}
.tbl .trow:nth-child(odd){background:var(--surface)}
.tbl .trow:nth-child(even){background:var(--band)}
.tbl-scroll{overflow-x:auto}
.tbl-scroll .tbl{min-width:560px}

/* === Текстовый блок (глубина тенью, БЕЗ border-left) === */
.textblock{background:var(--surface);border:1px solid var(--card-border);border-radius:22px;padding:34px 36px;position:relative;
  box-shadow:0 1px 0 var(--hairline),0 22px 48px -26px rgba(40,30,15,.40),0 8px 18px -14px rgba(40,30,15,.22)}
[data-theme="dark"] .textblock{box-shadow:0 1px 0 rgba(255,255,255,.04),0 26px 52px -24px rgba(0,0,0,.7)}

/* === Состояния === */
.states{display:flex;gap:12px;flex-wrap:wrap}
.state{border-radius:14px;padding:14px 18px;font-weight:700;font-size:.9375rem;display:flex;align-items:center;gap:10px}
.state.ok{background:var(--p-sage);color:var(--d-sage)}
.state.no{background:var(--state-no-bg);color:var(--state-no-fg)}
.state.hint{background:var(--p-lilac);color:var(--d-lilac)}

/* === Аккордеон (details) === */
.el-acc{background:var(--surface);border:1px solid var(--hairline);border-radius:16px;overflow:hidden}
.el-acc summary{cursor:pointer;padding:16px 20px;font-weight:700;color:var(--ink);list-style:none;display:flex;align-items:center;gap:10px}
.el-acc summary::-webkit-details-marker{display:none}
.el-acc summary::after{content:"";width:10px;height:10px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);margin-left:auto;transition:transform .15s}
.el-acc[open] summary::after{transform:rotate(-135deg)}
.el-acc .acc-body{padding:0 20px 18px;color:var(--body)}

/* === Кнопка озвучки === */
.el-snd{border:0;background:transparent;color:var(--orange);cursor:pointer;padding:4px 6px;vertical-align:middle;line-height:1;border-radius:8px}
.el-snd:hover{color:var(--orange-deep)}
.el-snd:focus{background:transparent}
.el-snd svg{display:inline-block;vertical-align:middle;width:18px;height:18px;flex-shrink:0}
.el-snd.playing{color:var(--orange-deep)}

/* === Кнопка произношения (крупная, в карточке слова) === */
.speak{width:44px;height:44px;border-radius:50%;background:var(--orange);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s;box-shadow:0 8px 18px -8px rgba(249,94,8,.6);flex:0 0 44px;color:#fff}
.speak:hover{background:var(--orange-deep)}
.speak:focus{background:var(--orange)}
.speak svg{width:24px;height:24px;flex-shrink:0}

/* === Слот РСЯ (пустой до подключения рекламы) === */
.el-ad{margin:26px 0}
.el-ad:empty{display:none}

/* === Поиск слова (инпут — как .hform input референса) === */
.el-search{display:flex;gap:12px;position:relative}
.el-search .inp{height:56px;font-size:1rem;background:var(--surface);border:1.5px solid var(--field-border);border-radius:14px;padding:0 18px}
.el-search .inp:focus{border-color:var(--orange)}
.el-search .btn{height:56px;flex:0 0 auto;white-space:nowrap}
/* Подсказки: две строки — слово с подсветкой ввода, ниже перевод */
.el-suggest{position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--surface);border:1px solid var(--hairline);
  border-radius:16px;box-shadow:var(--shadow);z-index:30;overflow:hidden;display:none}
.el-suggest.open{display:block}
.el-suggest a{display:flex;flex-direction:column;gap:2px;padding:11px 18px;text-decoration:none}
.el-suggest a:hover,.el-suggest a.sel{background:var(--band)}
.el-suggest .w{font-weight:700;color:var(--ink);font-size:1.0625rem}
.el-suggest .tr{color:var(--muted);font-size:.9375rem}
.el-suggest mark{background:var(--p-yellow);color:var(--d-yellow);border-radius:4px;padding:0 2px}

/* --- Кнопка «Наверх» (site-wide): появляется при скролле, плавная прокрутка (theme.js).
   Нейтральная (не призыв к действию): фон surface, тёмный шеврон; safe-area для PWA (§5). --- */
.el-to-top{position:fixed;right:calc(1.25rem + env(safe-area-inset-right));bottom:calc(1.25rem + env(safe-area-inset-bottom));
  width:2.75rem;height:2.75rem;display:flex;align-items:center;justify-content:center;
  background:var(--surface);color:var(--ink);border:1px solid var(--hairline);border-radius:50%;cursor:pointer;z-index:60;
  box-shadow:var(--shadow);opacity:0;transform:translateY(10px);pointer-events:none;
  transition:opacity .25s,transform .25s,background .18s,border-color .18s}
/* Явные размеры SVG обязательны: без них flex-контейнер схлопывает иконку почти
   до 0 (баг Chrome для replaced-элементов) — тот же фикс, что у .burger в base.css */
.el-to-top svg{width:20px;height:20px;min-width:20px;min-height:20px;flex-shrink:0;display:block}
.el-to-top.is-visible{opacity:1;transform:none;pointer-events:auto}
.el-to-top:hover,.el-to-top:focus{background:var(--band);border-color:var(--field-border);color:var(--ink)}
.el-to-top:focus-visible{outline:2px solid var(--orange);outline-offset:2px}
@media (max-width:560px){.el-to-top{right:calc(1rem + env(safe-area-inset-right));bottom:calc(1rem + env(safe-area-inset-bottom))}}

/* === Баннер согласия на cookies (рендер — inc/hooks.php, логика — theme.js) ===
   Нижняя панель на поверхности карточки: не перекрывает контент надолго, уходит
   анимацией вниз. safe-area — чтобы на телефонах с home-indicator не прилипало
   к самому краю (§5 CLAUDE.md). */
.el-cookie{position:fixed;left:0;right:0;bottom:0;z-index:60;background:var(--surface);
  border-top:1px solid var(--hairline);box-shadow:0 -18px 40px -28px rgba(40,30,15,.45);
  padding:16px 24px calc(16px + env(safe-area-inset-bottom));
  transform:translateY(100%);transition:transform .26s ease}
.el-cookie.is-visible{transform:translateY(0)}
.el-cookie-in{max-width:1080px;margin:0 auto;display:flex;align-items:center;gap:20px}
.el-cookie-tx{margin:0;font-size:.9375rem;line-height:1.5;color:var(--body)}
.el-cookie-tx a{color:var(--orange-deep);text-decoration:underline}
.el-cookie-ok{flex:0 0 auto;padding:12px 28px}
/* Кнопка «наверх» не должна налезать на баннер, пока он открыт. */
.el-cookie-open .el-to-top{bottom:calc(7.5rem + env(safe-area-inset-bottom))}
@media (max-width:640px){
  .el-cookie{padding:14px 16px calc(14px + env(safe-area-inset-bottom))}
  .el-cookie-in{flex-direction:column;align-items:stretch;gap:12px}
  .el-cookie-ok{width:100%}
  .el-cookie-tx{font-size:.875rem}
}
@media (prefers-reduced-motion:reduce){.el-cookie{transition:none}}

/* === Карточки витрин: слова (.el-wcard) и статьи (.el-acard) ===
   Общие кирпичики: используются на хабе словаря, хабе статей и главной,
   поэтому лежат здесь, а не в постраничном slova.css. */
/* Витрины: популярные (12) и недавние (8) — карточки с картинкой */
.el-wgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px}
.el-wgrid.cols4{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
.el-wcard{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--card-border);
  border-radius:var(--r-card);box-shadow:var(--shadow-soft);overflow:hidden;text-decoration:none;transition:box-shadow .15s}
.el-wcard:hover{box-shadow:var(--shadow)}
.el-wcard img{width:100%;height:110px;object-fit:cover}
.el-wcard .ph{display:flex;align-items:center;justify-content:center;height:110px;background:var(--p-mint);
  color:var(--d-mint);font-size:2rem;font-weight:800}
.el-wcard .w{font-weight:800;color:var(--ink);font-size:1.0625rem;padding:10px 14px 0}
.el-wcard .t{color:var(--muted);font-size:.875rem;padding:0 14px 12px}

/* Хаб статей (page-articles.php) — карточки записей */
.el-agrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:18px}
.el-acard{display:flex;flex-direction:column;gap:8px;background:var(--surface);border:1px solid var(--card-border);
  border-radius:var(--r-card);box-shadow:var(--shadow-soft);padding:22px;text-decoration:none;transition:box-shadow .15s}
.el-acard:hover{box-shadow:var(--shadow)}
.el-acard .d{font-size:.8125rem;color:var(--muted)}
.el-acard .t{font-size:1.1875rem;font-weight:700;color:var(--ink);line-height:1.35}
.el-acard .more{margin-top:auto;color:var(--orange-deep);font-weight:700;font-size:.9375rem}

/* Карточка статьи с изображением (миниатюра поста, размер el-card) */
.el-acard.has-img{padding:0;overflow:hidden}
.el-acard.has-img .img{display:block;aspect-ratio:2/1;background:var(--band);overflow:hidden}
.el-acard.has-img .img img{width:100%;height:100%;object-fit:cover;display:block}
.el-acard.has-img .body{display:flex;flex-direction:column;gap:8px;padding:18px 22px 22px;flex:1}
.el-acard .x{font-size:.9375rem;color:var(--body);line-height:1.5}
.el-acard .chip{display:inline-block;margin-left:10px;padding:2px 10px;border-radius:var(--r-pill);
  background:var(--p-mint);color:var(--d-mint);font-size:.75rem;font-weight:700}

@media(max-width:560px){
  .el-wgrid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}
}

/* Фразы: витрина без картинок (у страниц-фраз их нет) — пастельные плашки,
   тон чередуется по кругу, пара фон/текст из токенов читается в обеих темах. */
.el-phrases{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}
.el-phrase{display:flex;flex-direction:column;gap:6px;padding:20px 22px;border-radius:var(--r-card);
  text-decoration:none;border:1px solid transparent;transition:box-shadow .15s,border-color .15s}
.el-phrase:hover{box-shadow:var(--shadow-soft)}
.el-phrase .p{font-size:1.125rem;font-weight:800;line-height:1.3}
.el-phrase .t{font-size:.9375rem;line-height:1.4;opacity:.85}
.el-phrase.sage{background:var(--p-sage)}.el-phrase.sage .p,.el-phrase.sage .t{color:var(--d-sage)}
.el-phrase.mint{background:var(--p-mint)}.el-phrase.mint .p,.el-phrase.mint .t{color:var(--d-mint)}
.el-phrase.lilac{background:var(--p-lilac)}.el-phrase.lilac .p,.el-phrase.lilac .t{color:var(--d-lilac)}
.el-phrase.yellow{background:var(--p-yellow)}.el-phrase.yellow .p,.el-phrase.yellow .t{color:var(--d-yellow)}
@media(max-width:560px){
  .el-phrases{grid-template-columns:1fr 1fr;gap:12px}
  .el-phrase{padding:16px}
  .el-phrase .p{font-size:1rem}
  .el-phrase .t{font-size:.875rem}
}

/* Ссылка-«ещё» под витриной («Весь словарь →», «Все фразы →») и список FAQ.
   Общие для главной и хабов, поэтому здесь, а не в постраничных файлах. */
.el-more{margin:22px 0 0;font-weight:700}
.el-faq{display:flex;flex-direction:column;gap:12px;margin-bottom:6px}
