/* patient-page.css — Полноценная страница пациента (Астра, пакет от 15.09.2026,
   START-HERE-1-to-1.md — перенос 1:1, без исключений владельца).
   Содержимое — стили из source/workspace.css эталонного пакета, БЕЗ изменений:
   все правила уже скопированы под классы .pw-* (integration-notes.md: "Классы
   .pw-* относятся только к новому пространству пациента"), поэтому не задевают
   остальные разделы (.card/.btn/.control там не переопределяются — используется
   тот же контракт, см. .pt-btn/.pt-control ниже, которые = .btn/.control).
   Токены (--paper/--card/--ink/--ink-soft/--border/--border-control/--action-bg/
   --selection-bg/--shadow-sm/md/--money-*-ink/soft/--accent-strong) — уже есть в
   tokens.css, отдельных алиасов не потребовалось. */

/* 22.09.2026 — фикс бага «кнопка "← Пациенты" неравномерно подсвечивается».
   Причина: #page-patient — это .panel.active (components.css: display:flex;
   flex-direction:column), а .pw-back — его прямой ребёнок. По спецификации
   CSS дочерний flex-элемент с display:inline-flex блокифицируется в display:
   flex и растягивается на всю ширину контейнера (align-items:stretch по
   умолчанию) — сама .pw-back невидимо занимает всю строку. Это не баг само
   по себе (то же самое происходит и с .docv3-backbar-btn на странице врача —
   см. doctors-v3.css), но у .pw-back не было СВОЕГО правила на :hover, и
   срабатывало общее `button:hover{background:var(--accent-strong)}` из
   components.css — сплошная акцентная заливка на всю ширину страницы вместо
   маленькой ссылки-кнопки. Фикс — по образцу .docv3-backbar-btn:hover:
   свой :hover без фона, с подчёркиванием. */
.pw{max-width:none;min-width:0}.pw a{color:var(--action-bg);text-underline-offset:3px}.pw-back{display:inline-flex;gap:8px;align-items:center;border:0;background:none;color:var(--ink);font:inherit;font-weight:600;padding:0 0 10px;cursor:pointer}.pw-back:hover{background:none;color:var(--ink);text-decoration:underline}.pw-identity{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.pw-person{display:flex;gap:16px;align-items:center;min-width:0}.pw-person .pt-avatar{width:52px;height:52px;flex-basis:52px;font-size:17px}.pw-person h1{margin:0 0 6px;font-size:28px;line-height:1.25;letter-spacing:-.7px;overflow-wrap:anywhere}.pw-person p{font-size:12px;color:var(--ink-soft);margin:0}.pw-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.pw-menu{position:relative}.pw-menu summary{list-style:none}.pw-menu summary::-webkit-details-marker{display:none}.pw-menu-list{position:absolute;right:0;top:44px;min-width:230px;background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow-md);padding:6px;border-radius:8px;z-index:20}.pw-menu-list button{display:block;width:100%;text-align:left;background:none;border:0;padding:10px;border-radius:5px;color:var(--ink);font-size:12px;cursor:pointer}.pw-menu-list button:hover{background:var(--paper)}.pw-menu-list .danger{color:var(--money-bad-ink)}.pw-strip{display:grid;grid-template-columns:.9fr 1.25fr 1fr;gap:0;margin:24px 0 18px;background:var(--card);border:1px solid var(--border);border-radius:10px}.pw-strip>div{padding:16px 20px;min-width:0}.pw-strip>div+div{border-left:1px solid var(--border)}.pw-kicker{font-size:11px;color:var(--ink-soft);display:block;margin-bottom:6px}.pw-strip strong{font-size:16px;font-weight:600;display:block}.pw-strip small{font-size:11px;color:var(--ink-soft);display:block;margin-top:4px}.pw-alert{display:flex;align-items:center;gap:10px;background:var(--money-warn-soft);color:var(--money-warn-ink);border-radius:6px;padding:10px 14px;font-size:12px;margin-bottom:20px}.pw-alert button{margin-left:auto;border:0;background:none;color:inherit;text-decoration:underline;text-underline-offset:3px;white-space:nowrap;font-size:12px;cursor:pointer}.pw-tabs{position:sticky;top:0;z-index:5;background:var(--paper);display:flex;gap:24px;border-bottom:1px solid var(--border);overflow:auto;margin-bottom:24px;scrollbar-width:thin}.pw-tabs a{padding:15px 0 13px;white-space:nowrap;text-decoration:none;color:var(--ink-soft);font-size:13px;border-bottom:2px solid transparent;font-weight:600;cursor:pointer}.pw-tabs a[aria-current=page]{color:var(--action-bg);border-color:var(--action-bg)}.pw-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:20px}.pw-stack{display:grid;gap:20px;align-content:start}.pw-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:22px;min-width:0}.pw-cardhead,.pw-sectionhead{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}.pw-cardhead h2,.pw-sectionhead h2{font-size:16px;line-height:1.35;margin:0;letter-spacing:-.2px}.pw-cardhead a{font-size:12px;white-space:nowrap}.pw-sub{color:var(--ink-soft);font-size:12px;margin:5px 0 0}.pw-row{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:14px 0;border-bottom:1px solid var(--border);font-size:13px}.pw-row:last-child{border-bottom:0;padding-bottom:0}.pw-row:first-child{padding-top:0}.pw-row strong{font-weight:600;display:block}.pw-row small{display:block;color:var(--ink-soft);font-size:11px;margin-top:4px}.pw-row a{font-size:12px}.pw-num{font-variant-numeric:tabular-nums;white-space:nowrap}.pw-pill{display:inline-flex;align-items:center;padding:4px 8px;border-radius:100px;font-size:11px;line-height:1.3;font-weight:600;background:var(--paper);color:var(--ink-soft);white-space:nowrap}.pw-pill.good{background:var(--money-good-soft);color:var(--money-good-ink)}.pw-pill.warn{background:var(--money-warn-soft);color:var(--money-warn-ink)}.pw-pill.info{background:var(--money-info-soft);color:var(--money-info-ink)}.pw-pill.bad{background:var(--money-bad-soft);color:var(--money-bad-ink)}.pw-progress{height:6px;background:var(--paper);border-radius:5px;overflow:hidden;margin:16px 0 8px}.pw-progress span{display:block;height:100%;background:var(--money-good)}.pw-progress-caption{display:flex;justify-content:space-between;font-size:11px;color:var(--ink-soft)}.pw-timeline{position:relative;padding-left:18px;margin-top:2px;border-left:1px solid var(--border)}.pw-timeline>div{position:relative;padding:0 0 22px}.pw-timeline>div:last-child{padding-bottom:0}.pw-timeline>div:before{content:'';width:7px;height:7px;border-radius:50%;background:var(--accent-strong);position:absolute;left:-22px;top:6px;box-shadow:0 0 0 4px var(--card)}.pw-timeline p{font-size:13px;margin:5px 0}.pw-timeline time{font-size:11px;color:var(--ink-soft)}.pw-smallbtn{border:0;background:none;color:var(--action-bg);font-size:12px;padding:4px 0;cursor:pointer;text-align:left}.pw-subnav{display:flex;gap:8px;margin-bottom:20px}.pw-subnav button{padding:8px 14px;border-radius:6px;border:1px solid var(--border);background:var(--card);font-size:12px;color:var(--ink-soft);cursor:pointer;min-height:36px}.pw-subnav button[aria-pressed=true]{background:var(--selection-bg);color:var(--action-bg);border-color:var(--border-control)}.pw-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;max-width:900px}.pw-form .pt-field{gap:8px}.pw-form .pt-field>label{color:var(--ink)}.pw-value{font-size:14px;white-space:pre-wrap;overflow-wrap:anywhere;padding:7px 0;min-height:36px}.pw-readonly{margin:0 0 16px;padding:12px 14px;background:var(--paper);border-radius:6px;font-size:12px;color:var(--ink-soft)}.pw-checks{display:grid;grid-template-columns:1fr 1fr;gap:12px}.pw-checks label{display:flex;align-items:flex-start;gap:8px;font-size:12px}.pw-checks input{accent-color:var(--action-bg);margin-top:2px}.pw-savebar{position:sticky;bottom:0;background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow-sm);padding:14px 18px;display:flex;justify-content:space-between;align-items:center;gap:16px;border-radius:8px;margin-top:20px;z-index:4}.pw-savebar span{font-size:12px;color:var(--ink-soft)}.pw-savebar>div{display:flex;gap:8px}.pw-tools{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:20px}.pw-tools .pt-field{min-width:160px;max-width:240px}.pw-table-wrap{overflow:auto;max-width:100%}.pw-table{width:100%;min-width:650px;border-collapse:collapse;font-size:12px}.pw-table th{text-align:left;color:var(--ink-soft);font-weight:600;font-size:11px;background:var(--paper);padding:11px 12px;border-bottom:1px solid var(--border)}.pw-table td{padding:14px 12px;vertical-align:middle;border-bottom:1px solid var(--border)}.pw-table tr:last-child td{border-bottom:0}.pw-table td:last-child,.pw-table th:last-child{text-align:right}.pw-table strong{font-weight:600}.pw-table small{display:block;font-size:11px;color:var(--ink-soft);margin-top:4px}.pw-table .pt-btn{font-size:12px}.pw-visitdetail{padding:16px;background:var(--paper);border-radius:8px;margin-top:12px}.pw-empty{text-align:center;padding:40px 20px;border:1px dashed var(--border);border-radius:8px;color:var(--ink-soft)}.pw-empty h3{font-size:16px;color:var(--ink);margin:0 0 8px}.pw-empty p{font-size:13px;margin:0 0 16px}.pw-tooth-layout{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:20px}.pw-teeth-scroll{overflow:auto}.pw-teeth{min-width:590px}.pw-jaw{display:grid;grid-template-columns:repeat(16,1fr);gap:4px;margin:14px 0 22px}.pw-tooth{min-height:76px;border:1px solid var(--border);border-radius:8px;background:var(--card);padding:6px 2px;cursor:pointer;color:var(--ink-soft);display:flex;flex-direction:column;align-items:center;gap:5px;font-size:11px}.pw-tooth:nth-child(8){margin-right:5px}.pw-tooth:nth-child(9){margin-left:5px}.pw-tooth svg{height:30px;width:24px;fill:var(--tooth-fill,var(--paper));stroke:var(--tooth-ink,var(--border-control));stroke-width:1.5}.pw-tooth[aria-pressed=true]{outline:2px solid var(--action-bg);outline-offset:1px;background:var(--selection-bg)}.pw-tooth[data-status=caries]{--tooth-fill:#f7e3e0;--tooth-ink:#cf6259}.pw-tooth[data-status=filled]{--tooth-fill:#e6e6f4;--tooth-ink:#6f74b8}.pw-tooth[data-status=crown]{--tooth-fill:#f5e6cc;--tooth-ink:#c28a3e}.pw-tooth[data-status=implant]{--tooth-fill:#ece7f4;--tooth-ink:#8a6fb8}.pw-tooth[data-status=canal]{--tooth-fill:#f5e9d5;--tooth-ink:#c98a3f}.pw-tooth[data-status=missing] svg{opacity:.45;stroke-dasharray:3 2}.pw-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:11px;color:var(--ink-soft);margin:16px 0 0}.pw-legend span{display:flex;align-items:center;gap:6px}.pw-legend i{height:9px;width:9px;border-radius:2px;display:inline-block;background:var(--c)}.pw-tooth-side{background:var(--paper);border-radius:8px;padding:18px;align-self:start}.pw-tooth-side h3{font-size:18px;margin:0 0 18px}.pw-tooth-side .pt-field{margin-bottom:16px}.pw-tooth-side .pt-btn{width:100%;margin-top:6px;white-space:normal}.pw-plan-total{display:flex;justify-content:flex-end;gap:36px;padding:18px 0 0;font-size:12px;color:var(--ink-soft);border-top:1px solid var(--border);margin-top:18px}.pw-plan-total strong{font-size:18px;display:block;color:var(--ink);margin-top:6px}.pw-plan-select{display:flex;gap:12px;justify-content:space-between;align-items:center;margin-top:18px;padding:14px;background:var(--selection-bg);border-radius:8px;font-size:12px}.pw-fileicon{display:grid;place-items:center;height:36px;width:32px;border:1px solid var(--border);border-radius:5px;color:var(--action-bg);font-size:9px;font-weight:700;flex:none}.pw-filename{display:flex;gap:10px;align-items:center}.pw-fin-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:20px}.pw-fin-summary>div{padding:18px 20px;background:var(--card);border:1px solid var(--border);border-radius:8px}.pw-fin-summary strong{font-size:22px;line-height:1.2;display:block;margin-top:8px}.pw-context{border:1px solid var(--border);background:var(--paper);padding:12px 14px;border-radius:8px;margin-bottom:20px;font-size:12px}.pw-context strong{font-size:14px;display:block;margin-bottom:5px}.pw-drawer{position:fixed;inset:0 0 0 auto;margin:0;max-height:100dvh;height:100dvh;max-width:560px;border-radius:12px 0 0 12px;width:min(560px,100vw)}.pw-drawer .dialog-inner{height:100%;max-height:100dvh}.pw-drawer .dialog-body{flex:1}.pw-dialog-note{margin:14px 0 0;font-size:12px;color:var(--ink-soft)}.pw-payrow{display:grid;grid-template-columns:minmax(0,1fr) 140px 36px;align-items:end;gap:8px;margin:12px 0}.pw-payrow input{text-align:right}.pw-paytotal{background:var(--paper);border:1px solid var(--border);border-radius:8px;padding:16px;margin-top:20px}.pw-paytotal>div{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.pw-paytotal strong{font-size:20px}.pw-paytotal small{font-size:12px;color:var(--ink-soft)}.pw-report{background:#fff;color:#263542;border:1px solid #d7e4e3;border-radius:6px;padding:32px;line-height:1.6;font-size:13px}.pw-report h3{font-size:20px;margin:16px 0}.pw-report table{width:100%;border-collapse:collapse}.pw-report td,.pw-report th{border-bottom:1px solid #ddd;padding:8px;text-align:left}.pw-danger{color:var(--money-bad-ink)!important}.pw-dialog-actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}.pw-print{display:none}.pw button:disabled{opacity:.5;cursor:default}.pw-viewhint{font-size:11px;color:var(--ink-soft);margin:18px 0}.pw-status-toggle{background:none;border:0;padding:0;cursor:pointer}.pw-planedit td .pt-control{min-width:90px}.pw-planedit{min-width:940px}.pw-planedit td:first-child .pt-control{min-width:210px}.pw-filtercount{font-size:12px;color:var(--ink-soft);margin-left:auto}
@media(max-width:1200px){.pw-identity{flex-direction:column}.pw-grid{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr)}.pw-tooth-layout{grid-template-columns:1fr}.pw-tooth-side{display:grid;grid-template-columns:1fr 1fr;gap:12px}.pw-tooth-side h3{grid-column:1/-1;margin-bottom:0}.pw-tooth-side .pt-field{margin:0}.pw-tabs{gap:20px}}
@media(max-width:900px){.pw-grid{grid-template-columns:1fr}.pw-strip>div{padding:14px}.pw-fin-summary{gap:10px}.pw-fin-summary strong{font-size:18px}}
@media(max-width:760px){.pw-person h1{font-size:24px}.pw-person .pt-avatar{height:44px;width:44px;flex-basis:44px}.pw-strip{grid-template-columns:1fr}.pw-strip>div+div{border-left:0;border-top:1px solid var(--border)}.pw-strip>div{display:grid;grid-template-columns:1fr 1.3fr;gap:4px 10px}.pw-strip strong{font-size:14px}.pw-strip small{grid-column:2}.pw-kicker{margin:0}.pw-alert{flex-wrap:wrap}.pw-alert button{margin-left:0;min-height:32px}.pw-tabs{gap:20px;margin-bottom:18px}.pw-tabs a{min-height:48px}.pw-card{padding:16px}.pw-cardhead,.pw-sectionhead{align-items:flex-start;flex-wrap:wrap}.pw-cardhead h2,.pw-sectionhead h2{font-size:15px}.pw-form{grid-template-columns:1fr}.pw-checks{grid-template-columns:1fr}.pw-savebar{flex-direction:column;align-items:stretch;padding:12px}.pw-savebar>div{justify-content:flex-end}.pw-tooth-side{grid-template-columns:1fr}.pw-fin-summary{grid-template-columns:1fr}.pw-fin-summary>div{display:flex;align-items:center;justify-content:space-between;padding:14px}.pw-fin-summary strong{margin:0;font-size:18px}.pw-plan-total{gap:20px;flex-wrap:wrap}.pw-plan-select{align-items:flex-start;flex-direction:column}.pw-drawer{border-radius:0}.pw-payrow{grid-template-columns:minmax(0,1fr) 110px 44px}.pw-payrow .pt-btn{padding:4px}.pw-report{padding:18px}.pw-actions{gap:6px}.pw-person p{line-height:1.7}.pw-menu-list{right:0}.pw-subnav button{min-height:44px}}
.pw-service-section{margin-top:24px}.pw-service-section h3{font-size:15px;margin:0 0 14px}.pw-service{padding:14px;border:1px solid var(--border);border-radius:8px;margin-bottom:12px}.pw-service-head,.pw-service-foot,.pw-discount-head,.pw-service-total{display:flex;justify-content:space-between;gap:12px;align-items:center;font-size:12px}.pw-service-head{margin-bottom:10px;color:var(--ink-soft)}.pw-service-head .pt-btn{padding:0;width:36px}.pw-service-fields{display:grid;grid-template-columns:100px 1fr;gap:12px;margin:12px 0}.pw-service-foot label{display:flex;gap:6px;align-items:center}.pw-service-foot input{accent-color:var(--action-bg)}.pw-discount{padding:14px;background:var(--paper);border:1px solid var(--border);border-radius:8px;margin-top:16px}.pw-discount-head{margin-bottom:12px}.pw-discount-head .pw-subnav{margin:0;gap:3px}.pw-discount-head .pw-subnav button{padding:6px 12px}.pw-discount>.pt-field{max-width:160px}.pw-service-total{font-size:13px;margin-top:16px}.pw-service-total strong{font-size:16px}.pw :focus-visible{outline:2px solid var(--action-bg);outline-offset:3px}.pw-tooth[data-status=extract]{--tooth-fill:#f7e3e0;--tooth-ink:#a9433b}.pw-tooth[data-status=extract] svg{stroke-dasharray:3 2}
@media(pointer:coarse),(max-width:760px){.pw-smallbtn,.pw-back,.pw-status-toggle,.pw-alert button{min-height:44px}.pw-tooth{min-width:44px}.pw-teeth{min-width:780px}.pw-menu-list button{min-height:44px}.pw-service-head .pt-btn{width:44px}.pw-checks label{min-height:44px;align-items:center}}
@media print{body>*{display:none!important}body>#print-view{display:block!important;background:white;color:black;padding:20px}#print-view .pw-report{border:0}#print-view *{box-shadow:none!important}}

/* --- Адаптация под .panel-контейнер проекта (не из эталона) ---
   .pw-tabs использует position:sticky — работает, только если родитель не
   имеет overflow:hidden/auto со своим скроллом выше самого документа; в
   разметке проекта .panel не задаёт свой скролл, так что sticky держится от
   окна, как и в эталоне. */
#page-patient.panel{padding-top:24px}

/* .pt-avatar/.pt-debt/.pt-credit — из эталонного source/list.css (реестр),
   переносятся как есть: единый (не по id, в отличие от .doc-avatar у врачей)
   цвет инициалов пациента, и два цветовых утилити-класса для суммы долга/
   аванса в шапке. Размеры .pt-avatar в контексте шапки переопределены выше
   (.pw-person .pt-avatar — 52px/17px, адаптив 44px). */
.pt-avatar{height:32px;width:32px;flex:0 0 32px;display:grid;place-items:center;background:var(--selection-bg,var(--paper));color:var(--action-bg,var(--ink));font-size:11px;font-weight:600;border-radius:50%}
.pt-debt{color:var(--money-bad-ink)}
.pt-credit{color:var(--money-good-ink)}

/* --- Вкладка «Карта пациента» (Основное + Анкета здоровья) ---
   Эталонный card() использует .pt-field/.pt-control — по контракту
   integration-notes.md ("не заводить третье семейство") в разметке
   применяются реальные проектные .field/.control (см. .btn/.control в
   visual-v2.css, активные для тестовой клиники через data-ui-controls="v2").
   .pw-form — эталонная grid-раскладка (2 колонки, gap 18px), поэтому
   собственный margin-bottom у .field (components.css) обнуляется, а .wide —
   утилита-расширение на всю строку, которой в проекте ещё не было. */
.pw-form .field{margin-bottom:0}
.pw-form .field.wide{grid-column:1/-1}
.pw-form .field>label{color:var(--ink)}

/* --- Вкладка «Зубная формула» — .pw-tooth-side эталона использует
   .pt-field/.pt-btn (margin/ширина), здесь — реальные .field/.btn,
   тот же контракт (см. пояснение выше про .field/.control). */
.pw-tooth-side .field{margin-bottom:16px}
.pw-tooth-side .btn{width:100%;margin-top:6px;white-space:normal}
@media(max-width:1200px){.pw-tooth-side .field{margin:0}}

/* --- Вкладка «План лечения», строка редактирования пункта (23.09.2026,
   найдено при проходе Астры по мобильной вёрстке/scroll-контейнерам) —
   раньше это был инлайн style="display:grid; grid-template-columns:
   1fr 2fr 1fr 90px 130px 160px 36px" прямо в pwAddPlanItemRow()
   (web/js/patient-page.js). Инлайн-стиль CSS-медиазапросами не тронуть —
   на узком экране (в т.ч. на телефоне при добавлении/правке пункта плана
   на месте у кресла) строка распирала страницу горизонтально, без единого
   локального scroll-контейнера, который защитил бы остальной layout (в
   отличие от .pw-teeth-scroll у зубной формулы и .pw-table-wrap у таблиц
   визитов/счетов — там overflow:auto уже был). Перенесли раскладку в
   класс, чтобы можно было адаптировать по ширине, как и остальные формы
   страницы (.pw-form/.pw-tooth-side/.pw-payrow — тот же приём). */
.pw-planrow-grid{display:grid;grid-template-columns:1fr 2fr 1fr 90px 130px 160px 36px;gap:10px;align-items:end}
@media(max-width:1200px){.pw-planrow-grid{grid-template-columns:1fr 1fr 1fr}}
@media(max-width:760px){.pw-planrow-grid{grid-template-columns:1fr}}

