/* login-v2.css — новый экран входа «Приёмная» по макету Астры (пакет
   anexis-login-final, 24.09.2026). Всё в этом файле работает ТОЛЬКО внутри
   .anx-login (её собственный CSS, перенесён из source/login.css почти
   дословно — правки отмечены) плюс переключатель видимости
   #login-legacy/#login-v2 по html[data-ui-login="v2"] (флаг ставится в
   инлайн-скрипте <head> admin.html, синхронно, по slug в адресе — до входа
   clinic_id ещё не известен). Гейтинг сейчас: только тестовая клиника
   (crvvvvv) — см. claude/tdi-clinic-login-screen-redesign.md.

   Ничего в этом файле не переопределяет глобальные .btn/.control/.card/
   .panel — все правила либо под .anx-login, либо под html[data-ui-login]. */

/* ===== переключатель legacy/v2 (чистый CSS, без JS-подмены DOM) ===== */
#login-v2 { display: none; }
html[data-ui-login="v2"] #login-legacy { display: none; }
/* 25.09.2026 — было "display: block". #login-v2 — тот же элемент, что и
   .anx-login (см. HTML), у которой ниже (строка 35) объявлен собственный
   внутренний flex-столбец (шапка/сцена растягивается/подвал), нужный, чтобы
   контент по вертикали центрировался и заполнял экран, а не "прилипал"
   наверху с пустым местом под подвалом на больших мониторах — именно это
   было заметно на 2560×1440. #login-v2 — ID-селектор (специфичность
   перекрывает .anx-login{display:flex}), поэтому "block" здесь тихо
   ломало flex-раскладку класса ниже на ЛЮБОМ экране, просто заметнее на
   крупных. "block" был не нужен даже для скролла — тот уже решён отдельно
   на #login-screen.active (строка ~26, overflow-y:auto), а min-height:100svh
   (не height:100vh) у .anx-login и так не обрезает и не фиксирует высоту. */
html[data-ui-login="v2"] #login-v2 { display: flex; }

/* .login-screen — общий на оба варианта фиксированный оверлей (position:fixed;
   inset:0), см. components.css. Для v2 он должен вести себя как обычный
   прокручиваемый контейнер во весь экран (внутренний скролл, а не
   пришедшийся вплотную bежевый flex-центр с паддингом 20px, как у легаси) —
   спецификация Астры прямо просит "обычная прокрутка, не фиксировать
   высоту, не обрезать" (design-spec.md, раздел "Адаптация"). Прокрутка
   остаётся ВНУТРИ этого fixed-контейнера (overflow-y:auto), а не на body —
   так решение не трогает ничего вне экрана входа. */
html[data-ui-login="v2"] #login-screen.active {
  display: block;
  padding: 0;
  background: var(--paper);
  overflow-y: auto;
}
/* фон экрана логина непрозрачен сразу (скрывает #app-shell за собой без
   просвечивания); плавно проявляется только внутренний блок .anx-login */
html[data-ui-login="v2"] #login-screen.active .anx-login {
  opacity: 0;
  transform: translateY(10px);
  animation: ax-login-fadein .85s cubic-bezier(.2,.7,.2,1) .25s forwards;
}
@keyframes ax-login-fadein { from { opacity: 0; transform: translateY(10px) } to { opacity: 1; transform: translateY(0) } }
@media (prefers-reduced-motion: reduce) {
  html[data-ui-login="v2"] #login-screen.active .anx-login { animation: none; opacity: 1; transform: none; }
}

/* ===== перенесено из source/login.css (Астра, пакет anexis-login-final) ===== */
.anx-login,.anx-login *{box-sizing:border-box}
.anx-login{position:relative;isolation:isolate;min-height:100svh;display:flex;flex-direction:column;background:var(--paper);color:var(--ink);font:var(--fs-base)/1.5 var(--font-body);overflow:clip}
.anx-login [hidden]{display:none!important}
.anx-login p,.anx-login h1,.anx-login h2{margin:0}
.anx-login button,.anx-login input{font:inherit}
.anx-login button{cursor:pointer}
.anx-login button:disabled{cursor:default}
.anx-login :is(button,input,summary,a):focus-visible{outline:2px solid var(--action-bg);outline-offset:3px}
.anx-login .login-masthead,.anx-login .login-footer{width:min(1120px,calc(100% - 96px));margin-inline:auto;display:flex;justify-content:space-between;align-items:center;gap:var(--sp-6)}
.anx-login .login-masthead{padding-block:var(--sp-8);font-size:var(--fs-caption);color:var(--ink-soft)}
.anx-login .login-context{display:flex;align-items:center;gap:var(--sp-3)}
.anx-login .login-context:before{content:"";width:6px;height:6px;border-radius:var(--r-pill);background:var(--action-bg)}
.anx-login .login-masthead-note{font-size:var(--fs-micro)}
.anx-login .login-skip{position:absolute;left:24px;top:-100px;padding:12px;background:var(--card);color:var(--action-bg);z-index:10}
.anx-login .login-skip:focus{top:12px}
.anx-login .login-stage{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 432px;gap:96px;align-items:center;flex:1;width:min(1056px,calc(100% - 96px));margin:24px auto 40px;min-height:0}
.anx-login .login-architecture{position:absolute;inset:-105px -140px -65px -160px;pointer-events:none;z-index:-1;overflow:hidden;opacity:.85;mask-image:linear-gradient(to bottom,transparent,#000 14%,#000 86%,transparent)}
.anx-login .login-arch{position:absolute;border:1px solid color-mix(in srgb,var(--border) 72%,transparent);border-radius:50% 50% 0 0 / 35% 35% 0 0;transform:rotate(-10deg);background:linear-gradient(113deg,color-mix(in srgb,var(--card) 84%,transparent),color-mix(in srgb,var(--selection-bg) 25%,transparent) 51%,color-mix(in srgb,var(--border) 28%,transparent));box-shadow:inset 16px 8px 24px color-mix(in srgb,var(--card) 70%,transparent),18px 22px 35px color-mix(in srgb,var(--ink) 4%,transparent)}
.anx-login .login-arch-one{width:630px;height:880px;left:110px;top:-80px}
.anx-login .login-arch-two{width:490px;height:760px;left:185px;top:5px}
.anx-login .login-arch-three{width:350px;height:645px;left:260px;top:86px;background:linear-gradient(120deg,var(--paper),color-mix(in srgb,var(--selection-bg) 22%,var(--paper)))}
.anx-login .login-plinth{position:absolute;bottom:0;left:80px;width:740px;height:80px;border-top:1px solid color-mix(in srgb,var(--border) 60%,transparent);transform:rotate(-10deg);background:linear-gradient(var(--paper),transparent)}
.anx-login .login-editorial{padding-block:var(--sp-8);max-width:456px}
.anx-login .login-eyebrow{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-micro);font-weight:var(--fw-medium);letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-soft);margin-bottom:var(--sp-8)}
.anx-login .login-eyebrow>span{width:20px;height:1px;background:var(--action-bg)}
.anx-login .login-editorial h2{font:var(--fw-medium) var(--fs-hero)/1.17 var(--font-brand);letter-spacing:-1.1px}
.anx-login .login-editorial h2>span{color:var(--action-bg)}
.anx-login .login-editorial>p{margin-top:var(--sp-6);color:var(--ink-soft);font-size:var(--fs-sm);line-height:1.8}
.anx-login .login-editorial-caption{display:flex;gap:var(--sp-4);align-items:center;margin-top:64px;font-size:var(--fs-micro);line-height:1.6;color:var(--ink-soft)}
.anx-login .login-caption-line{width:32px;height:1px;background:var(--border-control)}
.anx-login .login-card{position:relative;background:var(--card);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-8);box-shadow:var(--shadow-md);min-width:0}
.anx-login .login-card:before{content:"";position:absolute;top:-1px;left:var(--sp-8);width:48px;height:3px;background:var(--action-bg);border-radius:0 0 var(--r-xs) var(--r-xs)}
.anx-login .login-clinic{display:flex;align-items:center;gap:var(--sp-3);padding-bottom:var(--sp-6);border-bottom:1px solid var(--border)}
.anx-login .login-clinic-avatar{display:grid;place-items:center;width:48px;height:48px;flex:none;background:var(--selection-bg);color:var(--action-bg);border:1px solid var(--border);border-radius:var(--r-md);font-size:var(--fs-sm);font-weight:var(--fw-medium)}
.anx-login .login-clinic-avatar:has(img:not([hidden])){background:var(--card);width:64px}
.anx-login .login-clinic-avatar img{width:100%;height:100%;max-height:46px;object-fit:contain;padding:4px}
.anx-login .login-clinic-label{min-width:0;display:grid;gap:2px}
.anx-login .login-overline{font-size:var(--fs-micro);color:var(--ink-soft)}
.anx-login .login-clinic-label strong{font-size:var(--fs-base);font-weight:var(--fw-medium);line-height:1.45;overflow-wrap:anywhere}
.anx-login .login-heading{margin-block:var(--sp-6)}
.anx-login .login-heading h1{font:var(--fw-medium) var(--fs-xl)/1.25 var(--font-heading);letter-spacing:-.65px}
.anx-login .login-heading p{font-size:var(--fs-sm);color:var(--ink-soft);margin-top:var(--sp-2)}
/* Разметка v2 переиспользует общий класс .field (components.css, .field{
   margin-bottom:16px;...}) для совместимости с автозаполнением/семантикой —
   он не конфликтует по display/gap (наш селектор специфичнее), но лишний
   margin-bottom нужно погасить явно, иначе поля получают двойной отступ. */
.anx-login .login-field{display:grid;gap:var(--sp-2);margin-top:var(--sp-4);margin-bottom:0}
.anx-login .login-field label{font-size:var(--fs-caption);font-weight:var(--fw-medium)}
.anx-login .control{width:100%;height:var(--control-h-touch);min-height:var(--control-h-touch);padding:0 var(--sp-3);background:var(--card);border:1px solid var(--border-control);border-radius:var(--r-sm);color:var(--ink);font-size:var(--fs-base);box-shadow:none}
.anx-login .control::placeholder{color:var(--ink-soft);opacity:1}
.anx-login .control:focus{border-color:var(--action-bg)}
.anx-login .control[aria-invalid=true]{border-color:var(--money-bad-ink)}
.anx-login .control:read-only{background:var(--paper)}
.anx-login .login-field-error{font-size:var(--fs-caption);color:var(--money-bad-ink)}
.anx-login .login-field-error:empty{display:none}
.anx-login .login-password-wrap{position:relative}
.anx-login .login-password-wrap>.control{padding-right:52px}
.anx-login .btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);height:var(--control-h-touch);min-height:var(--control-h-touch);padding:0 var(--sp-4);border-radius:var(--r-sm);border:1px solid transparent;font-weight:var(--fw-medium);font-size:var(--fs-sm);text-decoration:none;transition:background var(--motion-fast),border-color var(--motion-fast)}
.anx-login .login-eye{position:absolute;right:0;top:0;width:44px;padding:0;background:transparent;color:var(--ink-soft)}
.anx-login .login-eye:hover{color:var(--action-bg);background:var(--selection-bg)}
.anx-login .login-eye svg,.anx-login .login-submit-arrow{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.anx-login .login-eye-slash{display:none}.anx-login .login-eye[aria-pressed=true] .login-eye-slash{display:block}
.anx-login .login-submit{position:relative;width:100%;margin-top:var(--sp-6);background:var(--action-bg);color:var(--action-fg)}
.anx-login .login-submit:hover:not(:disabled){background:var(--action-hover)}
.anx-login .login-submit:disabled{opacity:1}
.anx-login .login-submit-arrow{position:absolute;right:var(--sp-4)}
.anx-login .login-feedback,.anx-login .login-brand-notice{padding:var(--sp-3);margin-top:var(--sp-4);font-size:var(--fs-caption);border-radius:var(--r-sm);line-height:1.65;background:var(--money-bad-soft);color:var(--money-bad-ink)}
.anx-login .login-brand-notice{margin:0 0 var(--sp-4);background:var(--paper);color:var(--ink-soft);border:1px solid var(--border)}
.anx-login .login-feedback[data-kind=success]{background:var(--money-good-soft);color:var(--money-good-ink)}
.anx-login .login-submit-status{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.anx-login .login-spinner{width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:login-spin .8s linear infinite}
.anx-login .login-help{margin-top:var(--sp-3);font-size:var(--fs-caption);color:var(--ink-soft)}
.anx-login .login-help summary{min-height:44px;display:flex;justify-content:center;align-items:center;cursor:pointer;list-style:none;text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--border-control)}
.anx-login .login-help summary::-webkit-details-marker{display:none}
.anx-login .login-help summary:hover{color:var(--action-bg)}
.anx-login .login-help p{padding:var(--sp-3);background:var(--paper);border-radius:var(--r-sm);line-height:1.7}
.anx-login .login-help a{color:inherit}
.anx-login .login-footer{border-top:1px solid var(--border);padding-block:var(--sp-5);font-size:var(--fs-micro);color:var(--ink-soft)}
.anx-login .login-platform{display:flex;align-items:center;gap:var(--sp-4)}
.anx-login .login-wordmark{width:160px;line-height:0}
.anx-login .login-wordmark img{width:100%;height:auto;display:block}
.anx-login[data-composition=focus] .login-editorial{display:none}
.anx-login[data-composition=focus] .login-stage{grid-template-columns:432px;justify-content:center;gap:0}
.anx-login[data-composition=focus] .login-architecture{left:0;right:0;opacity:.65}
.anx-login[data-composition=focus] .login-arch-one{left:calc(50% - 330px);width:660px;top:-70px;transform:rotate(0)}
.anx-login[data-composition=focus] .login-arch-two{left:calc(50% - 420px);width:840px;top:-140px;transform:rotate(0)}
.anx-login[data-composition=focus] .login-arch-three,.anx-login[data-composition=focus] .login-plinth{display:none}
@keyframes login-spin{to{transform:rotate(360deg)}}
@media(min-width:1440px){.anx-login .login-stage{margin-block:40px 56px}}
@media(max-width:1050px){.anx-login .login-stage{grid-template-columns:minmax(0,1fr) 400px;gap:48px;width:calc(100% - 64px)}.anx-login .login-masthead,.anx-login .login-footer{width:calc(100% - 64px)}.anx-login .login-editorial h2{font-size:var(--fs-hero)}.anx-login .login-desktop-break{display:none}.anx-login .login-arch-one{left:0}.anx-login .login-arch-two{left:75px}.anx-login .login-arch-three{left:150px}}
@media(max-width:820px){.anx-login .login-stage,.anx-login[data-composition=focus] .login-stage{grid-template-columns:minmax(0,432px);justify-content:center;gap:0;min-height:0;width:calc(100% - 48px);margin-block:16px 40px}.anx-login .login-editorial{display:none}.anx-login .login-masthead-note{display:none}.anx-login .login-masthead,.anx-login .login-footer{width:calc(100% - 48px)}.anx-login .login-masthead{padding-block:24px}.anx-login .login-footer>p{display:none}.anx-login .login-footer{justify-content:center}.anx-login .login-architecture{opacity:.55}.anx-login .login-platform{gap:12px}}
@media(max-width:480px){.anx-login .login-stage,.anx-login[data-composition=focus] .login-stage{width:calc(100% - 32px);margin-block:8px 24px}.anx-login .login-card{padding:var(--sp-6)}.anx-login .login-card:before{left:var(--sp-6)}.anx-login .login-masthead,.anx-login .login-footer{width:calc(100% - 48px)}.anx-login .control{font-size:var(--fs-md)}.anx-login .login-heading h1{font-size:var(--fs-xl)}.anx-login .login-wordmark{width:148px}.anx-login .login-architecture{opacity:.3}}
@media(prefers-reduced-motion:reduce){.anx-login .btn{transition:none}.anx-login .login-spinner{animation:none}}

/* ===== типографика Onest/Manrope — только на экране входа, независимо от
   общего флага data-ui-typography (тот гейтится по clinic_id ПОСЛЕ входа и
   тут ещё не может быть выставлен). Дизайн-спека Астры для логина явно
   требует Onest/Manrope вне зависимости от статуса общего переноса. ===== */
.anx-login{--font-body:"Onest","Segoe UI",Arial,sans-serif;--font-heading:"Onest","Segoe UI",Arial,sans-serif;--font-brand:"Manrope","Onest","Segoe UI",Arial,sans-serif}

/* ===== добавлено при переносе (не из пакета Астры): малозаметная кнопка
   технического доступа (сырой Admin API Key), как и у легаси-экрана — в
   макете Астры её не было, т.к. она не входит в обычный пользовательский
   сценарий входа. Тот же приём: почти прозрачная, без подписи. ===== */
.anx-login .login-tech-gear-v2{
  position:absolute; top:14px; right:14px;
  width:20px; height:20px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  color:var(--ink-soft); opacity:0.28; cursor:pointer;
  background:none; border:none; padding:0;
  transition:opacity 0.15s; z-index:2;
}
.anx-login .login-tech-gear-v2 svg{width:13px;height:13px}
.anx-login .login-tech-gear-v2:hover{opacity:0.55}
