*,:after,:before{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#f5f5f5;color:#111;min-height:100vh;align-items:center;justify-content:center}.card-stack,body{display:flex;flex-direction:column}.card,.card-stack{width:100%;max-width:480px}.card{background:#fff;border-radius:12px;box-shadow:0 2px 16px rgba(0,0,0,.08);padding:2.5rem 2rem;margin:2rem 1rem}h1{font-size:1.5rem;margin-bottom:.5rem}p{color:#555;line-height:1.5;margin-bottom:1rem}.btn{display:inline-block;padding:.75rem 1.5rem;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;border:none;text-decoration:none;transition:opacity .15s}.btn:hover{opacity:.85}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:disabled:hover{opacity:.5}.btn-primary{background:#0078d4;color:#fff}.btn-secondary{background:#e8e8e8;color:#111}.btn-microsoft{background:#0078d4;color:#fff}.btn-google{background:#1a73e8;color:#fff}.credential-box{background:#f0f4ff;border:1px solid #c7d8ff;border-radius:8px;padding:1rem;margin:1rem 0;font-family:monospace;font-size:.95rem;word-break:break-all}.credential-row{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;padding:.35rem 0;border-bottom:1px solid #dde8ff}.credential-row:last-child{border-bottom:none}.credential-row label{font-size:.8rem;color:#555;text-transform:uppercase;letter-spacing:.05em;font-family:sans-serif}.credential-row span{font-weight:700}.qr-wrap{text-align:center;margin:1.5rem 0}.qr-wrap img,.qr-wrap svg{max-width:220px}.alert{padding:.75rem 1rem;border-radius:8px;margin-bottom:1rem}.alert-warn{background:#fff8e1;border:1px solid #ffe082;color:#6d4c00}.alert-error{background:#fdecea;border:1px solid #f5c6cb;color:#721c24}.spinner{display:inline-block;width:1.2em;height:1.2em;border:3px solid rgba(0,120,212,.2);border-top-color:#0078d4;border-radius:50%;animation:spin .7s linear infinite;vertical-align:middle;margin-right:.5rem}@keyframes spin{to{transform:rotate(1turn)}}.card-stack.wide{max-width:760px}.card-stack.wide>.card{max-width:none}.form-grid{gap:1rem}.field,.form-grid{display:flex;flex-direction:column}.field{gap:.3rem}.field>span{font-size:.8rem;color:#555;text-transform:uppercase;letter-spacing:.05em}.field>span small{text-transform:none;letter-spacing:0}.field input,.field select{font:inherit;padding:.6rem .7rem;border:1px solid #ccd;border-radius:8px;background:#fff;color:#111}.field input:focus,.field select:focus{outline:2px solid #0078d4;outline-offset:1px}.field small{color:#777;font-size:.8rem}.field code{background:#f0f4ff;padding:.05em .3em;border-radius:3px}.table-wrap{overflow-x:auto;margin-top:.5rem}.admin-table{width:100%;border-collapse:collapse;font-size:.9rem}.admin-table td,.admin-table th{text-align:left;padding:.55rem .5rem;border-bottom:1px solid #eee;vertical-align:top}.admin-table th{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:#555}.admin-table small{color:#777}.admin-table tr.is-revoked td{color:#999}.pill{display:inline-block;padding:.1rem .5rem;border-radius:999px;font-size:.75rem;font-weight:600}.pill-on{background:#e6f4ea;color:#1e6b34}.pill-off{background:#f1f1f1;color:#666}.btn-small{padding:.35rem .75rem;font-size:.85rem}.admin-table td:first-child,.admin-table td:nth-child(2){white-space:nowrap}.credential-row .cred-value{flex:1 1 auto;text-align:right}.credential-row .masked{letter-spacing:.18em}.row-actions{display:flex;gap:.35rem;flex-shrink:0}.credential-row .row-actions .btn{padding:.2rem .55rem;font-size:.75rem}.cred-expiry{font-size:.9rem}.cred-note{font-size:.85rem;color:#777;margin-top:.75rem}.qr-note{font-size:.85rem;text-align:center;margin-top:-.75rem}.section-head{font-size:.8rem;text-transform:uppercase;letter-spacing:.05em;color:#555;margin:1.5rem 0 .6rem}.connect-grid{gap:.8rem}.connect-grid,.connect-item{display:flex;flex-direction:column}.connect-item{gap:.25rem;align-items:flex-start}.connect-item small{color:#777;font-size:.8rem;line-height:1.4}details{margin-top:1.25rem;border-top:1px solid #eee;padding-top:1rem}details>summary{cursor:pointer;font-weight:600;font-size:.9rem;color:#0078d4;list-style:none;padding:.25rem 0}details>summary::-webkit-details-marker{display:none}details>summary:before{content:"▸ ";display:inline-block;width:1em}details[open]>summary:before{content:"▾ "}.details-body{padding-top:.5rem}.details-body ul{margin:.5rem 0 1rem;padding-left:1.25rem;line-height:1.8}.details-body p{font-size:.9rem}.eula-body{max-height:45vh;overflow-y:auto;border:1px solid #e2e2e2;border-radius:8px;padding:1rem 1.1rem;margin-bottom:1rem;background:#fafafa;font-size:.88rem;line-height:1.55;-webkit-overflow-scrolling:touch}.eula-body h2{font-size:1.05rem;margin-bottom:.25rem}.eula-body h3{font-size:.92rem;margin:1.1rem 0 .35rem}.eula-body p{margin-bottom:.6rem;color:#333}.eula-body ul{margin:.4rem 0 .8rem;padding-left:1.2rem}.eula-body li{margin-bottom:.3rem;color:#333}.eula-body .eula-meta{font-size:.78rem;color:#777;margin-bottom:1rem}.eula-agree{display:flex;align-items:flex-start;gap:.55rem;margin-bottom:1rem;cursor:pointer;font-size:.92rem}.eula-agree input{margin-top:.2rem;width:1.05rem;height:1.05rem;flex-shrink:0}.admin-table .row-actions{flex-wrap:wrap;gap:.3rem}.exception-picker{border:none}.exception-choice{display:flex;align-items:flex-start;gap:.55rem;cursor:pointer;padding:.35rem 0;font-size:.92rem}.exception-choice input{margin-top:.2rem;width:1.05rem;height:1.05rem;flex-shrink:0}.exception-choice>span{display:flex;flex-direction:column;gap:.15rem}.exception-choice small{color:#777;font-size:.8rem;line-height:1.4}.exceptions-table td:nth-child(2){white-space:normal}.exceptions-table td .row-actions{margin-top:.35rem}.exceptions-table td small{display:block;margin-top:.35rem;line-height:1.4}.card-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:.5rem}.card-head h1{margin-bottom:0}.wifi-subsection{margin-top:1.5rem;border-top:1px solid #eee;padding-top:1rem}.sub-head{font-size:1.05rem;margin-bottom:.35rem}.wifi-subsection>p{font-size:.9rem}.btn small{font-weight:400;opacity:.8}.wifi-status{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;font-size:.92rem}.wifi-status .cred-note{display:inline;margin-top:0}.hours-row{display:flex;gap:1rem;flex-wrap:wrap}.hours-row>.field{flex:1 1 12rem}.day-picker{display:flex;flex-wrap:wrap;gap:.4rem}.day-toggle{border:1px solid #ccc;background:#fff;color:#444;border-radius:8px;padding:.4rem .7rem;font:inherit;font-size:.85rem;font-weight:600;cursor:pointer}.day-toggle.is-on,.day-toggle:hover{border-color:#0078d4}.day-toggle.is-on{background:#0078d4;color:#fff}