/* components.css: shared component layer (see site/components/index.html). Flat solid colors only. */
.btn.lg{padding:12px 22px;font-size:16px}.btn[disabled],.btn.is-disabled{opacity:.45;pointer-events:none}.btn.is-loading{opacity:.7;pointer-events:none}.btn.is-loading::after{content:" …"}
.btn:focus-visible,.chipf:focus-visible,.toggle:focus-visible{outline:2px solid #ff5a7a88;outline-offset:2px}
.field{display:block;margin:0 0 12px}.field .hint{font-size:13px;color:var(--mute);font-weight:400}
.form-error{color:#c0392b;font-size:13px;font-weight:600;margin-top:4px}.is-invalid{border-color:#c0392b!important;outline:2px solid #c0392b33}
.avail{font-size:13px;font-weight:600;margin-top:6px}.avail.ok{color:var(--ok)}.avail.bad{color:#c0392b}.avail.wait{color:var(--mute)}
.paste{min-height:110px;font-family:ui-monospace,Menlo,monospace;font-size:13.5px;background:#fff8ef}
.taginput{display:flex;flex-wrap:wrap;gap:4px;align-items:center;border:1px solid var(--line);border-radius:10px;padding:5px 6px;background:#fff}.taginput input{border:0;flex:1;min-width:120px;padding:4px}.taginput input:focus{outline:0}
.chip button{border:0;background:none;cursor:pointer;color:var(--mute);padding:0 0 0 2px;font-size:14px}
.vis{display:inline-flex;border:1px solid var(--line);border-radius:99px;padding:2px;background:#fff}.vis button{border:0;background:none;font:inherit;font-size:12.5px;font-weight:600;padding:4px 10px;border-radius:99px;cursor:pointer;color:var(--mute)}.vis button.on{background:var(--ink);color:#fff}
.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;color:#fff;font-weight:700;width:36px;height:36px;font-size:13px;flex:none;background:var(--acc)}.avatar.lg{width:72px;height:72px;font-size:24px}.avatar.sm{width:26px;height:26px;font-size:10px}
.badge-warn{background:#fff4d6;color:#8a5a00;font-size:12px;font-weight:600;padding:2px 8px;border-radius:99px}
.row{display:flex;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.row:last-child{border:0}.row .grow{flex:1;min-width:0}.row .meta{font-size:13px;color:var(--mute)}
.scope{display:inline-block;font-size:11.5px;font-weight:600;background:#f3eefc;color:var(--acc);border-radius:99px;padding:1px 8px;margin:1px}.scope.risk{background:#ffe5e5;color:#c0392b}
.log{font-family:ui-monospace,Menlo,monospace;font-size:12.5px}.log .ok{color:var(--ok)}.log .deny{color:#c0392b}
.empty{text-align:center;padding:26px 12px;color:var(--mute)}.empty .ico{font-size:30px}
.toast.static{position:static;transform:none;opacity:1;display:inline-block}.toast.error{background:#c0392b}
.modal.static{position:relative;display:flex;inset:auto;min-height:260px;border-radius:14px}
.qr{display:inline-flex;flex-direction:column;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px}.qr img{width:150px;height:150px;image-rendering:pixelated}.qr .url{font-weight:700;font-size:13px}
.qrcard{width:350px;height:200px;border:1px solid var(--line);border-radius:14px;background:#fff;display:flex;gap:14px;padding:16px;align-items:center}.qrcard img{width:130px;height:130px}
.stepper{display:flex;gap:8px}.stepper span{flex:1;height:6px;border-radius:99px;background:var(--line)}.stepper span.on{background:var(--pri)}
.skel{background:#f3ece4;border-radius:8px;height:14px;margin:8px 0}
/* mobile final pass */
@media(max-width:640px){.topnav{gap:10px;padding:10px 12px}.topnav a.l{display:none}.row{flex-wrap:wrap}.kv{flex-wrap:wrap}table{display:block;overflow-x:auto;max-width:100%}pre{max-width:100%;white-space:pre-wrap;word-break:break-all}.page-head .row{flex-wrap:wrap}.chipbar{flex-wrap:wrap}.qrcard{width:100%}.modal .card{max-height:90vh;overflow:auto}code{word-break:break-all}input,select,textarea{min-width:0!important}.cal{font-size:10px}.cal div{min-width:0;overflow:hidden}}
.addrow{display:flex;gap:8px;flex-wrap:wrap}.addrow .ar-n{flex:2 1 160px}.addrow .ar-b{flex:1 1 150px}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:14px;flex-wrap:wrap}.tabs button{border:0;background:none;font:inherit;font-weight:600;padding:8px 12px;cursor:pointer;color:var(--mute);border-bottom:2px solid transparent}.tabs button.on{color:var(--pri);border-color:var(--pri)}
.cal div.sel{outline:2px solid var(--acc)}.cal div{cursor:pointer}
.cal{grid-template-columns:repeat(7,minmax(0,1fr))}
.cal .ev{white-space:normal}
input[type=radio]:not(.toggle),input[type=checkbox]:not(.toggle){width:auto;flex:none}
