/* Shared admin layout; protocol and identity operations remain server-side. */
:root{--ink:#172c3c;--muted:#667986;--line:#e2e9ed;--accent:#008075;--soft:#edf5f4}
body{background:#f4f7f9;font-size:14px;color:var(--ink)}main{margin:24px auto;padding:0 28px}h1{font-size:26px;margin:0 0 18px}h2{font-size:21px}h3{font-size:15px;margin:24px 0 12px}nav{justify-content:flex-start;gap:24px;border-bottom:1px solid var(--line);padding-bottom:18px;margin-bottom:24px}nav>a:first-child{margin-right:auto;text-decoration:none}nav form{margin:0}nav button{background:var(--soft);color:var(--accent);padding:7px 12px}footer{display:flex;gap:24px;padding:16px 0;font-size:13px}.card{border:1px solid var(--line);border-radius:12px;box-shadow:none;margin:12px 0}.entry-points{padding:10px 16px}.uplink{padding:12px 16px;gap:24px}.uplink strong{font-size:14px}button,a.download{transition:background .12s}button:hover{filter:brightness(.95)}button:disabled{opacity:.55;cursor:wait}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #60bcb2;outline-offset:3px}button.secondary{background:var(--soft);color:var(--accent)}input,select{font:inherit;color:inherit;background:#fff;border:1px solid #bacbd5;border-radius:7px;padding:10px;box-sizing:border-box;max-width:100%}input:focus,select:focus{outline:2px solid #00807544;border-color:var(--accent)}input[type=checkbox]{accent-color:var(--accent)}
.card.table{padding:0 12px}th{font-size:12px;color:var(--muted);font-weight:600;white-space:nowrap}td{vertical-align:middle;font-size:13px;padding:10px 8px}td[data-stat=connections]{min-width:185px}.user-actions{gap:6px}.user-actions>button,.user-actions .modal-trigger{padding:7px 10px;font-size:12px}.user-name{display:block;font-weight:650;background:none;color:var(--ink);padding:0;text-align:left}.user-name:hover{color:var(--accent)}.user-ip{display:inline;margin-right:8px;font-size:11px}.protocol-badges{display:inline-flex;margin:4px 0 0}.protocol-badges span{font-size:10px}.connection-primary{display:block;white-space:nowrap}.connection-more{background:none;color:var(--accent);padding:1px 0;font-size:12px}.connection-status{display:block;font-size:11px;color:var(--muted)}.table-tools{display:flex;align-items:center;gap:10px;margin:14px 0}.table-tools input[type=search]{width:260px;padding:8px 12px}.table-tools .columns{margin-left:auto;position:relative}.columns>summary{cursor:pointer;background:white;border:1px solid var(--line);padding:8px 12px;border-radius:7px}.columns-menu{position:absolute;right:0;top:38px;z-index:2;background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 18px;box-shadow:0 8px 28px #14283a18;min-width:210px}.columns-menu label,.display-options label{display:flex;gap:8px;align-items:center;margin:8px 0;white-space:nowrap}.empty-filter{padding:20px;text-align:center;color:var(--muted)}
dialog{width:min(640px,calc(100vw - 40px));max-height:90dvh;border-radius:14px;box-sizing:border-box;box-shadow:0 20px 80px #14283a35}dialog.user-dialog{width:min(900px,calc(100vw - 40px))}dialog::backdrop{background:#132c3e77;backdrop-filter:blur(2px)}.modal-header{padding:20px 24px;position:sticky;top:0;z-index:2;background:white}.modal-header h2{font-size:20px}.modal-close{font-size:23px;width:32px;height:32px;padding:0;background:#f0f4f6;color:#5e707f}.modal-body{padding:20px 24px}.client-name{color:var(--muted);font-size:13px;margin:0 0 18px!important}.tabs{display:flex;flex-wrap:wrap;gap:4px;padding:5px;background:#f0f4f6;border-radius:9px;margin-bottom:22px}.tabs button{flex:1;background:transparent;color:var(--muted);padding:9px 12px;font-size:13px;white-space:nowrap}.tabs button[aria-selected=true]{background:#fff;color:var(--accent);box-shadow:0 1px 4px #14283a18;font-weight:600}.tab-panel{min-width:0}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid label{margin:0}.form-grid input{display:block;margin-top:8px}.field-note{font-size:13px;color:var(--muted);line-height:1.6}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}.modal-body .form-actions button{padding:10px 16px;font-size:14px}.modal-body .settings-body{max-width:none;padding:0;background:none}.modal-body .protocols{display:grid;grid-template-columns:1fr 1fr;gap:10px}.modal-body .protocols label{padding:10px 12px;border:1px solid var(--line);border-radius:8px;margin:0}.modal-body .protocols input{width:18px;height:18px}.modal-body form{margin:0}.modal-body .inline{margin:0}.modal-body .qr{padding:18px;border:0;background:#f7fafb}.modal-body .qr img{width:280px;max-width:100%}.qr-result:empty{display:none}.qr-result{margin-top:18px}.qr-result[role=alert]{color:#963737}.device{padding:16px;border:1px solid var(--line);border-radius:10px;margin:10px 0}.device>strong{display:block;margin-bottom:4px}.device>small{display:block;margin-bottom:10px}.device .inline{display:inline-block;margin:8px 8px 0 0}.device button{padding:7px 10px!important;font-size:12px!important}.enrollment-item{padding:14px 0;border-bottom:1px solid var(--line)}.enrollment-item form{margin-top:8px!important}.overview-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.overview-item{padding:16px;background:#f6f9fa;border:1px solid var(--line);border-radius:9px}.overview-item h3{margin:0 0 8px;font-size:12px;color:var(--muted)}.display-options{margin-bottom:18px}.display-options summary{cursor:pointer;color:var(--accent)}.display-options>div{display:flex;flex-wrap:wrap;gap:16px}.detail-connections p{padding:12px 0;border-bottom:1px solid var(--line)}.subtle-danger{margin-top:28px;padding-top:18px;border-top:1px solid var(--line)}.subtle-danger button{background:#fff0f0;color:#a43e3e}.status-message{padding:12px;border-radius:8px;background:#fff1d6;line-height:1.5;margin-top:12px}.status-message:empty{display:none}.device-select{display:block;width:100%;margin:8px 0 16px}.export-note{margin-top:24px;border-top:1px solid var(--line);padding-top:16px}.export-note summary{cursor:pointer;color:var(--muted)}.export-note form{margin-top:12px!important}
.landing{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:24px;max-width:1080px;margin:32px auto 0}.landing .card{margin:0;padding:36px}.welcome{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.welcome h2{font-size:32px;line-height:1.2;margin:16px 0 0}.welcome p{line-height:1.7;max-width:480px}.eyebrow{font-size:11px;letter-spacing:.12em;font-weight:650;color:var(--accent)}.download{padding:13px 18px;margin:8px 0}.download span{opacity:.8;font-size:13px}.landing-qr{text-align:center}.landing-qr img{width:210px}.landing-qr p{font-size:12px;color:var(--muted)}.visitor{max-width:1008px;margin:24px auto;padding:28px 36px}.visitor h2{margin:0}.visitor dl{display:grid;grid-template-columns:1fr 1fr;gap:20px 32px}.visitor dt{font-size:12px;color:var(--muted);margin-bottom:5px}.visitor dd{margin:0;overflow-wrap:anywhere;font-size:14px}.visitor dl>div:nth-child(2){grid-column:1/-1;grid-row:2}.visitor dd:empty::after{content:'Не передано'}
@media(max-width:700px){main{padding:0 14px;margin:18px auto}nav{gap:12px;flex-wrap:wrap}nav>a:first-child{flex-basis:100%}dialog,dialog.user-dialog{width:100%;max-width:100%;height:100dvh;max-height:100dvh;margin:0;border-radius:0}.modal-header{padding:18px}.modal-body{padding:18px}.tabs{gap:2px}.tabs button{padding:9px 8px}.overview-grid{grid-template-columns:1fr}.table-tools{flex-wrap:wrap}.table-tools input[type=search]{flex:1;min-width:140px}.landing{grid-template-columns:1fr;gap:14px;margin-top:20px}.landing .card{padding:24px}.landing-qr img{width:180px}.welcome h2{font-size:27px}.visitor{padding:24px}.visitor dl{grid-template-columns:1fr}.visitor dl>div:nth-child(2){grid-column:auto;grid-row:auto}.form-grid{gap:12px}}

.danger-actions{display:flex;justify-content:space-between;gap:12px;margin-top:24px;padding-top:20px;border-top:1px solid var(--line)}.danger-actions button{background:#fff0f0;color:#a43e3e}.overview-item>div{white-space:pre-line}.visitor dl.tls-facts>div:nth-child(2){grid-column:auto;grid-row:auto}body:has(.landing) main{max-width:1080px}

/* Stable user card, with content scrolling inside the selected section. */
dialog.user-dialog{height:min(820px,90dvh);overflow:hidden}
dialog.user-dialog[open]{display:flex;flex-direction:column}
.user-dialog>.modal-header{flex:none;position:static}
.user-dialog>.modal-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
.user-dialog .client-name,.user-dialog .user-quick-actions,.user-dialog .tabs{flex:none}
.user-dialog .tab-panel{flex:1;min-height:0;overflow:auto;scrollbar-gutter:stable}
.user-quick-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 18px}
.user-quick-actions button{padding:8px 12px;font-size:13px}
.invitation-intro{padding-bottom:20px;border-bottom:1px solid var(--line);margin-bottom:8px}
.invitation-intro h3{margin-top:0}.invitation-intro>button{padding:10px 14px;font-size:14px}
/* Full-width desktop portal: download above, visitor and TLS information side by side. */
@media(min-width:1000px){
 body:has(.landing) main{max-width:none;display:grid;grid-template-columns:1fr 1fr;gap:18px 24px;margin:20px auto}
 body:has(.landing) main>nav,body:has(.landing) main>h1,body:has(.landing) main>.landing{grid-column:1/-1}
 body:has(.landing) main>nav{margin-bottom:0}body:has(.landing) main>h1{margin:0}
 .landing{max-width:none;width:100%;grid-template-columns:minmax(0,1fr) 280px;margin:0;gap:24px}
 .landing .card{padding:22px 28px}.landing-qr img{width:164px}.landing-qr p{margin:8px 0 0}
 .welcome h2{font-size:28px;margin-top:10px}.welcome p{margin:10px 0;max-width:none}
 .visitor{max-width:none;margin:0;padding:22px 28px;min-width:0}.visitor dl{gap:16px 24px;margin-bottom:0}
}
@media(max-width:700px){dialog.user-dialog{height:100dvh;max-height:100dvh}.user-quick-actions{gap:6px;margin-bottom:12px}.user-quick-actions>span{flex-basis:100%}.user-quick-actions button{padding:7px 9px}.user-dialog .tabs{margin-bottom:12px}}

.connection-link{margin-top:18px;text-align:left}.connection-link textarea{width:100%;box-sizing:border-box;resize:vertical;font:12px monospace;padding:10px;border:1px solid #c4d1da;border-radius:8px}.connection-link [data-copy-status]{display:block;margin-top:8px;color:#087769}

.connection-primary{display:block}.connection-group{margin:10px 0;border:1px solid var(--line);border-radius:9px;padding:12px}.connection-group summary{cursor:pointer;color:var(--ink);font-weight:600}.connection-endpoint{white-space:pre-line;font-size:13px;margin:10px 0 0;padding-top:8px;border-top:1px solid var(--line)}

.action-link{display:inline-block;background:var(--accent);color:#fff;text-decoration:none;border-radius:7px;padding:10px 14px;font:inherit;line-height:1.2;margin:0 8px 12px 0}.action-link.secondary{background:var(--soft);color:var(--accent)}.action-link:hover{filter:brightness(.95)}.device-report{display:grid;grid-template-columns:1fr auto;gap:6px 16px;padding:14px 0;border-bottom:1px solid var(--line)}.device-report>strong,.device-report>small,.device-report>.report-time{grid-column:1}.device-report>.action-link{grid-column:2;grid-row:1/4;align-self:center;margin:0}.report-time{font-size:13px}.device-registrations{border:1px solid var(--line);border-radius:10px;padding:14px;margin:10px 0}.device-registrations>summary{cursor:pointer;font-weight:600}.device-report-stamp{margin-top:12px}@media(max-width:600px){.device-report{grid-template-columns:1fr}.device-report>.action-link{grid-column:1;grid-row:auto;justify-self:start}}

.device-table-scroll{overflow-x:auto}.device-table{width:100%;border-collapse:collapse;table-layout:fixed}.device-table th:nth-child(1){width:25%}.device-table th:nth-child(2){width:23%}.device-table th:nth-child(3){width:25%}.device-table th{white-space:normal;text-align:left;padding:10px 8px}.device-table .device-row{border:0;border-bottom:1px solid var(--line);border-radius:0;margin:0;padding:0}.device-table td{vertical-align:top;padding:12px 8px;overflow-wrap:anywhere;line-height:1.5}.device-identity strong,.device-identity small,.device-identity code,.device-last-report>a{display:block}.device-last-report>a{margin-top:5px;font-size:12px}.device-table .device-actions .inline{display:block;margin:0 0 6px}.device-table .device-actions button{width:100%;white-space:normal;padding:7px!important}.device-table tbody tr:hover{background:#f6f9fa}@media(max-width:600px){.device-table{min-width:680px}}

.enrollment-table{width:100%;border-collapse:collapse}.enrollment-table th,.enrollment-table td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line);vertical-align:middle}.enrollment-table button{padding:7px 12px!important}.invitation-help{margin:12px 0;color:var(--muted);font-size:13px}.invitation-help summary{cursor:pointer}.device-table .device-actions form[action$="-qr"]{display:inline-block;margin-right:4px}.device-table .device-actions form[action$="-qr"] button{width:auto}
