/* T1 Cuenta — стили сборки. База = эталон cuenta.html @ 9ee7498 (токены/компоненты
   БЕЗ перерисовки); дельта сборки: responsive .phone, живые инпуты (поиск, форма Enviar),
   слайдер с тап-мишенью ≥44px, ошибка валидации, toast, empty-state. */

/* ===== Шрифты (локальные, variable) ===== */
@font-face { font-family:'Playfair Display'; src:url('/app/fonts/PlayfairDisplay-600-latin.woff2') format('woff2'); font-weight:400 800; font-display:block; }
@font-face { font-family:'Inter'; src:url('/app/fonts/Inter-600-latin.woff2') format('woff2'); font-weight:100 900; font-display:block; }
@font-face { font-family:'Source Serif 4'; src:url('/app/fonts/SourceSerif4-latin.woff2') format('woff2'); font-weight:100 900; font-display:block; }
/* ===== i18n-12loc: ДОБАВЛЕННЫЕ скрипт-диапазоны (вердикт vd 10:24 — ТРИ класса) =====
   cmap-факт сборки был: ни один из трёх латин-сабсетов не несёт ș/ț/ă (ro), кириллицы (uk),
   арабицы (ar), Han (zh) — все четыре класса падали в НЕОБЪЯВЛЕННЫЙ системный фолбэк.
   (1.1) latin-ext и (1.2) cyrillic — сабсеты ТЕХ ЖЕ семейств: бренд цел, фолбэк не нужен.
   (1.3) ar/zh — своя гарнитура на скрипт (аналога Playfair в арабице нет: дисплейная роль
   ДЕКЛАРИРУЕМО вырождается в Noto Sans Arabic — насх не подменяем).
   Правило vd-a: смешение семейств систематизировано unicode-range, латинские глифы всегда
   наши брендовые, скриптовые — скриптовая гарнитура. */
@font-face { font-family:'Playfair Display'; src:url('/app/fonts/PlayfairDisplay-600-i18n.woff2') format('woff2'); font-weight:400 800; font-display:block;
  unicode-range:U+0100-024F, U+0400-04FF, U+1E00-1EFF, U+2000-206F, U+20A0-20BF, U+2116, U+2190-21FF, U+2212; }
@font-face { font-family:'Inter'; src:url('/app/fonts/Inter-400-i18n.woff2') format('woff2'); font-weight:100 500; font-display:block;
  unicode-range:U+0100-024F, U+0400-04FF, U+1E00-1EFF, U+2000-206F, U+20A0-20BF, U+2116, U+2190-21FF, U+2212; }
@font-face { font-family:'Inter'; src:url('/app/fonts/Inter-600-i18n.woff2') format('woff2'); font-weight:501 900; font-display:block;
  unicode-range:U+0100-024F, U+0400-04FF, U+1E00-1EFF, U+2000-206F, U+20A0-20BF, U+2116, U+2190-21FF, U+2212; }
@font-face { font-family:'Source Serif 4'; src:url('/app/fonts/SourceSerif4-600-i18n.woff2') format('woff2'); font-weight:100 900; font-display:block;
  unicode-range:U+0100-024F, U+0400-04FF, U+1E00-1EFF, U+2000-206F, U+20A0-20BF, U+2116, U+2190-21FF, U+2212; }
@font-face { font-family:'Noto Sans Arabic'; src:url('/app/fonts/NotoSansArabic-400-i18n.woff2') format('woff2'); font-weight:100 500; font-display:block;
  unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFF; }
@font-face { font-family:'Noto Sans Arabic'; src:url('/app/fonts/NotoSansArabic-600-i18n.woff2') format('woff2'); font-weight:501 900; font-display:block;
  unicode-range:U+0600-06FF, U+0750-077F, U+FB50-FDFF, U+FE70-FEFF; }
@font-face { font-family:'Noto Sans SC'; src:url('/app/fonts/NotoSansSC-400-i18n.woff2') format('woff2'); font-weight:100 500; font-display:block;
  unicode-range:U+2E80-9FFF, U+3000-303F, U+FF00-FFEF; }
@font-face { font-family:'Noto Sans SC'; src:url('/app/fonts/NotoSansSC-600-i18n.woff2') format('woff2'); font-weight:501 900; font-display:block;
  unicode-range:U+2E80-9FFF, U+3000-303F, U+FF00-FFEF; }

/* ===== Токены (BRANDBOOK.md §3) ===== */
:root{
  --verde-bosque:#1B462E;
  --crema:#F4EFE6;
  --paper:#FBF9F4;
  --verde-carbon:#1F2A24;
  --verde-salvia:#486B58;
  --verde-niebla:#A7B5AD;
  --gris-piedra:#D6D1C5;
  --tinta-suave:#63665E;   /* ПАРНЫЙ ink-токен к декоративному #8B8E85 (тот 3.17:1 — ниже AA):
                              тот же зеленовато-серый тон, но ≥4.5:1 на фонах сборки
                              (#FBF9F4 5.56 · #F4EFE6 5.10 · #E5E9E2 4.76). Для ТЕКСТА, несущего смысл. */
  --blanco:#FFFFFF;
  --terracota:#B05A3C;
  --terracota-fondo:#F6E4DC; /* 5-А: фон error-поверхностей семьи terracota */
  --terracota-tinta:#7C3A22; /* парный ink-токен к terracota-fondo (AA 7.07:1 — замер оси VD, run8) */
  --serif:'Playfair Display', Georgia, serif;          /* роль: БУКВЫ (заголовки, приветствие) */
  --serif-num:'Source Serif 4', Georgia, serif;        /* роль: ЦИФРЫ/суммы — чистые lining, БЕЗ ball-терминалов */
  --sans:'Inter', -apple-system, system-ui, sans-serif;
  --r-card:18px; --r-btn:16px;
}
*{ margin:0; padding:0; box-sizing:border-box; }
[hidden]{ display:none !important; } /* hidden-атрибут сильнее компонентных display (скрытая строка Idioma) */
/* только-для-ридера (live-регион modo sencillo): ноль видимых пикселей — растровый
   детерминизм полного режима цел (MM-10) */
.sr-only{ position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden;
  clip:rect(0 0 0 0); white-space:nowrap; border:0; }
html,body{ background:#20242e; }
/* Сборка: телефонный кадр = живой viewport (эталонный fixed 390×844 → responsive) */
.phone{
  width:100%; max-width:430px; height:100dvh; margin:0 auto; overflow:hidden; position:relative;
  background:var(--crema); color:var(--verde-carbon);
  font-family:var(--sans); font-size:16px; font-weight:400; line-height:1.35;
  display:flex; flex-direction:column;
}
.num{ font-family:var(--serif-num); font-variant-numeric:lining-nums; font-weight:600; }
.field .val .t-serif.num, .t-serif.num{ font-family:var(--serif-num); }
h1.screen-title{ font-family:var(--serif); font-weight:600; font-size:34px; color:var(--verde-bosque); }

img.emblem{ display:inline-block; object-fit:contain; }

/* ===== Компоненты ===== */
.card{ background:var(--paper); border-radius:var(--r-card); }
.btn-primary{
  display:flex; align-items:center; justify-content:center; gap:10px;
  background:var(--verde-bosque); color:var(--blanco); border:none; border-radius:var(--r-btn);
  min-height:54px; font-family:var(--sans); font-weight:600; font-size:17px; width:100%; cursor:pointer;
}
.btn-outline{
  display:flex; align-items:center; justify-content:center; gap:10px;
  background:transparent; color:var(--verde-bosque); border:1.5px solid var(--verde-bosque);
  border-radius:var(--r-btn); min-height:52px; font-family:var(--sans); font-weight:600; font-size:16px; width:100%; cursor:pointer;
}
.icon{ width:22px; height:22px; stroke:currentColor; fill:none; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; flex:none; }

/* Кнопка-иконка (копирование IBAN): мишень 44×44 без раздувания строки */
.icon-btn{ background:none; border:none; width:44px; height:44px; margin:-11px; display:flex;
  align-items:center; justify-content:center; color:var(--verde-salvia); cursor:pointer; flex:none; } /* интерактив-иконка = salvia (роль иконок брендбука); niebla была 2.02:1 — ниже non-text 3:1 */
.icon-btn .icon{ width:20px; height:20px; }

/* Toast-пилюля (видимый отклик копирования/шаринга) */
.toast{ position:absolute; left:50%; bottom:110px; transform:translateX(-50%) translateY(8px);
  background:var(--verde-carbon); color:var(--blanco); font-size:14px; font-weight:500;
  padding:10px 18px; border-radius:999px; opacity:0; pointer-events:none; transition:.18s; z-index:40; white-space:nowrap; }
.toast.show{ opacity:1; transform:translateX(-50%); }

/* Карточный тост финальных экранов (ORDER-6; форма vd 14:07): карточка из системы,
   TOP-центр (низ занят CTA), тень уровня шторки, смахивается жестом (pointer-события) */
.toast-card{ position:absolute; top:14px; left:16px; right:16px; z-index:60;
  display:flex; align-items:center; gap:12px; padding:14px 16px;
  box-shadow:0 4px 12px rgba(27,70,46,.25); font-size:14.5px; font-weight:500;
  color:var(--verde-carbon); transition:transform .22s ease, opacity .22s ease;
  touch-action:none; cursor:pointer; } /* none: вертикальный жест НЕ отдаётся скроллу/pull-to-refresh (вердикт Real PO п.2) */
/* плавное появление (toast v2): стартовое состояние снимается на следующем кадре */
.toast-card.enter{ transform:translateY(-14px); opacity:0; }
.toast-card .icon{ width:20px; height:20px; color:var(--verde-salvia); }
.toast-card .ttx{ flex:1; min-width:0; }

/* Диалог подтверждения (ORDER-7; форма vd: карточка из системы, primary одна) */
.confirm-overlay{ position:absolute; inset:0; z-index:70; display:flex; align-items:center;
  justify-content:center; padding:24px; }
.confirm-overlay .dim{ position:absolute; inset:0; }
.confirm-card{ position:relative; width:100%; padding:20px 18px; display:flex; flex-direction:column; gap:12px; }
.confirm-card h3{ font-family:var(--serif); font-weight:600; font-size:22px; color:var(--verde-bosque); }
.confirm-card p{ font-size:14.5px; color:var(--verde-carbon); }
.confirm-card .btns{ display:flex; flex-direction:column; gap:8px; margin-top:6px; }

/* ===== Таббар (канон: 5 позиций, центр Transferir) ===== */
.tabbar{
  margin-top:auto; flex:none; display:grid; grid-template-columns:1fr 1fr 1fr 1fr 1fr; align-items:end;
  padding:6px 8px calc(10px + env(safe-area-inset-bottom)); background:var(--paper);
  border-top:1px solid var(--gris-piedra); position:relative;
}
.tab{ display:flex; flex-direction:column; align-items:center; gap:3px; color:var(--tinta-suave); /* niebla 2.02:1 на paper — ниже AA; иерархия жива: active = bosque+w600 */
  font-size:11.5px; font-weight:500; text-decoration:none; padding-top:6px; }
.tab .icon{ width:24px; height:24px; }
.tab.active{ color:var(--verde-bosque); font-weight:600; }
.tab-fab{ display:flex; flex-direction:column; align-items:center; gap:3px; color:var(--verde-bosque);
  font-size:11.5px; font-weight:600; text-decoration:none; margin-top:-24px; }
.tab-fab .fab{ width:56px; height:56px; border-radius:50%; background:var(--verde-bosque); color:var(--blanco);
  display:flex; align-items:center; justify-content:center; box-shadow:0 4px 12px rgba(27,70,46,.25); }
.tab-fab .fab .icon{ width:26px; height:26px; }

/* ===== Экраны ===== */
.screen{ display:none; flex-direction:column; flex:1 1 auto; min-height:0; }
.screen.active{ display:flex; }

/* --- Inicio --- */
.hero{
  background:var(--verde-bosque); color:var(--blanco);
  border-radius:0 0 48% 48% / 0 0 56px 56px;
  padding:18px 24px 40px; position:relative;
}
.hero-top{ display:flex; align-items:center; justify-content:center; position:relative; height:44px; }
.hero-top .emblem{ width:40px; height:40px; color:var(--blanco); }
/* Б-1 (спека vd): правый кластер действий = ОДИН флекс-контейнер, абсолютом позиционируется ОН.
   Два абсолюта с ручной арифметикой офсетов не заводим — следующий контрол разъехался бы. */
.chrome-actions{ position:absolute; right:0; top:50%; transform:translateY(-50%);
  display:flex; align-items:center; gap:8px; }
.nav-row .chrome-actions{ right:16px; }   /* padding хрома nav-row */
.appbar .chrome-actions{ right:12px; }    /* симметрия с .appbar .nav-back left:12px */
/* колокол: та же 44px-мишень, что у микрофона (vd п.6) — в кластере неравенство соседей видно */
.bell{ position:relative; width:44px; height:44px; display:flex; align-items:center; justify-content:center;
  color:var(--blanco); }
/* Inicio попал в набор checkErgo (решение координатора 11:38 п.3а) и вскрыл ПРЕ-СУЩЕСТВУЮЩЕЕ:
   безымянные шевроны заголовков карточек несут мишень 18×18. Коробка растёт padding'ом с
   компенсирующим margin — раскладка не двигается, растёт только область тапа. */
.mini-stack .head > a, .movs-head > a{ display:flex; align-items:center; justify-content:center;
  padding:13px; margin:-13px; }
/* бейдж держится за ИКОНКУ, а не за угол 44px-коробки (коробка выросла ради мишени, vd п.6) */
.bell .dot{ position:absolute; top:9px; right:9px; width:9px; height:9px; border-radius:50%;
  background:var(--terracota); border:1.5px solid var(--verde-bosque); }
.greeting{ font-family:var(--serif); font-weight:500; font-size:26px; margin-top:14px; }
.saldo-label{ color:var(--verde-niebla); font-size:14px; font-weight:500; margin-top:14px; letter-spacing:.02em; }
.saldo{ font-size:46px; line-height:1.1; margin-top:2px; }
.saldo .cur{ font-size:26px; }
.cuenta-line{ margin-top:12px; font-size:15px; }
.cuenta-line .name{ color:var(--crema); font-weight:500; }
.cuenta-line .iban{ color:var(--verde-niebla); font-size:13.5px; letter-spacing:.06em; margin-top:2px; }
.quick{ display:grid; grid-template-columns:repeat(4,1fr); gap:6px; padding:22px 18px 6px; }
.qa{ display:flex; flex-direction:column; align-items:center; gap:8px; color:var(--verde-carbon);
  font-size:13px; font-weight:500; text-decoration:none; }
.qa .ring{ width:58px; height:58px; border-radius:50%; border:1.5px solid var(--verde-bosque);
  color:var(--verde-bosque); display:flex; align-items:center; justify-content:center; background:transparent; }
/* скролл-body Inicio (VD-3): контент между hero и таббаром скроллится, таббар виден */
.inicio-body{ display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.movs{ margin:14px 18px 12px; padding:18px 18px 6px; flex:none; }
.movs-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; }
.movs-head h2{ font-family:var(--serif); font-weight:600; font-size:21px; color:var(--verde-bosque); }
.movs-head a{ color:var(--verde-salvia); text-decoration:none; display:flex; align-items:center; gap:2px; font-size:14px; font-weight:500; }
.mov{ display:flex; align-items:center; gap:14px; padding:13px 0; border-top:1px solid #ECE7DC; cursor:pointer; }
.mov:first-of-type{ border-top:none; }
.mov .cat{ width:44px; height:44px; border-radius:50%; background:#E5E9E2; color:var(--verde-salvia);
  display:flex; align-items:center; justify-content:center; flex:none; }
.mov .who{ flex:1 1 auto; min-width:0; }
.mov .who .n{ font-weight:500; font-size:15.5px; display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; overflow:hidden; } /* VD-1: имя — главный идентификатор строки; перенос на 2-ю строку вместо эллипсиса */
.mov .who .d{ color:var(--tinta-suave); font-size:13px; margin-top:1px; }
.mov .amt{ font-size:19px; white-space:nowrap; }
.mov .amt.pos{ color:var(--verde-salvia); }

/* --- fb3: не-влияющие движения чужих карт в ОБЩИХ Movimientos (ORDER-1/2/6, эталон B @90b852f) ---
   Дискриминатор = свойство КЛАССА строки, не знака: чужой расход И чужой приход выглядят одинаково —
   сумма money(abs) БЕЗ знака нейтральным цветом/весом (ни расходный канон, ни pos) + пилюля под суммой.
   Граница ux: только здесь; в истории самой чужой карты движение родное — маркера нет. */
.bank-sq{ width:44px; height:44px; border-radius:12px; flex:none; display:flex; align-items:center; justify-content:center;
  background:var(--verde-carbon); color:var(--blanco); font-weight:600; font-size:14px; letter-spacing:.03em; }
/* контент-токены чужого пластика, НЕ хром брендбука; тройной селектор — чтобы colorway
   побеждал и фон .det-icon.bank-sq в карточке (та объявлена ниже, тай по специфичности) */
.bank-sq.peninsular, .det-icon.bank-sq.peninsular{ background:#2E3A46; }
.bank-sq.cajanueva, .det-icon.bank-sq.cajanueva{ background:#9E5940; }
.amt-col{ display:flex; flex-direction:column; align-items:flex-end; gap:3px; }
.mov.ext .amt, .mov.ext .amt.pos{ color:var(--tinta-suave); font-weight:500; }
.nas-pill{ display:inline-block; border:1px solid var(--gris-piedra); border-radius:999px; padding:1px 8px 2px;
  font-size:10.5px; color:var(--tinta-suave); white-space:nowrap; }

/* --- Pago de prueba --- */
.nav-row{ display:flex; align-items:center; height:52px; padding:0 16px; position:relative; flex:none; }
/* тап-мишень ≥44px (red-ux эргономика): паддинг растёт до 44, отрицательный margin
   компенсирует раскладку — визуальная позиция иконки прежняя */
.nav-back{ color:var(--verde-carbon); text-decoration:none; display:flex; align-items:center; justify-content:center; padding:11px; margin:-5px; }
.nav-emblem{ position:absolute; left:50%; transform:translateX(-50%); width:44px; height:44px;
  border-radius:50%; background:var(--verde-bosque); display:flex; align-items:center; justify-content:center; }
.nav-emblem .emblem{ width:26px; height:26px; color:var(--blanco); }
.prueba-body{ padding:0 22px 18px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.prueba-body h1{ text-align:center; margin-top:12px; }
/* nav-row внутри скролл-body (реестр №4): вынос на всю ширину + сохранение пиксельных
   отступов исходной композиции (nav вне body): prueba имел 8px паддинга под шапкой */
.prueba-body > .nav-row{ margin:0 -22px 8px; flex:none; }
.enviar-body > .nav-row{ margin:0 -20px; flex:none; }
.spacer{ flex:1 1 0; }
.amount-big{ text-align:center; font-size:64px; color:var(--verde-bosque); }
.amount-big .cur{ font-size:34px; }
.slider-card{ margin-top:34px; padding:22px 20px 16px; }
/* Слайдер: трек 8px рисуется ВНУТРИ инпута высотой 44px (тап-мишень ≥44, red-ux R6) */
.slider-card input[type=range]{ width:100%; appearance:none; -webkit-appearance:none; height:44px;
  background:transparent; outline:none; cursor:pointer; }
.slider-card input[type=range]::-webkit-slider-runnable-track{ height:8px; border-radius:4px;
  background:linear-gradient(to right, var(--verde-bosque) 0%, var(--verde-bosque) var(--pct,5%), #E4DFD3 var(--pct,5%), #E4DFD3 100%); }
.slider-card input[type=range]::-webkit-slider-thumb{ appearance:none; -webkit-appearance:none; width:34px; height:34px; border-radius:50%;
  margin-top:-13px; background:var(--verde-bosque); border:3px solid var(--paper); box-shadow:0 1px 5px rgba(31,42,36,.35); }
.slider-card input[type=range]::-moz-range-track{ height:8px; border-radius:4px; background:#E4DFD3; }
.slider-card input[type=range]::-moz-range-progress{ height:8px; border-radius:4px; background:var(--verde-bosque); }
.slider-card input[type=range]::-moz-range-thumb{ width:34px; height:34px; border-radius:50%;
  background:var(--verde-bosque); border:3px solid var(--paper); box-shadow:0 1px 5px rgba(31,42,36,.35); }
.ticks{ display:flex; justify-content:space-between; padding:8px 2px 0; }
.ticks i{ width:1.5px; height:9px; background:var(--gris-piedra); }
.ticks i:nth-child(5n+1){ height:14px; background:var(--verde-niebla); }
.range-labels{ display:flex; justify-content:space-between; color:var(--verde-carbon); font-size:14px; font-weight:500; margin-top:6px; }
.slider-cap{ text-align:center; color:var(--tinta-suave); font-size:14.5px; margin-top:14px; }
.info-line{ display:flex; align-items:center; gap:10px; padding:14px 16px; font-size:14.5px; color:var(--verde-carbon); }
.info-line .icon{ width:19px; height:19px; color:var(--verde-salvia); }
.prueba-cta{ margin-top:10px; }
.prueba-cta .btn-primary{ font-family:var(--serif); font-variant-numeric:lining-nums; font-size:21px; min-height:58px; }

/* --- Enviar --- */
.enviar-body{ padding:0 20px 18px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.enviar-body h1{ margin:6px 0 14px; }
.plantillas-label{ font-size:13.5px; font-weight:600; letter-spacing:.04em; color:var(--verde-salvia); text-transform:uppercase; }
.plantillas{ display:flex; gap:22px; margin:12px 2px 16px; }
.pl{ display:flex; flex-direction:column; align-items:center; gap:7px; font-size:13px; color:var(--verde-carbon); text-decoration:none; }
.pl .av{ width:56px; height:56px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-family:var(--serif); font-weight:600; font-size:19px; }
.pl .av.a1{ background:var(--verde-bosque); color:var(--blanco); }
.pl .av.a2{ background:var(--verde-salvia); color:var(--blanco); } /* #9DAF9F вне палитры, белые инициалы были 2.32:1; salvia = 5.97 */
.pl .av.a3{ background:#E5E9E2; color:var(--verde-salvia); }
.pl .av.new{ background:transparent; border:1.6px dashed var(--verde-niebla); color:var(--verde-salvia); }
.form-card{ padding:4px 18px; }
.field{ padding:13px 0; border-top:1px solid #ECE7DC; }
.field:first-child{ border-top:none; }
.field .lbl{ font-size:12.5px; font-weight:600; letter-spacing:.03em; color:var(--tinta-suave); text-transform:none; }
.field .val{ margin-top:3px; display:flex; align-items:center; justify-content:space-between; gap:8px; }
.field .val .t-serif{ font-family:var(--serif); font-weight:500; font-size:19px; color:var(--verde-carbon); }
.field .val .icon{ color:var(--verde-niebla); width:20px; height:20px; }
/* Живые поля формы Enviar — вид эталонного .val, редактируемые (пин: IBAN с inline-валидацией) */
.field .val input{ background:none; border:none; outline:none; width:100%; min-width:0; color:var(--verde-carbon); }
.field .val input::placeholder{ color:#A9ACA2; }
.field .val input.t-serif{ font-family:var(--serif); font-weight:500; font-size:19px; }
.field .val input.t-serif.num{ font-family:var(--serif-num); }
.field-error{ color:var(--terracota); font-size:13px; font-weight:500; margin-top:6px; }
.field .importe{ font-size:40px; color:var(--verde-bosque); }
.field .importe .cur{ font-size:22px; }
.field .ph{ color:#A9ACA2; font-size:16px; }
.seg{ display:flex; background:#EDE8DC; border-radius:999px; padding:4px; margin-top:14px; }
.seg .opt{ flex:1; display:flex; align-items:center; justify-content:center; gap:7px; min-height:44px;
  border-radius:999px; font-size:13.5px; font-weight:600; color:var(--verde-salvia); text-decoration:none; white-space:nowrap; }
.seg .opt.on{ background:var(--verde-bosque); color:var(--blanco); flex:1.5; }
.seg .opt .icon{ width:16px; height:16px; }
/* vd #17-3: рослые локали (ar/zh: line-height 1.65/1.55) раздувают форму, и primary CTA при
   открытии тонул под нижней кромкой скролла (виден срез 3-20px из 54). Sticky прижимает CTA
   к низу вьюпорта контейнера в ЛЮБОЙ локали; при влезающем контенте стоит в потоке как прежде.
   Full-bleed подложка paper гасит контент, уходящий под кнопку при скролле (4+10px = прежний
   ритм 14px над кнопкой). */
.enviar-cta{ position:sticky; bottom:0; z-index:2; margin-top:4px;
  margin-inline:-20px; padding:10px 20px 8px; background:var(--paper); }
/* Слайдер Enviar: importe-дисплей внутри .slider-card (ORDER-2: ползунок уже в mock) */
.slider-card .lbl{ font-size:12.5px; font-weight:600; letter-spacing:.03em; color:var(--tinta-suave); }
.slider-card .importe{ font-size:40px; color:var(--verde-bosque); margin-top:2px; }
.slider-card .importe .cur{ font-size:22px; }
.slider-card .importe[role="button"]{ cursor:pointer; } /* i20 №7а: тап открывает точный ввод */
.slider-card .importe-edit{ background:none; border:none; outline:none; width:100%; min-width:0;
  padding:0; font-size:40px; color:var(--verde-bosque); margin-top:2px; }
.enviar-body .slider-card{ margin-top:0; margin-bottom:2px; padding-top:16px; }

/* --- Общая зелёная планка --- */
.appbar{ background:var(--verde-bosque); display:flex; align-items:center; justify-content:center; height:60px; flex:none; position:relative; }
.appbar img.emblem{ width:32px; height:32px; }
.appbar .nav-back{ position:absolute; inset-inline-start:12px; color:var(--blanco); }

/* --- Movimientos --- */
.hist-body{ padding:14px 18px 8px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.search{ display:flex; align-items:center; gap:10px; background:var(--paper); border:1px solid var(--gris-piedra);
  border-radius:14px; padding:12px 14px; color:var(--tinta-suave); margin-top:14px; }
.search input{ background:none; border:none; outline:none; flex:1; min-width:0; font-family:var(--sans);
  font-size:15px; color:var(--verde-carbon); }
.search input::placeholder{ color:#8B8E85; }
/* vd #17-2: длинная локаль (uk 415 > 354) не влезает — лента скроллится, а не клипается краем.
   Full-bleed до кромки экрана (±18px = боковой отступ .hist-body): срезанный у физической
   кромки чип = аффорданс продолжения; влезающие локали выглядят как прежде. */
.chips{ display:flex; gap:8px; margin-top:12px; overflow-x:auto; scrollbar-width:none;
  margin-inline:-18px; padding-inline:18px;
  /* flex:none обязателен: scroll container теряет автоматический min-height (auto→0),
     и переполненная колонка .hist-body сжимает ряд в 0 (боевое: чип переставал кликаться) */
  flex:none; }
.chips::-webkit-scrollbar{ display:none; }
.chips .chip{ flex:none; }
.chip{ padding:8px 12px; border-radius:999px; border:1px solid var(--gris-piedra); color:var(--verde-salvia);
  font-size:13px; font-weight:600; text-decoration:none; white-space:nowrap; cursor:pointer; }
.chip.on{ background:var(--verde-bosque); border-color:var(--verde-bosque); color:var(--blanco); }
.group-h{ font-family:var(--serif); font-weight:600; font-size:19px; color:var(--verde-bosque); margin:16px 2px 8px; }
.hist-card{ padding:2px 16px; }
.hist-card .mov .who .n{ font-size:15px; }
.empty-state{ text-align:center; color:var(--tinta-suave); font-size:15px; padding:38px 24px; }
.empty-state .icon{ width:34px; height:34px; color:var(--verde-niebla); margin-bottom:10px; }

/* --- Detalle --- */
.det-body{ padding:6px 22px 18px; display:flex; flex-direction:column; align-items:center; flex:1 1 auto; min-height:0; overflow-y:auto; }
.det-icon{ width:84px; height:84px; border-radius:50%; background:#E5E9E2; color:var(--verde-salvia);
  display:flex; align-items:center; justify-content:center; margin-top:10px; flex:none; }
.det-icon .icon{ width:36px; height:36px; }
.det-merchant{ font-family:var(--serif); font-weight:600; font-size:25px; color:var(--verde-carbon); margin-top:14px; }
.det-amount{ font-size:44px; color:var(--verde-bosque); margin-top:4px; }
.det-pill{ display:flex; align-items:center; gap:7px; background:#E5E9E2; color:var(--verde-bosque);
  border-radius:999px; padding:8px 16px; font-size:13.5px; font-weight:600; margin-top:12px; }
/* fb3 ORDER-3: блок-объяснение «почему не влияет» в карточке не-влияющей операции.
   Размещение — сразу под статусом, ДО деталей (первое, что читает глаз после суммы).
   Тон: информирующий, не тревожный — рамка вместо заливки, никакого алерт-цвета. */
#det-why{ width:100%; }
.det-nas{ width:100%; margin-top:16px; padding:14px 16px; display:flex; gap:11px; align-items:flex-start;
  background:var(--paper); border:1px solid var(--gris-piedra); border-radius:var(--r-card); }
.det-nas .icon{ width:19px; height:19px; color:var(--verde-salvia); flex:none; margin-top:1px; }
.det-nas .t{ font-weight:600; font-size:14.5px; color:var(--verde-carbon); }
.det-nas .b{ font-size:13.5px; line-height:1.45; color:var(--tinta-suave); margin-top:3px; }
.det-amount.nas{ color:var(--tinta-suave); }
/* знак банка в карточке = тот же элемент, что в ленте: инициалы БЕЛЫМ (без явного color
   побеждал .det-icon{color:verde-salvia} — одна сущность выглядела по-разному на двух поверхностях) */
.det-icon.bank-sq{ width:84px; height:84px; border-radius:24px; font-size:26px; letter-spacing:.04em;
  color:var(--blanco); background:var(--verde-carbon); /* дефолт незнакомого банка; colorway выше специфичностью */ }
/* fb3 ORDER-4: подпись карты над её историей (экран Historial) */
.chist-card{ color:var(--tinta-suave); font-size:14.5px; margin-top:6px; }
.det-rows{ width:100%; margin-top:18px; padding:4px 18px; }
.drow{ display:flex; align-items:center; gap:12px; padding:13px 0; border-top:1px solid #ECE7DC; font-size:14.5px; }
.drow:first-child{ border-top:none; }
.drow .icon{ width:19px; height:19px; color:var(--verde-salvia); }
.drow .k{ color:var(--tinta-suave); flex:1; }
.drow .v{ font-weight:500; text-align:right; }
.drow[role="button"]{ cursor:pointer; } /* i20 №8: тапабельная строка документа */
.det-btns{ width:100%; display:flex; flex-direction:column; gap:10px; margin-top:auto; padding-top:14px; }

/* Documento (i20 №8): просмотр демо-документа — заглушечный «лист» без выдуманного текста */
.doc-meta{ margin-top:6px; font-size:14px; color:var(--verde-salvia); }
.doc-paper{ margin-top:14px; padding:22px 18px; display:flex; flex-direction:column; gap:11px; }
.doc-line{ height:10px; border-radius:5px; background:#ECE7DC; }
.doc-line.gap{ background:none; height:4px; }
.doc-line.w55{ width:55%; } .doc-line.w60{ width:60%; } .doc-line.w70{ width:70%; }
.doc-line.w85{ width:85%; } .doc-line.w92{ width:92%; }

/* --- Tarjetas --- */
.tarj-body{ padding:0 20px 14px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.tarj-body h1{ margin:6px 0 14px; }
.plastic{ background:var(--verde-bosque); border-radius:20px; color:var(--blanco); position:relative;
  height:196px; padding:20px 22px; overflow:hidden; flex:none; }
.plastic .lbl{ font-size:15px; color:var(--crema); }
.plastic .pan{ position:absolute; left:22px; bottom:20px; font-size:22px; letter-spacing:.08em; }
.plastic img.emblem{ position:absolute; right:14px; top:14px; width:150px; height:150px; opacity:.96; }
.toggle2{ display:flex; background:#EDE8DC; border-radius:999px; padding:4px; margin-top:16px; }
.toggle2 .opt{ flex:1; display:flex; align-items:center; justify-content:center; min-height:42px; border-radius:999px;
  font-size:14.5px; font-weight:600; color:var(--verde-salvia); text-decoration:none; cursor:pointer; }
.toggle2 .opt.on{ background:var(--verde-bosque); color:var(--blanco); }
.actions3{ display:grid; grid-template-columns:1fr 1fr 1fr; margin-top:14px; padding:16px 6px; }
.act{ display:flex; flex-direction:column; align-items:center; gap:8px; font-size:13.5px; font-weight:500;
  color:var(--verde-carbon); text-decoration:none; border-left:1px solid #ECE7DC; }
.act:first-child{ border-left:none; }
.act .icon{ width:24px; height:24px; color:var(--verde-bosque); }
.settings{ margin-top:14px; padding:2px 18px; }
.srow{ display:flex; align-items:center; gap:14px; padding:14px 0; border-top:1px solid #ECE7DC; font-size:15px; font-weight:500; }
.srow:first-child{ border-top:none; }
.srow .icon{ width:21px; height:21px; color:var(--verde-salvia); }
.srow .t{ flex:1; }
.sw{ width:46px; height:28px; border-radius:999px; background:var(--verde-bosque); position:relative; flex:none; cursor:pointer; }
.sw::after{ content:''; position:absolute; inset-inline-end:3px; top:3px; width:22px; height:22px; border-radius:50%; background:var(--blanco); }
.sw.off{ background:var(--gris-piedra); }
.sw.off::after{ inset-inline-end:auto; inset-inline-start:3px; }

/* --- Recibir --- */
.rec-body{ padding:0 20px 14px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.datos{ padding:16px 18px 14px; }
.datos h2{ font-family:var(--serif); font-weight:600; font-size:21px; color:var(--verde-bosque); margin-bottom:4px; }
.datos .field .val .t-serif{ font-size:18px; }
.datos .btn-primary{ margin-top:12px; min-height:50px; }
.qr-card{ display:flex; align-items:center; gap:16px; padding:16px 18px; margin-top:12px; }
.qr-card img{ width:104px; height:104px; background:var(--blanco); border-radius:10px; padding:6px; }
.qr-card .tx h3{ font-family:var(--serif); font-weight:600; font-size:19px; color:var(--verde-bosque); }
.qr-card .tx p{ font-size:13.5px; color:var(--tinta-suave); margin-top:4px; }
.rec-cta{ margin-top:12px; }

/* --- Pago recibido / Enviada --- */
.result-body{ padding:0 22px 18px; display:flex; flex-direction:column; align-items:center; flex:1 1 auto; position:relative; overflow:hidden; }
.leaves i{ position:absolute; border-radius:60% 40% 55% 45%; background:var(--verde-niebla); opacity:.5; }
.check-big{ width:112px; height:112px; border-radius:50%; background:var(--verde-bosque); color:var(--blanco);
  display:flex; align-items:center; justify-content:center; margin-top:auto; }
.check-big .icon{ width:52px; height:52px; stroke-width:2.4; }
.result-title{ font-family:var(--serif); font-weight:600; font-size:33px; color:var(--verde-bosque); margin-top:22px; text-align:center; }
.result-amount{ font-size:52px; color:var(--verde-bosque); margin-top:4px; }
.result-amount .cur{ font-size:28px; }
.result-sub{ color:var(--tinta-suave); font-size:15px; margin-top:8px; text-align:center; }
.saldo-card{ display:flex; align-items:center; gap:14px; width:100%; padding:14px 18px; margin-top:22px; }
.saldo-card img.emblem{ width:40px; height:40px; }
.saldo-card .k{ font-size:12.5px; font-weight:600; letter-spacing:.05em; color:var(--tinta-suave); text-transform:uppercase; }
.saldo-card .v{ font-size:24px; color:var(--verde-carbon); margin-top:2px; }
.receipt{ width:100%; margin-top:20px; padding:4px 18px; }
.result-btns{ width:100%; display:flex; flex-direction:column; gap:10px; margin-top:auto; }
.link-btn{ display:flex; align-items:center; justify-content:center; min-height:44px; color:var(--verde-salvia);
  font-weight:600; font-size:15px; text-decoration:none; padding:8px; background:none; border:none; cursor:pointer; }
.watermark{ position:absolute; right:-60px; top:-20px; width:280px; height:280px; opacity:.14; pointer-events:none; }

/* --- Confirmar --- */
.conf-body{ padding:14px 20px 18px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.conf-rows{ padding:4px 18px; }
.crow{ display:flex; align-items:center; gap:14px; padding:13px 0; border-top:1px solid #ECE7DC; }
.crow:first-child{ border-top:none; }
.crow .ic{ width:44px; height:44px; border-radius:50%; background:#E5E9E2; color:var(--verde-salvia);
  display:flex; align-items:center; justify-content:center; flex:none; }
.crow .kv{ flex:1; min-width:0; }
.crow .kv .k{ display:block; font-size:12px; font-weight:600; letter-spacing:.05em; color:var(--tinta-suave); text-transform:uppercase; }
.crow .kv .v{ display:block; font-size:17px; font-weight:500; margin-top:2px; }
.crow .kv .v.big{ font-size:36px; color:var(--verde-bosque); }
.crow .kv .sub{ display:block; font-size:13px; color:var(--tinta-suave); margin-top:1px; }
.info-banner{ display:flex; align-items:flex-start; gap:10px; background:#E5E9E2; border-radius:14px;
  padding:13px 15px; font-size:13.5px; color:var(--verde-carbon); margin-top:14px; }
.info-banner .icon{ width:18px; height:18px; color:var(--verde-salvia); margin-top:1px; }
.conf-btns{ margin-top:auto; display:flex; flex-direction:column; gap:6px; padding-top:14px; }

/* --- Perfil --- */
.perf-body{ padding:0 20px 14px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.perf-head{ display:flex; align-items:center; gap:16px; margin:8px 0 16px; }
.avatar{ width:72px; height:72px; border-radius:50%; background:var(--verde-bosque); color:var(--blanco);
  display:flex; align-items:center; justify-content:center; font-family:var(--serif); font-weight:600; font-size:26px; }
.perf-head .name{ font-family:var(--serif); font-weight:600; font-size:24px; color:var(--verde-carbon); }
.perf-head .ver{ display:flex; align-items:center; gap:6px; color:var(--verde-salvia); font-size:14px; font-weight:500; margin-top:3px; }
.plist{ padding:2px 18px; }
.prow{ display:flex; align-items:center; gap:14px; padding:14px 0; border-top:1px solid #ECE7DC; font-size:15.5px; font-weight:500; text-decoration:none; color:var(--verde-carbon); }
.prow:first-child{ border-top:none; }
.prow .icon{ width:21px; height:21px; color:var(--verde-salvia); }
.prow .t{ flex:1; }
.prow .hint{ color:var(--tinta-suave); font-size:13px; font-weight:400; margin-top:1px; }
.prow .side{ color:var(--tinta-suave); font-size:14px; font-weight:400; }
.prow.out{ color:var(--terracota); }
.prow.out .icon{ color:var(--terracota); }

/* --- Шторка Más --- */
.dim{ position:absolute; inset:0; background:rgba(31,42,36,.55); cursor:pointer; }
.sheet{ position:absolute; left:0; right:0; bottom:0; background:var(--crema); border-radius:22px 22px 0 0; padding:10px 20px 20px; }
.sheet .handle{ width:44px; height:5px; border-radius:3px; background:var(--gris-piedra); margin:0 auto; }
.sheet h2{ font-family:var(--serif); font-weight:600; font-size:26px; color:var(--verde-bosque); margin:14px 2px 6px; }
.sheet .prow .ic{ width:44px; height:44px; border-radius:50%; background:#E5E9E2; color:var(--verde-bosque);
  display:flex; align-items:center; justify-content:center; flex:none; }

/* --- Notificaciones --- */
.notif-body{ padding:0 20px 14px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.nrow{ display:flex; align-items:flex-start; gap:14px; padding:15px 16px; position:relative; }
.nrow .ic{ width:44px; height:44px; border-radius:50%; display:flex; align-items:center; justify-content:center; flex:none; }
.nrow .ic.solid{ background:var(--verde-bosque); color:var(--blanco); }
.nrow .ic.soft{ background:#E5E9E2; color:var(--verde-salvia); }
.nrow .tx{ flex:1; min-width:0; }
.nrow .tx .t{ font-family:var(--serif); font-weight:600; font-size:17.5px; color:var(--verde-carbon); }
.nrow .tx .s{ font-size:13.5px; color:var(--tinta-suave); margin-top:2px; }
.nrow .time{ font-size:12.5px; color:var(--tinta-suave); }
.nrow .unread{ position:absolute; right:14px; bottom:16px; width:8px; height:8px; border-radius:50%; background:var(--verde-salvia); }
.notif-body .card + .card{ margin-top:10px; }
/* live-нотификации (реестр real №3): границы как у статичных строк группы */
#notif-live .nrow{ cursor:pointer; }
#notif-live .nrow + .nrow{ border-top:1px solid #ECE7DC; }
#notif-live:not(:empty) + .nrow{ border-top:1px solid #ECE7DC; }

/* --- Сплэш Idioma (в UI отключён; рендерится только через ?screen=idioma — гейт вёрстки 14/14) --- */
/* padding сужен с 26 до 14px: мишень сетки 2×6 обязана быть ≥169px по ширине
   (геометрия ux↔vd 10:37), а при 26px две колонки дают 164px — на 5px меньше планки */
.idioma{ background:var(--verde-bosque); color:var(--blanco); align-items:center; padding:0 14px; }
.idioma .logo{ width:96px; height:94px; margin-top:44px; }
.idioma .btns{ width:100%; margin-top:auto; display:grid; grid-template-columns:repeat(2, 1fr); gap:10px; }
.btn-cream{ display:flex; align-items:center; justify-content:center; min-height:56px; border-radius:var(--r-btn);
  background:var(--crema); color:var(--verde-bosque); font-family:var(--serif); font-weight:600; font-size:20px; border:none; width:100%; }
.btn-ghost{ display:flex; align-items:center; justify-content:center; min-height:54px; border-radius:var(--r-btn);
  background:transparent; color:var(--blanco); border:1.5px solid rgba(255,255,255,.85); font-family:var(--sans); font-weight:600; font-size:17px; width:100%; }
.idioma .cap{ color:var(--verde-niebla); font-size:13.5px; text-align:center; margin:16px 0 26px; }

/* ===== Модуль Tarjetas (c2c) — поверх общей системы; база = эталон tarjetas.html @ HEAD dev ===== */
.wallet-body{ padding:0 20px 14px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.wallet-body > .nav-row{ margin:0 -20px; flex:none; }
.wallet-body h1{ margin:6px 0 12px; }
.wallet-head{ display:flex; align-items:center; justify-content:space-between; margin:6px 0 12px; }
.wallet-head h1{ margin:0; }
.add-btn{ width:44px; height:44px; border-radius:14px; border:1.5px solid var(--verde-bosque); color:var(--verde-bosque);
  display:flex; align-items:center; justify-content:center; background:transparent; cursor:pointer; }
.stack{ display:flex; flex-direction:column; gap:10px; }
.wcard{ border-radius:16px; padding:16px 18px; position:relative; height:96px; overflow:hidden; cursor:pointer; flex:none; }
/* выбранная развёрнутая face без действия — не интерактив (роль не выдана в wcardHTML, SF-2 × T-B19) */
.wcard.expanded:not([role]){ cursor:default; }
.wcard.expanded{ height:auto; aspect-ratio:1.586; }  /* ISO ID-1: 85.60x53.98mm */
.wcard > *{ position:relative; z-index:1; }
.wcard::before{ content:''; position:absolute; inset:0; z-index:0; background-size:cover; background-position:center top; border-radius:inherit; }
.wcard.c-debito::before{ background-image:url('/app/assets/card-ardelero.png'); }
.wcard.c-virtual::before{ background-image:url('/app/assets/card-ardelero.png'); filter:brightness(1.5) saturate(.6); }
.wcard.c-single::before{ background-image:url('/app/assets/card-ardelero.png'); filter:brightness(2.35) saturate(.16); }
.wcard.c-peninsular::before{ background-image:url('/app/assets/card-peninsular.png'); }
.wcard.c-cajanueva::before{ background-image:url('/app/assets/card-cajanueva.png'); }
.wcard .pan, .wcard .nm, .wcard .holder{ text-shadow:0 1px 4px rgba(31,42,36,.25); }
.wcard .net{ position:absolute; inset-inline-end:18px; bottom:14px; color:var(--blanco); opacity:.94; z-index:1; }
.wcard .net.visa{ font-style:italic; font-weight:800; font-size:21px; letter-spacing:.05em; }
.wcard .net.mc{ font-weight:600; font-size:15px; letter-spacing:.01em; }
.wcard .net .mc-circles{ display:inline-block; width:34px; height:21px; position:relative; vertical-align:-5px; margin-right:5px; }
.wcard .net .mc-circles::before,.wcard .net .mc-circles::after{ content:''; position:absolute; top:0; width:21px; height:21px; border-radius:50%; }
.wcard .net .mc-circles::before{ left:0; background:rgba(235,90,60,.85); }
.wcard .net .mc-circles::after{ right:0; background:rgba(244,175,70,.8); mix-blend-mode:screen; }
.wcard.expanded::after{ content:''; position:absolute; inset:0; z-index:0; border-radius:inherit;
  background:linear-gradient(115deg, transparent 32%, rgba(255,255,255,.10) 46%, rgba(255,255,255,.03) 52%, transparent 64%); }
.wcard.c-single .nm, .wcard.c-single .pan{ text-shadow:none; }
.wcard .nm{ font-size:14.5px; font-weight:600; }
.wcard .pan{ font-size:16px; letter-spacing:.08em; }
.wcard img.emblem{ position:absolute; inset-inline-end:12px; top:12px; width:64px; height:64px; opacity:.95; }
.wcard.c-debito{ background:var(--verde-bosque); color:var(--blanco); }
.wcard.c-virtual{ background:var(--verde-salvia); color:var(--blanco); }
.wcard.c-single{ background:var(--gris-piedra); color:var(--verde-carbon); }
.wcard.c-ajena{ background:var(--verde-carbon); color:var(--blanco); }
/* Вымышленные внешние банки (контент-токены, НЕ UI-хром) */
.wcard.c-peninsular{ background:#2E3A46; color:var(--blanco);
  background-image:repeating-linear-gradient(115deg, rgba(255,255,255,.05) 0 2px, transparent 2px 14px); }
.wcard.c-cajanueva{ background:#9E5940; color:var(--blanco);
  background-image:radial-gradient(circle at 85% -20%, rgba(255,255,255,.14), transparent 55%); }
.wcard .holder{ position:absolute; inset-inline-start:18px; bottom:38px; font-size:11px; letter-spacing:.14em; opacity:.75; text-transform:uppercase; }
.wcard .tag-ext{ position:absolute; inset-inline-end:14px; bottom:14px; font-size:10.5px; font-weight:600; letter-spacing:.06em;
  padding:4px 9px; border-radius:999px; background:rgba(255,255,255,.18); text-transform:uppercase; }
/* на раскрытом face EXTERNA уходит в правый верх (у внешних эмблемы нет) — иначе перекрывает словесный знак сети в нижнем ряду */
.wcard.expanded .tag-ext{ top:14px; bottom:auto; }
/* Ф-2: чип пластика — EMV-компонент (контент-токен металлик, зона карт-арта; спека vd) */
.wcard .chip{
  position:absolute; left:18px; top:44px;
  width:46px; height:36px;            /* контакт-плита EMV, ~13% ширины карты 354px */
  border-radius:7px; border:none; padding:0;
  background:
    linear-gradient(160deg, rgba(255,255,255,.42) 0%, rgba(255,255,255,0) 38%),
    linear-gradient(135deg, #EAD9A6 0%, #D3BC7C 45%, #B99F5B 78%, #A98F4E 100%);
  box-shadow:
    inset 0 0 0 1px rgba(126,106,58,.55),      /* кант плиты */
    inset 0 1px 1px rgba(255,255,255,.5),      /* верхний блик */
    0 1px 2px rgba(31,42,36,.28);              /* посадка в пластик */
}
/* контактная разводка: центральная площадка + канавки */
.wcard .chip::before{
  content:''; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);
  width:18px; height:22px; border-radius:4px;
  border:1px solid rgba(126,106,58,.6);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.35);
}
.wcard .chip::after{
  content:''; position:absolute; inset:0;
  background:
    linear-gradient(rgba(126,106,58,.55), rgba(126,106,58,.55)) 0 9px/14px 1px no-repeat,
    linear-gradient(rgba(126,106,58,.55), rgba(126,106,58,.55)) 0 17.5px/14px 1px no-repeat,
    linear-gradient(rgba(126,106,58,.55), rgba(126,106,58,.55)) 0 26px/14px 1px no-repeat,
    linear-gradient(rgba(126,106,58,.55), rgba(126,106,58,.55)) right 9px/14px 1px no-repeat,
    linear-gradient(rgba(126,106,58,.55), rgba(126,106,58,.55)) right 17.5px/14px 1px no-repeat,
    linear-gradient(rgba(126,106,58,.55), rgba(126,106,58,.55)) right 26px/14px 1px no-repeat,
    linear-gradient(rgba(126,106,58,.55), rgba(126,106,58,.55)) 50% 0/1px 7px no-repeat,
    linear-gradient(rgba(126,106,58,.55), rgba(126,106,58,.55)) 50% 100%/1px 7px no-repeat;
}
/* стопка с перекрытием (как в деке Tap To Pay) */
.stack2{ display:flex; flex-direction:column; }
.stack2 .wcard{ margin-top:-42px; box-shadow:0 -8px 18px rgba(31,42,36,.16); }
.stack2 .wcard .net{ display:none; }
.stack2 .wcard:last-child{ height:112px; }
.stack2 .wcard:last-child .net{ display:block; bottom:12px; inset-inline-end:16px; }
.stack2 .wcard .pan{ font-size:14px; }
.stack2 .wcard .holder{ display:none; }
.stack2 .wcard .chip{ display:none; }
.stack2 .wcard .tag-ext{ font-size:9.5px; padding:3px 7px; }
.stack2 .wcard .nm{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.stack2 .wcard:first-child{ margin-top:0; box-shadow:none; }
.stack2 .wcard img.emblem{ width:26px; height:26px; inset-inline:auto; left:50%; transform:translateX(-50%); top:12px; }
/* Ф-1/Ф-3: карточный режим — тапнутая карта активна («можешь платить»), жесты + хинты + тап-альтернативы */
.card-mode{ display:flex; flex-direction:column; touch-action:pan-y; }
.mode-state{ display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:12px 2px 0;
  color:var(--verde-bosque); font-weight:600; font-size:14px; }
.mode-state .dot{ width:9px; height:9px; border-radius:50%; background:var(--verde-bosque); flex:none;
  animation:mode-ready 1.6s ease-in-out infinite; }
/* РР-1(б): usada-состояние face — точка без пульса, verde-niebla (мини-спека vd) */
.mode-state .dot.still{ background:var(--verde-niebla); animation:none; }
@keyframes mode-ready{ 0%,100%{ opacity:1; } 50%{ opacity:.35; } }
/* VD-O7-1 (ядро П-2): NFC-активация НА пластике — contactless-дуги зеркалом чипа, бегут изнутри наружу.
   right:18 = зеркало чипа по горизонтали; top:96 вместо 44 — рендер-факт vd: top:44 тонет под белой эмблемой */
@keyframes nfc-arc{ 0%,100%{ opacity:.2; } 30%{ opacity:1; } }
.wcard .ctl{ position:absolute; right:18px; top:96px; width:30px; height:30px; color:var(--blanco); opacity:.95; }
.wcard .ctl path{ animation:nfc-arc 1.5s ease-out infinite; }
.wcard .ctl path:nth-child(1){ animation-delay:.5s; }
.wcard .ctl path:nth-child(2){ animation-delay:.25s; }
.stack2 .wcard .ctl{ display:none; }
/* VD-O7-3: статус карт-режима одной строкой — идентичность + contactless-глиф 17px + nfc_listo */
.mode-state .ctl-mini{ width:17px; height:17px; flex:none; color:var(--verde-salvia); }
.mode-state .ctl-mini path{ animation:nfc-arc 1.5s ease-out infinite; }
.mode-state .ctl-mini path:nth-child(1){ animation-delay:.5s; }
.mode-state .ctl-mini path:nth-child(2){ animation-delay:.25s; }
.mode-ctas{ display:flex; gap:10px; margin-top:12px; }
.mode-ctas button{ flex:1; display:flex; align-items:center; justify-content:center; gap:8px; min-height:48px;
  border-radius:12px; border:1.5px solid var(--verde-bosque); background:transparent; color:var(--verde-bosque);
  font-family:var(--sans); font-weight:600; font-size:15px; cursor:pointer; }
.gest-hint{ display:flex; justify-content:space-between; color:var(--verde-salvia); font-size:12.5px; margin:10px 2px 0; }
.gest-hint span{ display:flex; align-items:center; gap:6px; }
/* Ф-3: анимационные подсказки направлений — бегущая стрелка ДО жеста */
@keyframes hint-run-r{ 0%{ transform:translateX(-4px); opacity:.35; } 55%{ opacity:1; } 100%{ transform:translateX(6px); opacity:0; } }
@keyframes hint-run-l{ 0%{ transform:translateX(4px); opacity:.35; } 55%{ opacity:1; } 100%{ transform:translateX(-6px); opacity:0; } }
.gest-hint [data-dir="right"] .icon{ animation:hint-run-r 1.4s ease-out infinite; }
.gest-hint [data-dir="left"] .icon{ animation:hint-run-l 1.4s ease-out infinite; }
/* Ф-4: экран суммы отправки с карты (ползунок с потолком источника) */
.ms-cap{ color:var(--tinta-suave); font-size:13.5px; text-align:center; margin-top:10px; }
.card-actions{ display:grid; grid-template-columns:1fr 1fr 1fr; margin-top:12px; padding:14px 6px; flex:none; }
.card-actions.g2{ grid-template-columns:1fr 1fr; }
.card-actions.g4{ grid-template-columns:1fr 1fr 1fr 1fr; }
.card-actions .act{ background:none; border-top:none; border-right:none; border-bottom:none; cursor:pointer; font-family:var(--sans); }
/* бейдж состояния карты (блокировка in-wallet, single-use «Usada») */
.badge-usada{ position:absolute; inset-inline-end:14px; top:14px; z-index:2; background:rgba(31,42,36,.75); color:var(--blanco);
  border-radius:999px; padding:5px 12px; font-size:11.5px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; }
.stack2 .wcard .badge-usada{ top:auto; bottom:10px; inset-inline-end:16px; font-size:9.5px; padding:3px 8px; }
/* Añadir tarjeta */
.form2{ padding:6px 18px; }
.form2 .field .inp, .form2 .field input.inp{ font-size:18px; font-family:var(--serif-num); font-variant-numeric:lining-nums; font-weight:600; color:var(--verde-carbon); }
.row2{ display:flex; gap:14px; }
.row2 .field{ flex:1; }
.scan-line{ display:flex; align-items:center; gap:10px; color:var(--verde-salvia); font-weight:600; font-size:15px;
  padding:14px 2px; background:none; border:none; cursor:pointer; font-family:var(--sans); min-height:44px; }
/* NFC */
.nfc-wrap{ display:flex; flex-direction:column; align-items:center; flex:1 1 auto; }
.nfc-rings{ width:190px; height:190px; border-radius:50%; border:1.5px solid var(--verde-niebla);
  display:flex; align-items:center; justify-content:center; margin-top:auto; position:relative; flex:none; }
.nfc-rings::before{ content:''; position:absolute; inset:24px; border-radius:50%; border:1.5px solid var(--gris-piedra); }
@keyframes nfc-pulse{ 0%{ transform:scale(.72); opacity:.75; } 70%{ opacity:.18; } 100%{ transform:scale(1.28); opacity:0; } }
/* пульс = РЕАЛЬНЫЙ элемент (не псевдо): живость наблюдаема по computed style (ORDER-3) */
.nfc-rings .pulse{ position:absolute; inset:-2px; border-radius:50%; border:2px solid var(--verde-salvia);
  animation:nfc-pulse 1.8s ease-out infinite; pointer-events:none; }
.static *,.static *::before,.static *::after{ animation:none !important; transition:none !important; }
.nfc-core{ width:96px; height:96px; border-radius:50%; background:var(--verde-bosque); color:var(--blanco);
  display:flex; align-items:center; justify-content:center; }
.nfc-cap{ font-family:var(--serif); font-weight:600; font-size:24px; color:var(--verde-carbon); margin-top:26px; text-align:center; }
.nfc-sub{ color:var(--tinta-suave); font-size:14.5px; margin-top:8px; text-align:center; margin-bottom:auto; }
/* демо-триггеры симуляции касания (колба-микрометка = честный мок, канон Cuenta B10) */
.sim-row{ display:flex; gap:10px; width:100%; margin:12px 0 4px; flex:none; }
.sim-btn{ flex:1; display:flex; align-items:center; justify-content:center; gap:8px; min-height:46px;
  border-radius:12px; border:1.5px dashed var(--verde-salvia); background:transparent; color:var(--verde-salvia);
  font-family:var(--sans); font-weight:600; font-size:14px; cursor:pointer; }
.sim-btn.ghost{ border-color:var(--gris-piedra); color:var(--tinta-suave); }
.sim-btn .icon{ width:18px; height:18px; }
/* мини-карта источника */
.src-card{ display:flex; align-items:center; gap:12px; padding:12px 16px; flex:none; }
.src-chip{ width:52px; height:34px; border-radius:8px; flex:none; position:relative; }
.src-chip img{ position:absolute; right:3px; top:3px; width:16px; height:16px; }
.src-card .k{ display:block; font-size:12px; font-weight:600; letter-spacing:.04em; color:var(--tinta-suave); text-transform:uppercase; }
.src-card .v{ display:block; font-size:15px; font-weight:500; margin-top:1px; }
/* share-link */
.link-pill{ display:flex; align-items:center; gap:10px; background:var(--paper); border:1px solid var(--gris-piedra);
  border-radius:14px; padding:13px 15px; font-size:13.5px; color:var(--verde-carbon); overflow:hidden; white-space:nowrap; }
/* веб-страница плательщика (вне приложения: без таббара; нейтральная плашка вместо URL-хрома) */
.web-top{ display:flex; flex-direction:column; align-items:center; padding:22px 0 6px; flex:none; }
.web-top img{ width:54px; height:54px; }
.web-top .wm{ font-family:var(--serif); font-weight:600; letter-spacing:.22em; font-size:13px; color:var(--verde-bosque); margin-top:6px; }
.paybtns{ display:flex; gap:10px; margin-top:12px; flex:none; }
.paybtn{ flex:1; display:flex; align-items:center; justify-content:center; min-height:48px; border-radius:12px;
  background:var(--verde-carbon); color:var(--blanco); font-weight:600; font-size:16px; border:none; font-family:var(--sans); cursor:pointer; }
.or-line{ display:flex; align-items:center; gap:12px; color:var(--tinta-suave); font-size:13px; margin:14px 0 2px; }
.or-line::before,.or-line::after{ content:''; flex:1; height:1px; background:var(--gris-piedra); }
.url-bar{ margin-top:auto; display:flex; align-items:center; gap:8px; background:#EDE8DC; border-radius:12px;
  padding:11px 14px; font-size:13px; color:var(--tinta-suave); flex:none; }
/* Inicio ambos: зона «Tus tarjetas» */
.mini-stack{ margin:0 18px 12px; padding:14px 16px 12px; }
.mini-stack .head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }
.mini-stack .head h2{ font-family:var(--serif); font-weight:600; font-size:20px; color:var(--verde-bosque); }
.mini-stack .head a{ color:var(--verde-salvia); display:flex; min-width:44px; min-height:32px; align-items:center; justify-content:flex-end; }
.mini-cards{ display:flex; gap:8px; }
.mini-c{ flex:1; height:64px; border-radius:12px; position:relative; padding:8px 10px; font-size:11.5px; font-weight:600;
  text-decoration:none; background-size:cover; background-position:center; color:#fff; text-shadow:0 1px 3px rgba(31,42,36,.4); }
.mini-c .p{ position:absolute; left:10px; bottom:7px; font-size:11px; letter-spacing:.06em; }
/* Отказ */
.fail-big{ width:112px; height:112px; border-radius:50%; background:var(--terracota); color:var(--blanco);
  display:flex; align-items:center; justify-content:center; margin-top:auto; }
.fail-big .icon{ width:48px; height:48px; stroke-width:2.4; }
/* Карточные операции (ORDER-7/8) */
.card-mini-vis{ height:118px; border-radius:14px; position:relative; overflow:hidden; padding:14px 16px; color:var(--blanco); margin-top:10px; flex:none; }
.card-mini-vis::before{ content:''; position:absolute; inset:0; background:var(--verde-bosque) url('/app/assets/card-ardelero.png') center/cover; z-index:0; }
.card-mini-vis > *{ position:relative; z-index:1; }
.pin-row{ display:flex; justify-content:center; gap:18px; margin-top:30px; }
.pin-d{ width:58px; height:72px; border-radius:14px; background:var(--paper); border:1px solid var(--gris-piedra);
  display:flex; align-items:center; justify-content:center; font-family:var(--serif-num); font-weight:600; font-size:34px; color:var(--verde-bosque); }
.req-card{ padding:4px 18px; margin-top:14px; cursor:pointer; }
.req-card .field .val .t-serif{ font-size:18px; }
.reveal-hint{ display:flex; align-items:center; gap:8px; justify-content:center; color:var(--tinta-suave); font-size:13.5px; margin-top:12px; }
.blocked-overlay{ position:absolute; inset:0; z-index:2; background:rgba(31,42,36,.55); border-radius:inherit;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px; color:var(--blanco); }
.blocked-overlay .icon{ width:30px; height:30px; }
/* Создание карты */
.opt-card{ display:flex; align-items:flex-start; gap:14px; padding:16px; border:1.5px solid var(--gris-piedra); border-radius:16px;
  margin-top:12px; background:var(--paper); cursor:pointer; width:100%; text-align:left; font-family:var(--sans); font-size:16px; color:var(--verde-carbon); }
.opt-card.on{ border-color:var(--verde-bosque); box-shadow:0 0 0 1px var(--verde-bosque) inset; }
.opt-card .ic{ width:44px; height:44px; border-radius:12px; background:#E5E9E2; color:var(--verde-bosque); display:flex; align-items:center; justify-content:center; flex:none; }
.opt-card .t{ font-weight:600; font-size:16px; }
.opt-card .d{ font-size:13.5px; color:var(--tinta-suave); margin-top:3px; line-height:1.4; }
/* Доки/аккордеон */
.acc{ padding:2px 18px; }
.acc .arow{ border-top:1px solid #ECE7DC; }
.acc .arow:first-child{ border-top:none; }
.acc .q{ display:flex; align-items:center; justify-content:space-between; font-weight:600; font-size:15.5px;
  width:100%; background:none; border:none; padding:15px 0; font-family:var(--sans); color:var(--verde-carbon); cursor:pointer; text-align:left; }
.acc .a{ font-size:14px; color:#5d6558; margin:0 0 14px; line-height:1.5; }
/* Баннер обновления (ORDER-9): ненавязчивый, над таббаром, не модал */
.update-banner{ position:absolute; left:14px; right:14px; bottom:96px; z-index:50; background:var(--verde-carbon); color:var(--blanco);
  border-radius:16px; padding:14px 16px; display:flex; align-items:center; gap:12px; box-shadow:0 10px 26px rgba(31,42,36,.35); }
.update-banner .tx{ flex:1; min-width:0; }
.update-banner .t{ display:block; font-weight:600; font-size:14.5px; }
.update-banner .s{ display:block; font-size:12.5px; color:var(--verde-niebla); margin-top:1px; }
.update-banner .btn{ background:var(--crema); color:var(--verde-bosque); border-radius:10px; padding:12px 14px;
  font-weight:700; font-size:14px; border:none; cursor:pointer; font-family:var(--sans); min-height:44px; }
/* Transferir sheet */
.tr-group{ font-size:12.5px; font-weight:600; letter-spacing:.05em; color:var(--tinta-suave); text-transform:uppercase; margin:14px 2px 4px; }
/* Выбор карты-приёмника (ORDER-4: экрана в эталоне нет, паттерн кошелька-стопки) */
.receptor-amount{ text-align:center; font-size:44px; color:var(--verde-bosque); margin:8px 0 4px; }
.receptor-amount .cur{ font-size:24px; }
.rec-row{ display:flex; align-items:center; gap:14px; padding:12px 0; border-top:1px solid #ECE7DC; width:100%;
  background:none; border-left:none; border-right:none; border-bottom:none; cursor:pointer; font-family:var(--sans);
  font-size:15.5px; font-weight:500; color:var(--verde-carbon); text-align:left; min-height:58px; }
.rec-row:first-child{ border-top:none; }
.rec-row .rc{ width:52px; height:34px; border-radius:8px; flex:none; position:relative; background-size:cover; background-position:center; }
.rec-row .t{ flex:1; min-width:0; }
.rec-row .t .sub{ display:block; color:var(--tinta-suave); font-size:13px; font-weight:400; margin-top:1px; }
.rec-row.used{ opacity:.55; cursor:default; }
/* Выбор после «+»: añadir externa / crear propia */
.choice-card{ position:relative; width:100%; padding:10px 18px 14px; display:flex; flex-direction:column; }

/* ===== Ридер-база simplify (issue-simplify §2, ось Б) ===== */
/* main-обёртка экранов: landmark без влияния на layout — экраны остаются flex-детьми .phone */
main.app-main{ display:contents; }
/* Видимый фокус токенами брендбука (SF-4; вид — VD-вход 16:37): bosque-кольцо на светлом,
   crema на тёмных поверхностях (hero, сплэш Idioma — иначе bosque на bosque невидим) */
:focus-visible{ outline:3px solid var(--verde-bosque); outline-offset:2px; }
.hero :focus-visible, .idioma :focus-visible{ outline-color:var(--crema); }
/* слайдеры глушат outline компонентным правилом выше по специфичности — возвращаем кольцо */
.slider-card input[type=range]:focus-visible{ outline:3px solid var(--verde-bosque); outline-offset:2px; }
/* VD-2: поля поиска/формы глушат кольцо компонентным outline:none — возвращаем (WCAG 2.4.7) */
.search input:focus-visible, .field .val input:focus-visible{ outline:3px solid var(--verde-bosque); outline-offset:2px; }
/* VD-3: программный фокус h1 (не Tab-стоп) — без вспышки кольца на тач-входе */
h1[tabindex="-1"]:focus-visible{ outline:none; }
/* Скрытый live-регион объявлений (SF-3): визуально невидим, читается скрин-ридером */
.sr-live{ position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden;
  clip-path:inset(50%); white-space:nowrap; border:0; }
/* ============================================================================
   MODO SENCILLO (issue-modo-mayores; эскиз vd variants-ms вариант A @5587b57,
   ратифицирован po 16:39). Скейл фактами vd ≥1.2: база 16→20, saldo 46→58,
   строки 15.5/13/19→20/17/24, пилюля 10.5→16, титул 34→41, группы 19→24.
   Все стили скоуплены секциями режима / body.modo-sencillo — полный режим
   не затронут (MM-10, растровый детерминизм).
   ============================================================================ */
/* Таббар в режиме СКРЫТ (решение po 16:39 п.2): навигация = карточки + back + футер-выход */
body.modo-sencillo .tabbar{ display:none; }

/* Sencillo-экраны: база 20px (×1.25) */
#scr-inicio-s, #scr-env-s1, #scr-env-s2, #scr-conf-s{ font-size:20px; }

/* ===== Inicio sencillo: канонная арка крупнее и тише (hero-s) ===== */
.hero-s{ padding:18px 24px 34px; }
.hero-s .hero-top{ height:44px; justify-content:center; }
#scr-inicio-s .greeting{ font-size:31px; margin-top:12px; }           /* 26 → 31 */
#scr-inicio-s .saldo-label{ font-size:17px; margin-top:12px; }        /* 14 → 17 */
#scr-inicio-s .saldo{ font-size:58px; }                               /* 46 → 58 */
#scr-inicio-s .saldo .cur{ font-size:32px; }
#scr-inicio-s .cuenta-line{ margin-top:10px; font-size:18px; }        /* 15 → 18 */
#scr-inicio-s .cuenta-line .iban{ font-size:17px; }                   /* 13.5 → 17 */

/* Карточки-действия (MM-3: 2..4, один primary-акцент; мишень во всю ширину ≥92px) */
.acciones{ display:flex; flex-direction:column; gap:12px; padding:20px 18px 8px; flex:1 1 auto; min-height:0; overflow-y:auto; }
.accion-s{
  display:flex; align-items:center; gap:16px; padding:18px 18px;
  background:var(--paper); border:1.5px solid var(--gris-piedra); border-radius:var(--r-card);
  min-height:92px; text-decoration:none; color:var(--verde-carbon); flex:none;
}
.accion-s .ring{
  width:56px; height:56px; border-radius:50%; border:1.5px solid var(--verde-bosque);
  color:var(--verde-bosque); display:flex; align-items:center; justify-content:center; flex:none;
}
.accion-s .ring .icon{ width:28px; height:28px; }
.accion-s .t{ flex:1 1 auto; font-size:23px; font-weight:600; }
.accion-s .chev{ width:20px; height:20px; color:#A9ACA2; }
/* один primary на экран: Enviar — заливка, остальные тихие */
.accion-s.primary{ background:var(--verde-bosque); border-color:var(--verde-bosque); color:var(--blanco); }
.accion-s.primary .ring{ border-color:rgba(255,255,255,.65); color:var(--blanco); }
.accion-s.primary .chev{ color:rgba(255,255,255,.65); }

/* Постоянный выход из режима (MM-2: видим на Inicio и Movimientos; мишень 60px) */
.modo-exit{
  flex:none; display:flex; align-items:center; justify-content:center; gap:10px;
  min-height:60px; margin-top:auto; padding:10px 18px calc(12px + env(safe-area-inset-bottom));
  background:var(--paper); border-top:1px solid var(--gris-piedra);
  color:var(--verde-bosque); font-size:18px; font-weight:600; text-decoration:none;
}
.modo-exit .icon{ width:22px; height:22px; }

/* ===== Movimientos sencillo = канонный #scr-movimientos под body.modo-sencillo
   (лента НЕ дублируется: те же .mov-строки, тот же счёт, muted-знак+пилюля fb3 —
   зеркало по построению; решение po 16:47). .solo-modo (back в appbar, футер-выход)
   в полном режиме скрыты — MM-10 цел. ===== */
.solo-modo{ display:none; }
body.modo-sencillo .solo-modo{ display:flex; }
.nav-back-s{ padding:13px; margin:0; }        /* мишень 52×52 ≥48 (канонный back 44) */
.nav-back-s .icon{ width:26px; height:26px; }
/* VD-MS-2: составной селектор — иначе проигрывает канонному h1.screen-title (34px) */
h1.screen-title.screen-title-s{ font-size:41px; }            /* 34 → 41 */
/* VD-MS-6: канонный back (Detalle и др.) под режимом — мишень 52px, визуальная позиция та же */
body.modo-sencillo .nav-back{ padding:15px; margin:-7px; }
/* VD-MS-4: тост в режиме — над футер-выходом (не кроет подпись нижней карточки) */
body.modo-sencillo .toast{ bottom:calc(72px + env(safe-area-inset-bottom)); }
body.modo-sencillo #scr-movimientos .search,
body.modo-sencillo #scr-movimientos .chips{ display:none; } /* второй уровень убран (MM-5) */
body.modo-sencillo #scr-movimientos .screen-title{ font-size:41px; }
body.modo-sencillo #scr-movimientos .group-h{ font-size:24px; margin:18px 2px 10px; }
/* Крупная строка = двухъярусный грид эскиза vd поверх канонной разметки: обёртки
   .who/.amt-col распускаются display:contents → имя ЯРУСОМ 1 во всю ширину (до 2 строк,
   БЕЗ эллипсиса), категория/банк ←→ сумма ярусом 2, пилюля ярусом 3; chevron скрыт —
   тап = вся строка ≥86px */
body.modo-sencillo #scr-movimientos .mov{ display:grid; grid-template-columns:52px 1fr auto;
  column-gap:14px; row-gap:2px; align-items:center; padding:17px 0; min-height:86px; }
body.modo-sencillo #scr-movimientos .mov > svg.icon{ display:none; }  /* chevron полной формы */
body.modo-sencillo #scr-movimientos .mov .who,
body.modo-sencillo #scr-movimientos .mov .amt-col{ display:contents; }
body.modo-sencillo #scr-movimientos .mov .cat{ grid-row:1 / span 2; width:52px; height:52px; }
body.modo-sencillo #scr-movimientos .mov .cat .icon{ width:26px; height:26px; }
body.modo-sencillo #scr-movimientos .mov .who .n{ grid-column:2 / 4; grid-row:1;
  font-weight:500; font-size:20px; line-height:1.25; white-space:normal; text-overflow:clip;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
body.modo-sencillo #scr-movimientos .mov .who .d{ grid-column:2 / 3; grid-row:2;
  font-size:17px; line-height:1.3; }
body.modo-sencillo #scr-movimientos .mov .amt{ grid-column:3 / 4; grid-row:2;
  justify-self:end; font-size:24px; }
body.modo-sencillo #scr-movimientos .bank-sq{ grid-row:1 / span 2; width:52px; height:52px;
  border-radius:12px; font-size:17px; }
body.modo-sencillo #scr-movimientos .nas-pill{ grid-column:2 / 4; grid-row:3;
  justify-self:start; margin-top:4px; padding:2px 10px 3px; font-size:16px; }

/* ===== Enviar sencillo (vd-токены; сам флоу vd не эскизировал — та же система) ===== */
.envs-body{ padding:0 20px 16px; display:flex; flex-direction:column; flex:1 1 auto; min-height:0; overflow-y:auto; }
.envs-card{ margin-top:16px; padding:18px 20px; }
/* VD-MS-1: составной селектор — иначе каскад проигрывает канонному .field .lbl (12.5px) */
.field .lbl.lbl-s{ font-size:16px; }                       /* 12.5 → 16 */
/* VD-MS-5: аффорданс редактируемости полей env-s1 — видимый контур, focus-отклик */
.field .val input.input-s{ font-size:24px; min-height:52px;
  border:1.5px solid var(--gris-piedra); border-radius:12px; padding:12px 14px; }
.field .val input.input-s:focus{ border-color:var(--verde-bosque); }
/* следствие контура MS-5: IBAN (27 знаков serif-num) при 24px клипается в рамке —
   20px удерживает полный номер видимым (input-значение мерилом не пинится) */
.field .val input#env-s-iban{ font-size:20px; }
.field-error-s{ font-size:16px; }                          /* 13 → 16 */
.importe-row-s{ display:flex; align-items:center; gap:10px; }
.input-importe-s{ background:none; border:none; outline:none; width:100%; min-width:0;
  color:var(--verde-bosque); font-size:44px; min-height:56px; }
.input-importe-s::placeholder{ color:#A9ACA2; }
.cur-s{ font-size:28px; color:var(--verde-bosque); font-family:var(--serif-num); font-weight:600; }
.envs-info{ margin-top:12px; color:var(--verde-carbon); font-size:16px; }
.envs-cta{ margin-top:auto; padding-top:16px; }
.btn-primary-s{ font-size:21px; min-height:64px; }         /* CTA 17 → 21 (≥1.2), мишень 64 */
.conf-rows-s{ margin-top:16px; padding:6px 20px; }
/* VD-MS-3: serif имени Beneficiario на conf-s (t-serif стоит в разметке — правило-предок не матчилось) */
.crow-s .v.t-serif{ font-family:var(--serif); font-weight:500; }
.crow-s{ display:flex; flex-direction:column; gap:2px; padding:15px 0; border-top:1px solid #ECE7DC; }
.crow-s:first-child{ border-top:none; }
.crow-s .k{ font-size:16px; font-weight:600; color:#8B8E85; }
.crow-s .v{ font-size:22px; color:var(--verde-carbon); }
.crow-s .v.big{ font-size:34px; color:var(--verde-bosque); }
.crow-s .sub-s{ font-size:16px; color:var(--tinta-suave); }

/* ===== Наследование крупной типографики каноном (ТЗ: Detalle/успех-экраны — отдельные
   версии не строятся). Скоуп body.modo-sencillo — в полном режиме нулевой эффект. ===== */
body.modo-sencillo #scr-detalle .det-merchant{ font-size:31px; }
body.modo-sencillo #scr-detalle .det-amount{ font-size:54px; }
body.modo-sencillo #scr-detalle .det-pill{ font-size:17px; }
body.modo-sencillo #scr-detalle .drow{ font-size:18px; }
body.modo-sencillo #scr-detalle .det-nas .t{ font-size:18px; }
body.modo-sencillo #scr-detalle .det-nas .b{ font-size:17px; }
body.modo-sencillo #scr-detalle .btn-outline{ font-size:19.5px; }
body.modo-sencillo #scr-enviada .result-title{ font-size:40px; }
body.modo-sencillo #scr-enviada .result-sub{ font-size:19px; }
body.modo-sencillo #scr-enviada .receipt .drow{ font-size:18px; }
body.modo-sencillo #scr-enviada .btn-primary{ font-size:21px; min-height:64px; }
/* ============ 5-А voice-pipe (issue-voice-pipe §1–2; DOM-контракт мерила @cc09eb8) ============ */
#scr-inicio{ position:relative; } /* локальный якорь абсолютов hero */
/* Б-1: микрофон живёт в правом кластере (.chrome-actions), поток задаёт кластер — своих
   абсолютов кнопка не несёт. Мишень 44px (T-B14) сохранена коробкой, не позиционированием. */
.voice-mic{ width:44px; height:44px; border-radius:50%; flex:none;
  display:flex; align-items:center; justify-content:center; border:none; cursor:pointer;
  padding:0; background:transparent; color:var(--blanco); }
/* 🔴 vd п.5: заливка = ПРИЗНАК СОСТОЯНИЯ, не украшение. В покое кластер ОДНОРОДЕН (обе иконки
   голые), заливка приходит только с [data-phase] — переход в запись читается наличием заливки. */
.voice-mic .icon{ width:22px; height:22px; } /* кегль иконок кластера сведён (vd п.4) */
.nav-row .voice-mic{ color:var(--verde-carbon); } /* светлый хром: иконка не белым по белому */
.voice-mic:active{ transform:scale(.94); }
/* U-1 (R1-2): двойная индикация записи — кнопка несёт состояние (класс iOS-точки).
   Ограничения оси VD: цвет = terracota (семантика записи как у .vs-ind, второй цвет не вводить);
   ритм = семья voz-pulse (1.1s ease-in-out); proc НЕ пульсирует записью — статичная заливка
   (пульс при «Reconociendo…» = ложный сигнал «ещё пишем», приватность-семантика).
   Пульс кнопки = box-shadow-кольцо тем же ритмом: буквальный voz-pulse (scale 1.55) на 44px-мишени
   разнёс бы хром hero; иконка blanco на terracota 4.80:1 (замер VD, норма 3:1). */
.voice-mic[data-phase]{ background:var(--terracota); }
.voice-mic[data-phase="rec"]{ animation:voz-mic-pulse 1.1s ease-in-out infinite; }
@keyframes voz-mic-pulse{ 0%,100%{ box-shadow:0 0 0 0 rgba(176,90,60,.55) } 50%{ box-shadow:0 0 0 9px rgba(176,90,60,0) } }
/* слой ОДИН на уровне приложения (Б-1, спека ux 1а): якорь — .phone, не секция экрана */
.voice-layer{ position:absolute; left:16px; right:16px; bottom:96px; z-index:40;
  display:flex; flex-direction:column; gap:8px; pointer-events:none; }
.voice-layer[hidden]{ display:none; } /* вырез Д-1: [hidden] обязан бить display:flex */
.voice-state,.voice-error,.voice-result{ border-radius:14px; padding:11px 14px;
  font-size:14px; box-shadow:0 6px 20px rgba(31,42,36,.16); }
.voice-state[hidden],.voice-error[hidden],.voice-result[hidden]{ display:none; }
/* появление transient-пилюль — в системе движения базы (.toast fade .18s); исчезновение мгновенное */
.voice-state:not([hidden]),.voice-error:not([hidden]),.voice-result:not([hidden]){ animation:voz-in .18s ease; }
.voice-state{ background:var(--verde-carbon); color:var(--blanco); display:flex; align-items:center; gap:9px; }
.vs-ind{ width:10px; height:10px; flex:none; }
/* различимость фаз ФОРМОЙ движения, не только цветом/текстом (UX step-1 п.3):
   запись = пульс-точка · «распознаю…» = спиннер */
.voice-state[data-phase="rec"] .vs-ind{ border-radius:50%; background:var(--terracota);
  animation:voz-pulse 1.1s ease-in-out infinite; }
.voice-state[data-phase="proc"] .vs-ind{ border-radius:50%; background:transparent;
  border:2px solid rgba(255,255,255,.35); border-top-color:var(--blanco);
  animation:voz-spin .9s linear infinite; }
@keyframes voz-pulse{ 0%,100%{ transform:scale(1); opacity:1 } 50%{ transform:scale(1.55); opacity:.5 } }
@keyframes voz-spin{ to{ transform:rotate(360deg) } }
@keyframes voz-in{ from{ opacity:0; transform:translateY(6px) } }
.voice-error{ background:var(--terracota-fondo); color:var(--terracota-tinta); }
.voice-result{ background:var(--paper); color:var(--verde-carbon); }
.voice-result .voice-note{ margin-top:5px; font-size:11.5px; color:var(--tinta-suave); }
/* 5-Б §2.3: поля префилла редактируемы ДО подтверждения. pointer-events возвращаем ТОЛЬКО самим
   полям, а не пилюле: слой висит над CTA экрана, и кликабельная подложка перехватывала бы тап по
   кнопке подтверждения — ровно класс «выглядит кликабельно, но не работает», только наоборот. */
.voice-prefill{ margin-top:8px; display:flex; gap:8px; }
.voice-prefill[hidden]{ display:none; }
.vp-field{ flex:1; display:flex; flex-direction:column; gap:2px; }
.vp-field[hidden]{ display:none; }
.vp-lbl{ font-size:11.5px; color:var(--tinta-suave); }
.vp-input{ width:100%; min-height:44px; border:1px solid var(--gris-piedra); border-radius:10px;
  padding:0 10px; font:inherit; font-size:16px; color:var(--verde-carbon); background:var(--blanco); }

/* ===== 5-Б: упрощённый режим — голосовой блок наравне с остальным (находки vd 1 и 2) =====
   Ключуем от КОРНЯ, а не от id экрана: слой уехал на уровень приложения, и селектор вида
   #scr-inicio-s .voice-result не совпал бы ни с чем — правило было бы «применено» и мертво. */
body.modo-sencillo .voice-layer{ bottom:calc(72px + env(safe-area-inset-bottom)); } /* таббара в режиме нет */
body.modo-sencillo .voice-result,
body.modo-sencillo .voice-state,
body.modo-sencillo .voice-error{ font-size:18px; }
body.modo-sencillo .voice-result .voice-note{ font-size:15px; } /* оговорка о границах фичи обязана читаться */
body.modo-sencillo .vp-lbl{ font-size:15px; }
body.modo-sencillo .vp-input{ font-size:19px; min-height:52px; }
/* потолок высоты: крупный кегль × длинная фраза × низкий вьюпорт — платит ВЫСОТА блока,
   а не кегль и не полнота текста (форма развязки, согласованная vd/ux заранее) */
.voice-result{ max-height:52vh; overflow-y:auto; }

/* ===== prefers-reduced-motion: три голосовые анимации — по спеке vd =====
   Не «снять движение», а РАЗЛИЧАТЬ фазы без движения: иначе спиннер станет статичным
   разорванным кольцом (артефакт), а rec/proc на кнопке схлопнутся в одну терракоту. */
@media (prefers-reduced-motion: reduce){
  .voice-state[data-phase="rec"] .vs-ind{ animation:none; background:var(--terracota); }
  .voice-state[data-phase="proc"] .vs-ind{ animation:none;
    border-color:rgba(255,255,255,.9); border-top-color:rgba(255,255,255,.9); }
  .voice-mic[data-phase="rec"]{ animation:none; box-shadow:0 0 0 4px rgba(176,90,60,.35); }
  .voice-state:not([hidden]),.voice-error:not([hidden]),.voice-result:not([hidden]){ animation:voz-in-reduce .18s ease; }
}
@keyframes voz-in-reduce{ from{ opacity:0 } } /* появление остаётся, сдвиг уходит */
/* тоггл озвучки в Perfil: состояние = позиция шарика (не только цвет — UX п.6) */
.voz-row{ cursor:pointer; }
.voz-check{ position:absolute; opacity:0; pointer-events:none; }
.voz-switch{ flex:none; width:44px; height:26px; border-radius:13px; background:var(--gris-piedra);
  position:relative; transition:background .18s; }
.voz-switch::after{ content:''; position:absolute; inset-inline-start:3px; top:3px; width:20px; height:20px;
  border-radius:50%; background:var(--blanco); box-shadow:0 1px 3px rgba(31,42,36,.25); transition:inset-inline-start .18s; }
.voz-check:checked ~ .voz-switch{ background:var(--verde-salvia); }
.voz-check:checked ~ .voz-switch::after{ inset-inline-start:21px; }
/* #18 п.10: свитч-аффорданс строки Modo sencillo — вид voz-switch, но БЕЗ контролов
   toggle-семантики (checkbox/role=switch): канон T-B39 «toggle-контрол в Perfil один
   (озвучка)», состояние двигает класс .on из applyModo() */
.modo-switch{ flex:none; width:44px; height:26px; border-radius:13px; background:var(--gris-piedra);
  position:relative; transition:background .18s; }
.modo-switch::after{ content:''; position:absolute; inset-inline-start:3px; top:3px; width:20px; height:20px;
  border-radius:50%; background:var(--blanco); box-shadow:0 1px 3px rgba(31,42,36,.25); transition:inset-inline-start .18s; }
.modo-switch.on{ background:var(--verde-salvia); }
.modo-switch.on::after{ inset-inline-start:21px; }

/* ============================================================================
   i18n-12loc: скрипт-стеки, зеркалирование, пикер g14, пейджер карусели
   (issue-i18n-12loc §2; реестр зеркалирования vd v2; ловушки ux по позициям)
   ============================================================================ */

/* --- скрипт-класс приезжает атрибутом html[data-script] из applyI18nStatics --- */
html[data-script="arabic"]{
  /* ОБЪЯВЛЕННЫЙ скрипт-стек (красная линия vd: латин-сабсет БЕЗ объявленного стека = □□□).
     Своя гарнитура ПЕРВОЙ, дальше системные арабские — на неизвестной машине демо. */
  --serif:'Noto Sans Arabic', system-ui, 'Segoe UI', Tahoma, 'Geeza Pro', serif;
  --sans:'Noto Sans Arabic', system-ui, 'Segoe UI', Tahoma, 'Geeza Pro', sans-serif;
  /* цифры — ОДНА система на локаль: латинские ВЕЗДЕ (вердикт vd), поэтому .num остаётся
     на Source Serif 4 lining и арабская гарнитура идёт только фолбэком для букв рядом */
  --serif-num:'Source Serif 4', 'Noto Sans Arabic', Georgia, serif;
}
html[data-script="han"]{
  --serif:'Noto Sans SC', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', serif;
  --sans:'Noto Sans SC', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', sans-serif;
  --serif-num:'Source Serif 4', 'Noto Sans SC', 'PingFang SC', Georgia, serif;
}
/* правило vd-c: QA без синтетики — синтетический вес маскирует отсутствие начертания */
html[data-script="latinext"], html[data-script="cyrillic"],
html[data-script="arabic"], html[data-script="han"]{ font-synthesis:none; }
/* правило vd-b: метрики скриптов (ar ≥1.6, zh ≥1.5), ноль line-height:1;
   перекрываем и локальные плотные правила прозы — иначе арабская вязь слипается */
html[data-script="arabic"] .phone{ line-height:1.65; }
html[data-script="han"] .phone{ line-height:1.55; }
html[data-script="arabic"] .det-nas .b, html[data-script="arabic"] .opt-card .d,
html[data-script="arabic"] .acc .a, html[data-script="arabic"] .nrow .tx .t{ line-height:1.65; }
html[data-script="han"] .det-nas .b, html[data-script="han"] .opt-card .d,
html[data-script="han"] .acc .a, html[data-script="han"] .nrow .tx .t{ line-height:1.55; }

/* --- ЗЕРКАЛИРОВАНИЕ: только помеченные ГЛИФЫ, никогда контейнеры ---
   Контракт маркировки (пара lead-i18n/vd, тред 12:01): носитель = атрибут
   data-directional на самом svg. Сплошного [dir=rtl] .icon НЕТ и быть не может: класс
   icon носят лого, вордмарки и предметные иконки — сплошное правило отзеркалило бы
   запрещённое (лого/цифры/графики/тени/градиенты: свет не зеркалится). */
html[dir="rtl"] [data-directional]{ transform:scaleX(-1); }

/* --- Ф-2 × RTL (vd #17-1): физическая карта — предметный визуал, макет НЕ перекомпоновывается
   RTL-контекстом (тот же канон, что выше: свет/пластик не зеркалятся). Без этого логические
   inset-inline-* детей резолвились от rtl → эмблема уезжала из правого угла в левый и ложилась
   на absolute-чип (left:18px, пересечение 89% площади чипа в ar). direction:ltr возвращает
   раскладку пластика к эталону; порядок глифов PAN держит внутренний остров span[dir=ltr]. --- */
.wcard{ direction:ltr; }

/* --- числовые острова (Ф-1/Ф-3): визуальный порядок держит dir="ltr" в разметке,
   класс — только для отладки и для явного inline-бокса вокруг разрезанных фраз --- */
.ltr-num{ unicode-bidi:isolate; }
.pct{ font-variant-numeric:lining-nums; }

/* --- Ф-2: шапка карты В ПОТОКЕ (кандидат vd; «гарантированный gap + min-width, НЕ absolute»).
   .hdr обязан быть position:static: правило .wcard > *{position:relative} иначе перехватится
   контейнером, и absolute-дети развёрнутой карты начнут считать координаты от однострочной
   шапки, а не от карты. Подъём над фоновым ::before возвращаем детям .hdr. --- */
.wcard > .hdr{ position:static; }
.wcard .hdr > *{ position:relative; z-index:1; }
.wcard.expanded .hdr .pan{ position:absolute; inset-inline-start:18px; bottom:14px; }
.wcard.expanded .hdr .tag-ext{ position:absolute; inset-inline-end:14px; top:14px; bottom:auto; }
/* развёрнутая карта: заголовок не заезжает под эмблему-дерево (64px + воздух) */
.wcard.expanded .nm{ padding-inline-end:78px; }
/* стопка: имя + бейдж + номер одним флекс-рядом. Усекается ТОЛЬКО имя банка;
   номер НИКОГДА (flex:0 0 auto + nowrap) — усечённый номер нельзя сверить. */
.stack2 .wcard .hdr{ display:flex; align-items:center; gap:12px; min-width:0; }
.stack2 .wcard .hdr .nm{ flex:1 1 auto; min-width:0; max-width:none; padding-inline-end:0; }
.stack2 .wcard .hdr .tag-ext{ position:static; inset:auto; flex:0 0 auto; transform:none; }
.stack2 .wcard .hdr .pan{ position:static; inset:auto; flex:0 0 auto; white-space:nowrap; margin-inline-start:auto; }

/* --- пейджер карусели кошелька: аффорданс ФОРМОЙ вместо направления в копи (T-B47).
   Направление НЕ задаётся физически — обычный флекс-ряд наследует каркас, поэтому
   в RTL первая точка сама встаёт справа, вместе с направлением жеста. --- */
.pager{ display:flex; gap:7px; justify-content:center; margin:10px 0 0; }
.pager .pdot{ width:7px; height:7px; border-radius:50%; background:var(--gris-piedra); flex:none; }
.pager .pdot.on{ background:var(--verde-bosque); width:18px; border-radius:999px; }

/* --- Н-7 (заливка слайдера): нативный range разворачивает ХОД бегунка сам, а градиент
   как красил слева, так и красит → в RTL заливка и бегунок расходятся на 260 из 310px.
   Скоуп бьёт ТОЛЬКО по background webkit-ветки; ::-moz-range-progress НЕ трогаем —
   gecko наследует направление сам, и правка сломала бы firefox (мерило гоняется в chromium
   и этого не увидит — засада кросс-браузерная). --- */
html[dir="rtl"] .slider-card input[type=range]::-webkit-slider-runnable-track{
  background:linear-gradient(to left, var(--verde-bosque) 0%, var(--verde-bosque) var(--pct,5%), #E4DFD3 var(--pct,5%), #E4DFD3 100%); }

/* --- пикер g14: сетка 2×6, единая высота ряда, мишень ≥169×56 (потолок 68) ---
   Гарды ux: скролла нет (языки под фолдом = «поиск»), заголовков групп нет (группировку
   несёт ПОРЯДОК реестра), только эндонимы, флаги запрещены. Высоту ряда диктует самый
   высокий скрипт и она ОДНА на все 12 — разная высота ломает сетку сильнее лишних 8px.
   Кегль нормализуется ПО СКРИПТУ (ar +9%, zh −4%, кириллица 1:1) — оптика лейбла
   меняется, ГАБАРИТ кнопки нет: мишень фиксируется независимо. */
.idioma .btns button{ min-height:58px; max-height:66px; height:58px; padding:0 10px;
  font-size:17px; line-height:1.2; white-space:nowrap; overflow:hidden; }
/* эндоним не влезает по ширине → НИКОГДА ellipsis (обрезанный эндоним = «язык добавлен
   формально»): двигается ГЕОМЕТРИЯ — кегль ряда, а не текст */
.idioma .btns button{ text-overflow:clip; }
.idioma .btns button[data-script="arabic"]{ font-family:'Ardelero G14 Arabic', 'Noto Sans Arabic', system-ui, 'Geeza Pro', sans-serif; font-size:18.5px; }
.idioma .btns button[data-script="han"]{ font-family:'Ardelero G14 Han', 'Noto Sans SC', 'PingFang SC', sans-serif; font-size:16.3px; }
.idioma .btns button[data-script="cyrillic"], .idioma .btns button[data-script="latinext"]{
  font-family:'Ardelero G14 Latin', 'Inter', system-ui, sans-serif; }
.idioma .btns button[data-script="latin"]{ font-family:'Ardelero G14 Latin', 'Playfair Display', Georgia, serif; }

.idioma .cap{ margin:12px 0 18px; }
/* превентив ux: в RTL-контексте порядок ЧТЕНИЯ сетки переворачивается (es окажется
   верх-СПРАВА) — это НЕ регресс; сам сплэш до выбора языка остаётся LTR-каркасом */
#scr-idioma{ direction:ltr; }

/* находка Б перегона vd: имя карты не заезжает под бейдж Usada/Bloqueada (резерв как у эмблемы) */
.wcard.expanded.has-badge .nm{ padding-inline-end:96px; }

/* ===== HERO сплэша (V1-композиция, спека sketch.html vd) ===== */
.idioma .hello{ margin-top:34px; text-align:center; }
/* фикс-высота big: один nowrap-ряд, высота = line-box — смена приветствия не сдвигает
   layout ни на пиксель (планка vd: layout-shift 0, замер bbox до/после) */
.idioma .hello .big{ font-family:'Playfair Display','Noto Sans Arabic','Noto Sans SC',Georgia,serif; font-weight:600; font-size:64px; color:var(--crema);
  height:78px; line-height:78px; white-space:nowrap; overflow:hidden;
  opacity:1; transition:opacity .2s ease; }
@media (prefers-reduced-motion: reduce){ .idioma .hello .big{ transition:none; } }
/* оптическая нормализация БОЛЬШОГО приветствия per-скрипт (заказ vd, g14-шкала при базе 64):
   арабица ниже по x-высоте → +9%, хань плотнее → −4%; кириллица 1:1. Кегль, НЕ бокс:
   высота бокса заморожена планкой layout-shift 0 — клип ascender-ов правится кеглем. */
.idioma .hello .big[data-script=arabic]{ font-size:70px; }
.idioma .hello .big[data-script=han]{ font-size:61px; }
/* строка ПРИГЛУШЁННАЯ (гард ux: не осветлять «для читаемости» — акцентная пара станет тройкой) */
.idioma .hello .others{ margin-top:18px; color:var(--verde-niebla); font-size:15px; line-height:1.75;
  max-width:330px; margin-inline:auto; font-family:'Inter', system-ui, sans-serif;
  display:flex; flex-wrap:wrap; justify-content:center; column-gap:14px; row-gap:6px; padding:0 16px; }
.idioma .hello .others span{ white-space:nowrap; }
.idioma .hello .others span[data-script=arabic]{ font-family:'Noto Sans Arabic', system-ui, sans-serif; }
.idioma .hello .others span[data-script=han]{ font-family:'Noto Sans SC', 'PingFang SC', sans-serif; }
/* V3-кнопки: плашки с мягкой глубиной вместо голых рамок (монотонность 11/12 снята) */
.idioma .btns .btn-ghost{ background:rgba(251,249,244,.10); border:none; color:var(--paper);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.09), 0 2px 8px rgba(0,0,0,.18); }
.idioma .btns .btn-cream{ box-shadow:0 4px 14px rgba(0,0,0,.28); }

/* ===== Asistente (таск 4, волна Б) — сведено с i18n-12loc прогона №9:
   логические свойства вместо физических, вход в кластере Б-1 ===== */
/* ===== Asistente (таск 4, волна Б): чат поверх трубы 5-А ===== */
/* вход-кнопка: пара к микрофону (та же вторичная форма хрома — модальность, не движок) */
/* Мерж 5-Б×таск-4: вход живёт в правом кластере .chrome-actions (Б-1) — поток задаёт кластер,
   своих абсолютов кнопка не несёт (тот же ход, что dev сделал с .voice-mic). Мишень 44px цела. */
/* 🔴 issue #15 п.3: подпись входа — ЕДИНСТВЕННЫЙ текстовый узел ассистента без скрипт-стека.
   `button` не наследует font-family от body, а соседи (.asst-sug/.asst-input/.asst-echo-fix)
   свой var(--sans) несут. Пока подпись была испанской, дефект был невидим — латиницу Arial
   рисует; с переводом на 10 локалей она стала арабской/ханьской/кириллической, то есть ровно
   красной линией vd (латин-дефолт без объявленного стека = □□□ регулятору). line-height:1
   снят там же: правило vd-b требует ar ≥1.6 / zh ≥1.5, при 8.5px это 14.45px и в height:44px
   вместе с иконкой (18+1) укладывается с запасом. 1.7, а не 1.6: computed отдаёт округлённые
   px, и ровно пороговое 1.6 даёт 13.6/8.5 = 1.5999… — прибор честно краснеет на границе. */
.asst-entry{ width:48px; height:44px; border-radius:12px; flex:none;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px;
  border:none; cursor:pointer; background:rgba(255,255,255,.14); color:var(--blanco);
  font-family:var(--sans); }
.asst-entry .icon{ width:18px; height:18px; }
/* усечение — страховка КЛАССА, а не затычка под одну локаль: подпись 8.5px в кнопке 48px
   у части языков идёт впритык (uk ровно 48px), и без неё длинное слово наезжает на соседей
   кластера. Данные подобраны так, чтобы усечение не срабатывало ни на одной из 12. */
.asst-entry-cap{ font-size:8.5px; line-height:1.7; font-weight:600; letter-spacing:.02em;
  max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.asst-entry:active{ transform:scale(.94); }
/* U-8: тот же контрол на той же стороне обоих экранов — теперь это обеспечивает
   САМ кластер .chrome-actions, отдельного позиционирования не требуется. */
.asst-ayuda-entry{ position:static; width:auto; height:auto; border-radius:var(--r-card);
  display:flex; align-items:center; gap:10px; padding:14px; background:var(--paper);
  color:var(--verde-bosque); text-decoration:none; font-weight:600; min-height:44px; }
.asst-ayuda-entry .icon{ width:20px; height:20px; flex:none; }

/* экран чата */
.asst-head{ gap:10px; }
.asst-head .asst-title{ color:var(--blanco); font-family:var(--serif); font-weight:600; font-size:20px; }
.asst-demo{ position:absolute; inset-inline-end:10px; top:50%; transform:translateY(-50%); max-width:132px;
  border:1px solid rgba(255,255,255,.5); border-radius:999px; padding:2px 9px 3px;
  font-size:10.5px; line-height:1.25; color:var(--blanco); text-align:center; }
.asst-log{ flex:1 1 auto; min-height:0; overflow-y:auto; display:flex; flex-direction:column;
  gap:10px; padding:14px 16px; }
.asst-hello{ display:flex; flex-direction:column; gap:10px; margin-top:auto; }
.asst-hello p{ background:var(--paper); border:1px solid var(--gris-piedra); border-radius:14px;
  border-start-start-radius:4px; padding:10px 12px; max-width:88%; align-self:flex-start; }
.asst-sugs{ display:flex; flex-direction:column; gap:8px; align-items:flex-start; }
.asst-sug{ min-height:44px; display:flex; align-items:center; border:1.5px solid var(--verde-salvia);
  border-radius:999px; padding:8px 16px; background:transparent; color:var(--verde-bosque);
  font-family:var(--sans); font-size:15px; font-weight:600; cursor:pointer; text-align:start; }
.asst-sug:active{ transform:scale(.97); }
.asst-msg{ max-width:86%; padding:9px 12px 10px; border-radius:14px; overflow-wrap:anywhere; }
.asst-msg[data-role="user"]{ align-self:flex-end; background:var(--verde-bosque); color:var(--blanco);
  border-end-end-radius:4px; }
.asst-msg[data-role="assistant"]{ align-self:flex-start; background:var(--paper);
  border:1px solid var(--gris-piedra); border-end-start-radius:4px; }
.asst-role{ display:block; font-size:11px; font-weight:600; letter-spacing:.02em; opacity:.78; margin-bottom:3px; }
/* чип числа ИЗ ДАННЫХ (§2.3, провенанс «данные»): авторитетная пилюля — форма ≠ эхо */
.asst-amount{ display:inline-block; background:var(--verde-bosque); color:var(--blanco);
  border-radius:999px; padding:1px 10px 3px; font-family:var(--serif-num); font-weight:700;
  font-variant-numeric:lining-nums; white-space:nowrap; unicode-bidi:isolate; direction:ltr; }
/* эхо услышанного (§2.3, провенанс «пользователь»): пунктирная цитата, обратимая */
.asst-echo{ display:inline-block; background:transparent; color:var(--tinta-suave);
  border:1.5px dashed var(--gris-piedra); border-radius:6px; padding:1px 8px 2px;
  font-style:italic; font-weight:400; white-space:nowrap; unicode-bidi:isolate; direction:ltr; }
/* Плашка эха стадии ВВОД (координатор 16:16): цитата услышанного + путь ИСПРАВИТЬ.
   Измеримые требования ux 16:14 проверяются ЛИНЕЙКОЙ, а не на глаз:
   · gap до «Editar» = 8px — ровно как у кнопки отправки от поля (.asst-inputrow gap:8px);
   · «Editar» ≥44×44 и по площади НЕ МЕНЬШЕ кнопки отправки (46×46 = 2116px²):
     min-height 46 × min-width 92 = 4232px² — под давлением жмут то, что ближе и крупнее. */
.asst-echoplate{ align-self:flex-start; max-width:92%; display:flex; align-items:center;
  flex-wrap:wrap; gap:8px; padding:8px 10px; border-radius:12px; background:var(--paper);
  border:1px solid var(--gris-piedra); }
.asst-echo-label{ font-size:13.5px; color:var(--tinta-suave); }
.asst-echoplate .asst-echo-fix{ min-width:92px; min-height:46px; }
/* U-4: путь исправить — ВНЕ тела фразы, своей строкой под ответом */
.asst-echo-actions{ margin-top:6px; }
.asst-echo-fix{ display:inline-flex; align-items:center; justify-content:center;
  background:none; border:1.5px solid var(--verde-bosque); border-radius:12px;
  color:var(--verde-bosque); text-decoration:underline; font-family:var(--sans); font-size:15px;
  font-weight:600; cursor:pointer; padding:2px 12px; }
.asst-soporte{ background:var(--paper); border:1px solid var(--gris-piedra);
  color:var(--verde-carbon); }
.asst-num{ unicode-bidi:isolate; direction:ltr; }
.asst-aviso{ margin-top:8px; background:var(--terracota-fondo); color:var(--terracota-tinta);
  border-radius:10px; padding:8px 10px; font-size:14px; }
.asst-error{ align-self:center; max-width:92%; background:var(--terracota-fondo);
  color:var(--terracota-tinta); border-radius:10px; padding:8px 12px; font-size:14px; text-align:center; }
.asst-busy{ display:flex; align-items:center; gap:8px; color:var(--tinta-suave); font-size:14px;
  align-self:flex-start; }
.asst-dots{ display:inline-flex; gap:3px; }
.asst-dots i{ width:6px; height:6px; border-radius:50%; background:var(--verde-salvia);
  animation:asst-dot 1.2s ease-in-out infinite; }
.asst-dots i:nth-child(2){ animation-delay:.2s; }
.asst-dots i:nth-child(3){ animation-delay:.4s; }
@keyframes asst-dot{ 0%,100%{ opacity:.3 } 50%{ opacity:1 } }
body.static .asst-dots i{ animation:none; }
.asst-inputrow{ display:flex; align-items:flex-end; gap:8px; flex:none;
  padding:10px 12px calc(10px + env(safe-area-inset-bottom, 0px));
  background:var(--paper); border-top:1px solid var(--gris-piedra); }
.asst-inputrow .voice-mic{ position:static; flex:none; background:var(--crema);
  color:var(--verde-bosque); border:1.5px solid var(--gris-piedra); }
.asst-input{ flex:1 1 auto; min-width:0; resize:none; border:1.5px solid var(--gris-piedra);
  border-radius:14px; padding:11px 12px; font-family:var(--sans); font-size:16px; line-height:1.3;
  color:var(--verde-carbon); background:var(--blanco); min-height:44px; max-height:96px; overflow-y:auto; }
.asst-input:focus{ outline:none; border-color:var(--verde-salvia); }
.asst-send{ flex:none; width:46px; height:46px; border-radius:50%; border:none; cursor:pointer;
  display:flex; align-items:center; justify-content:center; background:var(--verde-bosque);
  color:var(--blanco); }
.asst-send .icon{ width:20px; height:20px; }
.asst-send:active{ transform:scale(.94); }
.asst-send:disabled{ opacity:.55; cursor:default; }
/* U-6: live-обёртка статуса+анонсера — участвует в колонке лога прозрачно */
.asst-live{ display:flex; flex-direction:column; }

/* ===== P-13а [U-7, ратификация po на гейте]: sencillo-масштаб чата ПРЕЗЕНТАЦИОННЫМ
   слоем над тем же ядром (упрощаются операции, не содержание) ===== */
body.modo-sencillo .asst-msg{ font-size:19px; }
body.modo-sencillo .asst-hello p{ font-size:19px; }
body.modo-sencillo .asst-sugs{ align-items:stretch; }
body.modo-sencillo .asst-sug{ min-height:52px; font-size:17px; }
body.modo-sencillo .asst-input{ font-size:19px; }
body.modo-sencillo .asst-error{ font-size:16px; }
body.modo-sencillo .asst-aviso{ font-size:16px; }
