@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&family=Roboto+Slab:wght@700&display=swap');
:root{--bg:#fafafa;--surface:#fff;--text:#212529;--muted:#6c757d;--border:#dee2e6;--primary:#bf9d5a;--primary-rgb:191,157,90;--radius:8px;--shadow:0 20px 45px rgba(32,33,36,.12)}
*{box-sizing:border-box}html,body{min-height:100%}body{margin:0;color:var(--text);background:var(--bg);font-family:Roboto,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
.auth-shell{min-height:100svh;display:grid;grid-template-columns:minmax(300px,.9fr) minmax(360px,1.1fr);align-items:center;gap:clamp(2rem,7vw,8rem);width:min(1180px,calc(100% - 2rem));margin:0 auto;padding:2rem}
.auth-brand{max-width:520px}.auth-logo{width:min(420px,100%);height:auto}.auth-brand p{margin:2rem 0 .75rem;font:700 clamp(1.7rem,4vw,3rem)/1.15 "Roboto Slab",serif}.auth-brand span{color:var(--muted);font-size:1.08rem;line-height:1.65}.auth-brand-rule{width:72px;height:4px;margin-bottom:1.25rem;background:var(--primary)}
.auth-card{width:100%;max-width:500px;justify-self:end;padding:clamp(1.5rem,4vw,2.5rem);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
.eyebrow{color:var(--primary);font-weight:700;text-transform:uppercase;font-size:.75rem;letter-spacing:.08em}.auth-card h1{margin:.65rem 0 .5rem;font:700 2rem/1.2 "Roboto Slab",serif}.auth-card-heading p,.security-note{color:var(--muted)}.auth-card form{display:grid;gap:1.1rem;margin-top:2rem}.field{display:grid;gap:.45rem;font-weight:500}
.field input,.field textarea,.field select{width:100%;min-height:48px;padding:.75rem 1rem;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:6px;font:inherit;outline:none;transition:border-color .2s,box-shadow .2s}.field textarea{resize:vertical}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--primary);box-shadow:0 0 0 .25rem rgba(var(--primary-rgb),.2)}
.primary-button{min-height:48px;border:1px solid var(--primary);border-radius:6px;color:#fff;background:var(--primary);font:700 1rem Roboto,sans-serif;cursor:pointer}.primary-button:hover{filter:brightness(.94)}.primary-link{display:inline-flex;align-items:center;justify-content:center;margin-top:1rem;padding:.75rem 1rem;text-decoration:none}.validation-summary,.field-error{color:#b42318;font-size:.9rem}.validation-summary:empty,.field-error:empty{display:none}.security-note{margin:1.5rem 0 0;padding-top:1rem;border-top:1px solid var(--border);font-size:.85rem}
.settings-shell{width:min(1180px,calc(100% - 2rem));margin:0 auto;padding:1.5rem 0 4rem}.settings-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:1.5rem;border-bottom:1px solid var(--border)}.settings-logo{display:block;width:180px;height:auto}.secondary-button{min-height:42px;padding:.6rem 1rem;border:1px solid var(--border);border-radius:6px;color:var(--text);background:var(--surface);font:500 .95rem Roboto,sans-serif;cursor:pointer}.secondary-button:hover{border-color:var(--primary);color:var(--primary)}.profile-section{padding:clamp(2rem,6vw,5rem) 0}.profile-section h1{margin:.65rem 0 .5rem;font:700 clamp(2rem,5vw,3.5rem)/1.15 "Roboto Slab",serif}.profile-section p{margin:0;color:var(--muted)}.profile-label{display:block;margin-top:1.25rem;color:var(--muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.role-list{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}.role-badge,.access-kind,.access-target,.service-role{display:inline-flex;padding:.35rem .6rem;border-radius:4px;background:rgba(var(--primary-rgb),.14);color:#715b31;font-size:.78rem;font-weight:700}.access-section{padding-top:2rem;border-top:1px solid var(--border)}.section-heading{display:flex;align-items:end;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.section-heading h2{margin:.45rem 0 0;font:700 1.8rem/1.2 "Roboto Slab",serif}.access-count{display:grid;place-items:center;min-width:42px;height:42px;border-radius:50%;color:#fff;background:var(--primary);font-weight:700}.access-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.access-card{position:relative;display:flex;flex-direction:column;min-height:230px;padding:1.25rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.access-card-link{transition:border-color .2s,box-shadow .2s}.access-card-link:hover{border-color:rgba(var(--primary-rgb),.7);box-shadow:0 12px 28px rgba(32,33,36,.08)}.access-card-top{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.access-card code{overflow:hidden;color:var(--muted);font-size:.75rem;text-overflow:ellipsis}.access-card h3{margin:1.25rem 0 .5rem;font:700 1.25rem/1.25 "Roboto Slab",serif}.access-card p{margin:0 0 1.25rem;color:var(--muted);line-height:1.55}.service-role{align-self:flex-start;margin-bottom:.35rem}.service-role-description{margin-bottom:.75rem;color:var(--muted);font-size:.78rem;line-height:1.45}.access-action,.access-target{align-self:flex-start;margin-top:auto}.access-action{color:var(--primary);font-weight:700;text-decoration:none}.access-action::after{position:absolute;inset:0;content:""}.access-action:hover{text-decoration:underline}.empty-state{padding:2rem;color:var(--muted);background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius);text-align:center}
.status-message{margin-top:1.5rem;padding:.9rem 1rem;color:#285b38;background:#eef8f1;border:1px solid #b8ddc3;border-radius:var(--radius)}.portal-section{margin-top:3rem;padding-top:2rem;border-top:1px solid var(--border)}.data-list{display:grid;gap:.65rem}.data-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.data-row div:first-child{display:grid;gap:.3rem}.data-row span{color:var(--muted);font-size:.85rem}.row-actions{display:flex;align-items:center;gap:.75rem}.status-badge{padding:.3rem .55rem;border-radius:4px;background:#f0f1f2;font-weight:700}.status-valid{color:#28623c!important;background:#e7f5eb}.status-revoked,.status-redeemed{color:#7f3b35!important;background:#faecea}.danger-button,.text-danger-button{border:0;color:#a0372e;background:transparent;font:700 .9rem Roboto,sans-serif;cursor:pointer}.danger-button{padding:.65rem .8rem;border:1px solid #e1b9b5;border-radius:6px}.table-wrap{overflow-x:auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.audit-table{width:100%;border-collapse:collapse;font-size:.88rem}.audit-table th,.audit-table td{padding:.85rem 1rem;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.audit-table th{color:var(--muted);font-size:.75rem;text-transform:uppercase}.audit-table td span{display:block;max-width:440px;margin-top:.25rem;color:var(--muted);font-size:.78rem}.audit-table tr:last-child td{border-bottom:0}.admin-section{padding-bottom:1rem}.admin-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;padding:1.25rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.field-wide,.validation-summary{grid-column:1/-1}.role-preview{padding:1rem;color:var(--muted);background:var(--bg);border:1px solid var(--border);border-radius:6px;font-size:.9rem}.admin-submit{justify-self:start;padding:0 1.25rem}
@media(max-width:800px){.auth-shell{grid-template-columns:1fr;gap:1.5rem;padding:1rem}.auth-brand{text-align:center;margin:0 auto}.auth-logo{width:min(300px,80vw)}.auth-brand p{margin-top:1rem;font-size:1.6rem}.auth-brand-rule{margin:0 auto 1rem}.auth-card{justify-self:center}}
@media(max-width:900px){.access-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.settings-logo{width:140px}.profile-section{padding:2.5rem 0}.access-grid,.admin-form{grid-template-columns:1fr}.access-card{min-height:0}.access-card-top{align-items:flex-start;flex-direction:column}.section-heading,.data-row{align-items:flex-start}.data-row{flex-direction:column}.row-actions{width:100%;justify-content:space-between}.field-wide,.role-selector,.validation-summary{grid-column:auto}}
