/* Givefinity brand stylesheet — extracted from brand-html.ts brandStyles()
   Token source: docs/reference/prototype/app/globals.css (canonical)
   Served as /gf.css via Fastify static from apps/web/public/ */
:root{
--gf-primary-900:#0a3d62;
--gf-primary-700:#135ea3;
--gf-primary-500:#2f72b8;
--gf-accent-teal-700:#0f5c52;
--gf-accent-teal-500:#1a8070;
--gf-neutral-900:#1b1f24;
--gf-neutral-700:#4a5563;
--gf-neutral-600:#718096;
--gf-neutral-500:#8898aa;
--gf-neutral-400:#adb5bd;
--gf-neutral-200:#d8e0e8;
--gf-neutral-100:#edf2f7;
--gf-neutral-50:#f6f9fc;
--gf-success-600:#2e7d32;
--gf-warning-600:#b7791f;
--gf-danger-600:#c53030;
/* Brand manual exact colors */
--gf-brand-teal:#44c3d0;
--gf-brand-teal-50:#ecf9fa;
--gf-brand-teal-100:#d0f0f3;
--gf-brand-teal-200:#a2e1e8;
--gf-brand-midnight:#27203f;
--gf-brand-midnight-50:#eae9eb;
--gf-brand-midnight-100:#c9c7cf;
--gf-brand-purple:#c778b2;
--gf-brand-purple-50:#f8eef6;
--gf-brand-purple-100:#f1ddec;
--gf-brand-yellow:#fbb85b;
--gf-brand-yellow-50:#fff7ec;
--gf-brand-yellow-100:#feedd6;
--gf-brand-red:#f15d5e;
--gf-brand-red-50:#fef1f1;
--gf-brand-red-100:#fbd6d7;
}
.gf-brand-body{
margin:0;
min-height:100vh;
font-family:Montserrat,system-ui,-apple-system,sans-serif;
font-size:15px;
line-height:1.55;
color:var(--gf-neutral-900);
background:#eceef6;
}
.gf-header:not(.gf-vol-dash-header){
background:#fbfdff;
color:var(--gf-primary-900);
padding:0.95rem 1.25rem 0.9rem;
box-shadow:0 8px 28px rgba(10,61,98,.1);
border-bottom:3px solid var(--gf-accent-teal-500);
}
.gf-header-inner{
max-width:1180px;
margin:0 auto;
display:flex;
align-items:center;
justify-content:space-between;
gap:1.1rem;
flex-wrap:wrap;
}
.gf-header.gf-site-header--light.gf-vol-dash-header{
position:sticky;
top:0;
z-index:40;
padding:0;
color:var(--gf-primary-900);
background:rgba(255,255,255,.94);
backdrop-filter:saturate(180%) blur(10px);
border-bottom:3px solid var(--gf-brand-teal);
box-shadow:0 6px 24px rgba(10,61,98,.08);
}
.gf-header.gf-vol-dash-header .gf-header-inner--stacked{
flex-direction:column;
align-items:stretch;
gap:14px;
padding:18px 24px;
max-width:1180px;
margin:0 auto;
}
.gf-header-brand-row{
display:flex;
flex-wrap:wrap;
align-items:center;
justify-content:space-between;
gap:16px 28px;
width:100%;
}
.gf-logo--with-lockup{
display:inline-flex;
align-items:center;
gap:12px;
text-decoration:none;
color:inherit;
border-radius:8px;
}
.gf-logo--with-lockup:focus-visible{outline:2px solid var(--gf-primary-500);outline-offset:3px;}
.gf-brand-mark-img{
display:block;
width:36px;
height:auto;
flex-shrink:0;
}
.gf-brand-wordmark-img{
display:block;
width:170px;
height:auto;
flex-shrink:0;
}
.gf-brand-logo-fullcolor{
width:auto;
height:36px;
max-width:200px;
object-fit:contain;
display:block;
}
.gf-vol-dash-home-link{
display:inline-flex;
align-items:center;
text-decoration:none;
border-radius:6px;
flex-shrink:0;
}
.gf-vol-dash-home-link:focus-visible{outline:2px solid var(--gf-primary-500);outline-offset:3px;}
.gf-vol-dash-header-meta{
margin-left:auto;
display:flex;
align-items:center;
flex-wrap:wrap;
gap:8px;
}
.gf-vol-settings-menu{
position:relative;
}
.gf-vol-settings-trigger{
list-style:none;
width:34px;
height:34px;
border-radius:10px;
border:1px solid rgba(10,61,98,.18);
background:#fff;
display:inline-flex;
align-items:center;
justify-content:center;
font-size:17px;
line-height:1;
cursor:pointer;
color:var(--gf-primary-900);
}
.gf-vol-settings-menu[open] .gf-vol-settings-trigger{
background:#f0f5fb;
border-color:rgba(10,61,98,.28);
}
.gf-vol-settings-trigger::-webkit-details-marker{display:none;}
.gf-vol-settings-pop{
position:absolute;
right:0;
top:calc(100% + 0.35rem);
min-width:10rem;
border:1px solid rgba(10,61,98,.16);
border-radius:10px;
background:#fff;
box-shadow:0 8px 26px rgba(10,61,98,.14);
padding:.35rem;
z-index:50;
display:flex;
flex-direction:column;
gap:.2rem;
}
.gf-vol-settings-pop a{
display:block;
padding:.42rem .55rem;
border-radius:8px;
font-size:.82rem;
font-weight:700;
color:var(--gf-primary-900);
text-decoration:none;
}
.gf-vol-settings-pop a:hover{
background:#eef4fb;
}
.gf-vol-dash-avatar{
width:34px;
height:34px;
border-radius:50%;
background:linear-gradient(135deg,var(--gf-primary-700),var(--gf-accent-teal-500));
color:#fff;
font-size:11px;
font-weight:800;
display:inline-flex;
align-items:center;
justify-content:center;
letter-spacing:.02em;
flex-shrink:0;
}
.gf-vol-dash-avatar-img{
object-fit:cover;
border:1px solid rgba(10,61,98,.16);
background:#fff;
}
.gf-vol-dash-logout{
font-size:11px;
padding:6px 10px;
white-space:nowrap;
}
.gf-header-nav-row{
width:100%;
padding-top:10px;
border-top:1px solid rgba(10,61,98,.12);
display:flex;
justify-content:center;
}
.gf-vol-dash-header-sections{
display:flex;
flex-wrap:wrap;
align-items:center;
justify-content:center;
gap:8px;
width:auto;
min-width:0;
}
.gf-vol-dash-header-sections a{
flex:0 0 auto;
font-size:10px;
font-weight:700;
text-transform:uppercase;
letter-spacing:.06em;
padding:7px 11px;
border-radius:999px;
background:rgba(255,255,255,.95);
border:1px solid rgba(10,61,98,.16);
color:var(--gf-primary-900);
text-decoration:none;
white-space:nowrap;
}
.gf-vol-dash-header-sections a:hover{
border-color:var(--gf-accent-teal-500);
text-decoration:none;
}
.gf-vol-dash-header-sections a[aria-current="page"]{
background:var(--gf-brand-teal);
border-color:var(--gf-brand-teal);
color:#fff;
}
.gf-profile-settings-link{
display:inline-flex;
align-items:center;
gap:.35rem;
}
.gf-vol-dash-session-context{
margin:0;
padding:8px 12px;
font-size:11px;
font-weight:700;
letter-spacing:.02em;
color:var(--gf-primary-900);
background:rgba(19,94,163,.07);
border-radius:10px;
line-height:1.45;
border:1px solid rgba(19,94,163,.14);
}
.gf-brand{
display:inline-flex;
align-items:center;
gap:0.75rem;
text-decoration:none;
color:var(--gf-primary-900);
padding:0.25rem 0.35rem 0.25rem 0;
border-radius:6px;
}
.gf-brand:focus-visible{outline:2px solid var(--gf-primary-500);outline-offset:3px;}
.gf-logo-mark{display:block;flex-shrink:0;width:200px;height:32px;}
.gf-wordmark{
display:block;
font-family:Montserrat,system-ui,sans-serif;
font-weight:800;
font-size:1.35rem;
letter-spacing:0.14em;
color:#0f2a43;
line-height:1;
white-space:nowrap;
}
.gf-main{
max-width:1180px;
margin:0 auto;
padding:1.8rem 1.4rem 3rem;
}
.gf-page-head{
background:linear-gradient(135deg,#ffffff 0%,#f6f9fc 100%);
border:1px solid var(--gf-neutral-200);
border-radius:14px;
padding:1.1rem 1.15rem 0.95rem;
margin:0 0 1rem;
box-shadow:0 2px 10px rgba(39,32,63,.06);
}
.gf-page-head p{margin:0.35rem 0;}
.gf-card{
background:#fff;
border:1px solid var(--gf-neutral-200);
border-radius:14px;
padding:1.15rem 1.2rem;
margin:0 0 1rem;
box-shadow:0 6px 18px rgba(15,42,67,.06);
}
.gf-shell-section-title{
margin:0 0 .2rem;
font-size:1.4rem;
font-weight:700;
color:var(--gf-primary-900);
}
.gf-page-subhead{
margin:0;
font-size:.9rem;
color:#5b677d;
}
.gf-toolbar{
display:flex;
flex-wrap:wrap;
justify-content:space-between;
align-items:center;
gap:.6rem .8rem;
margin:0 0 1rem;
}
.gf-toolbar-actions{
display:flex;
flex-wrap:wrap;
/* Center, don't stretch: without this, buttons grow to the height of the
   tallest sibling (e.g. a stacked filter control) and look enormous. */
align-items:center;
gap:.45rem;
}
.gf-tab-pills{
display:flex;
flex-wrap:wrap;
gap:.45rem;
margin:.25rem 0 1rem;
}
.gf-tab-pill{
display:inline-flex;
align-items:center;
padding:.38rem .78rem;
border-radius:999px;
font-size:.76rem;
font-weight:700;
letter-spacing:.04em;
text-transform:uppercase;
border:1px solid rgba(26,128,112,.22);
background:rgba(26,128,112,.12);
color:#205469;
}
.gf-tab-pill.is-active{
background:var(--gf-brand-teal);
border-color:var(--gf-brand-teal);
color:#fff;
}
.gf-grid{
display:grid;
grid-template-columns:1fr;
gap:0.85rem;
margin:0 0 1rem;
}
.gf-grid-2{
grid-template-columns:repeat(2,minmax(0,1fr));
}
.gf-grid-3{
grid-template-columns:repeat(3,minmax(0,1fr));
}
.gf-metric{
background:#fff;
border:1px solid var(--gf-neutral-200);
border-radius:12px;
padding:0.7rem 0.8rem;
}
.gf-metric-label{
font-size:0.75rem;
font-weight:600;
color:#5e677b;
text-transform:uppercase;
letter-spacing:.06em;
}
.gf-metric-value{
font-size:1.25rem;
font-weight:700;
color:var(--gf-neutral-900);
line-height:1.25;
margin-top:0.2rem;
}
.gf-next-action{
border-left:4px solid #c9a227;
background:linear-gradient(90deg,#fffbeb 0%,#fffdf8 100%);
padding:0.75rem 0.95rem;
border-radius:10px;
margin:0.8rem 0 1rem;
border:1px solid #f0e4c8;
border-left-width:4px;
border-left-color:#c9a227;
box-shadow:0 2px 8px rgba(120,90,20,.06);
}
.gf-next-action strong{color:#5c4510;}
.gf-empty-state{
padding:0.9rem 1rem;
background:#fbfcff;
border:1px dashed var(--gf-neutral-600);
border-radius:10px;
color:#586177;
}
.gf-timeline{
list-style:none;
margin:0;
padding:0;
}
.gf-timeline li{
position:relative;
padding:0 0 0.8rem 1rem;
margin:0 0 0.45rem;
border-left:2px solid #d8deea;
}
.gf-timeline li::before{
content:"";
position:absolute;
left:-0.37rem;
top:0.1rem;
width:0.55rem;
height:0.55rem;
border-radius:50%;
background:var(--gf-accent-teal-700);
border:2px solid #d9f2f5;
}
.gf-timeline li:last-child{margin-bottom:0;padding-bottom:0;border-left-color:transparent;}
.gf-actions{display:flex;flex-wrap:wrap;gap:0.5rem;align-items:center;}
.gf-details{
background:#fcfdff;
border:1px solid #e8ecf4;
border-radius:8px;
padding:0.2rem 0.45rem;
}
.gf-details summary{
cursor:pointer;
font-weight:600;
font-size:0.82rem;
color:#3f4962;
}
.gf-details ul{margin:0.45rem 0 0.2rem;padding-left:1rem;}
.gf-details li{margin:0.22rem 0;}
.gf-main h1{
margin:0 0 0.5rem;
font-size:1.7rem;
font-weight:700;
color:var(--gf-neutral-900);
line-height:1.25;
}
.gf-main h2{
margin:1.5rem 0 0.75rem;
font-size:1.2rem;
font-weight:700;
color:var(--gf-neutral-900);
border-bottom:1px solid var(--gf-neutral-200);
padding-bottom:0.5rem;
}
.gf-card h2{
margin:0 0 0.35rem;
padding:0;
border:0;
font-size:1.08rem;
font-weight:800;
color:var(--gf-primary-900);
letter-spacing:0.01em;
}
.gf-card h2 + .muted{
margin:0 0 0.65rem;
font-size:0.88rem;
color:#5a6578;
}
.gf-main h3{
margin:1rem 0 0.5rem;
font-size:1.05rem;
font-weight:700;
color:var(--gf-neutral-900);
}
.gf-main .row{
display:flex;
flex-wrap:wrap;
gap:0.65rem 1rem;
align-items:center;
margin:0.75rem 0 1rem;
}
.gf-main .muted{color:#616c83;font-size:0.875rem;}
.gf-main label{font-weight:600;font-size:0.875rem;color:var(--gf-neutral-900);}
.gf-main input,.gf-main select,.gf-main textarea{
font:inherit;
padding:0.5rem 0.65rem;
margin:0.2rem 0 0.65rem;
border:1px solid var(--gf-neutral-200);
border-radius:6px;
background:#fff;
color:var(--gf-neutral-900);
width:100%;
max-width:100%;
box-sizing:border-box;
}
/* Checkboxes and radios are not text fields. The rule above gave them
   width:100% plus text-field padding and margin, so inside any flex label the
   box claimed the whole row and starved its text: bulk volunteer names
   collapsed to one character per line, the Passport privacy explanation was
   squeezed into a narrow column, and in Safari (which resolves the percentage
   against the label) report-section labels overflowed onto each other.
   Width/padding/flex are reset at higher specificity so the ≤768px
   `.gf-main input{width:100%}` rule cannot reinstate them; margin is reset at
   the same specificity as the rule above, so any page that sets a checkbox
   margin on purpose still wins. */
.gf-main input[type="checkbox"],.gf-main input[type="radio"]{width:auto;max-width:none;min-width:0;padding:0;flex:0 0 auto;}
.gf-main input:where([type="checkbox"],[type="radio"]){margin:0;vertical-align:middle;}
/* A checkbox or radio with its label text: box and words stay together, text
   wraps by words, and the whole row is the click target. */
.gf-check-option{display:inline-flex;align-items:flex-start;gap:.4rem;cursor:pointer;min-width:0;max-width:100%;line-height:1.35;}
.gf-check-option > input[type="checkbox"],.gf-check-option > input[type="radio"]{margin-top:.12em;}
.gf-check-option > span{min-width:0;overflow-wrap:break-word;}
.gf-main input:focus,.gf-main select:focus,.gf-main textarea:focus{
outline:2px solid var(--gf-accent-teal-700);
outline-offset:1px;
border-color:var(--gf-accent-teal-700);
}
.gf-main table{
width:100%;
border-collapse:separate;
border-spacing:0;
margin:0.75rem 0 1rem;
background:#fff;
border:1px solid var(--gf-neutral-200);
border-radius:8px;
overflow:hidden;
}
.gf-main th,.gf-main td{
padding:0.55rem 0.65rem;
text-align:left;
border-bottom:1px solid var(--gf-neutral-200);
vertical-align:top;
}
.gf-main tbody tr:nth-child(even) td{background:#fcfcfe;}
.gf-main tbody tr:hover td{background:#f5f8fc;}
.gf-main tr:last-child td{border-bottom:none;}
.gf-main thead th{
background:linear-gradient(180deg,#f7f7fb 0%,#eef0f5 100%);
font-weight:700;
font-size:0.8rem;
text-transform:none;
letter-spacing:.01em;
color:var(--gf-neutral-900);
}
.gf-main tbody th{font-weight:600;background:#fafafa;}
.gf-main pre#status,.gf-main pre#dashStatus{
background:#fff;
border:1px solid var(--gf-neutral-200);
border-radius:6px;
padding:0.65rem 0.75rem;
min-height:1.25rem;
}
.gf-main pre#formStatus,.gf-main pre#error{
background:#fff;
border:1px solid var(--gf-neutral-200);
border-radius:6px;
padding:0.65rem 0.75rem;
min-height:1.25rem;
}
.gf-main pre#error:not(:empty){
color:var(--gf-danger-600);
border-color:#f0c4c5;
background:#fff8f8;
}
.gf-btn{
font:inherit;
font-weight:600;
cursor:pointer;
border-radius:999px;
padding:0.45rem 1rem;
border:1px solid transparent;
margin:0.15rem 0.15rem 0.15rem 0;
transition:background .15s,border-color .15s,color .15s,opacity .15s;
}
.gf-btn:disabled{opacity:.55;cursor:not-allowed;}
.gf-btn:focus-visible{
outline:3px solid rgba(47,114,184,.35);
outline-offset:2px;
}
.gf-btn-primary{
background:var(--gf-brand-teal);
color:#27203f;
border-color:#2db5c3;
}
.gf-btn-primary:hover:not(:disabled){background:#2db5c3;border-color:#2aabb8;}
.gf-btn-primary:active:not(:disabled){filter:brightness(.95);}
.gf-btn-secondary{
background:#fff;
color:var(--gf-neutral-900);
border-color:var(--gf-neutral-200);
}
.gf-btn-secondary:hover:not(:disabled){border-color:var(--gf-neutral-600);}
.gf-btn-secondary:active:not(:disabled){background:#f8f8fa;}
.gf-btn-accent{
background:#c778b2;
color:#fff;
border-color:#b56aa0;
}
.gf-btn-accent:hover:not(:disabled){filter:brightness(1.06);}
.gf-btn-accent:active:not(:disabled){filter:brightness(.95);}
.gf-btn-danger{
background:#fff;
color:var(--gf-danger-600);
border-color:var(--gf-danger-600);
}
.gf-btn-danger:hover:not(:disabled){background:#fff5f5;}
.gf-btn-danger:active:not(:disabled){background:#ffecec;}
.gf-btn-logout{
background:#fff;
color:var(--gf-primary-900);
border:1px solid var(--gf-neutral-200);
}
.gf-btn-logout:hover:not(:disabled){background:#f3f7fc;}
.gf-btn-logout:active:not(:disabled){background:#eaf1f9;}
.gf-user-strip{
display:flex;
align-items:center;
gap:0.65rem;
flex-shrink:0;
}
.gf-header-meta{
color:#4a5563;
font-size:0.8rem;
max-width:min(240px,40vw);
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
.gf-main ul{padding-left:1.15rem;}
.gf-main li{margin:0.35rem 0;}
.gf-main small{color:var(--gf-neutral-600);}
.gf-table-wrap{
overflow-x:auto;
-webkit-overflow-scrolling:touch;
margin:0.75rem 0 1rem;
}
.gf-table-wrap table{
margin:0;
min-width:640px;
}
.gf-num{text-align:right;font-variant-numeric:tabular-nums;}
.gf-truncate{
max-width:16rem;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
display:inline-block;
vertical-align:bottom;
}
.gf-status{
display:inline-block;
padding:0.18rem 0.45rem;
border-radius:999px;
font-size:0.78rem;
font-weight:600;
line-height:1.2;
border:1px solid transparent;
}
.gf-status-pending{background:#fff6e8;border-color:#fbb85b;color:#7a5112;}
.gf-status-approved{background:#ecf6ff;border-color:#2f72b8;color:#0a3d62;}
.gf-status-rejected{background:#fff0f0;border-color:#c53030;color:#7a2425;}
.gf-vol-hero{
background:linear-gradient(125deg,#e8f2ff 0%,#f5f9ff 38%,#ffffff 100%);
border:1px solid #c8daf0;
box-shadow:0 10px 32px rgba(10,61,98,.1);
padding:1.35rem 1.4rem 1.25rem;
}
.gf-vol-hero.gf-card{
background:linear-gradient(125deg,#e8f2ff 0%,#f5f9ff 38%,#ffffff 100%);
}
.gf-vol-section-title{
font-size:2rem;
font-weight:800;
letter-spacing:.03em;
color:var(--gf-primary-900);
margin:.05rem 0 -.2rem;
}
.gf-vol-hero-top{
display:grid;
grid-template-columns:minmax(0,1.3fr) 150px;
gap:.8rem;
align-items:center;
}
.gf-vol-hero-sparkle{margin:0 0 0.15rem;font-size:1.85rem;line-height:1;}
.gf-vol-hero-avatar{
width:150px;
height:150px;
border-radius:999px;
background:radial-gradient(circle at 32% 28%,#ffe8f0 0%,#ffb8d4 32%,#e878a8 62%,#b8568c 100%);
justify-self:end;
box-shadow:0 12px 28px rgba(180,90,130,.35),inset -12px -12px 28px rgba(255,255,255,.35);
position:relative;
}
.gf-vol-hero-avatar::after{
content:"";
position:absolute;
inset:18%;
border-radius:50%;
background:radial-gradient(circle at 30% 30%,rgba(255,255,255,.65),transparent 55%);
opacity:0.9;
}
.gf-vol-hero-avatar-img{
object-fit:cover;
border:1px solid rgba(10,61,98,.12);
}
.gf-progress-row{
display:grid;
grid-template-columns:minmax(120px,1fr) minmax(120px,2fr) auto;
align-items:center;
gap:.55rem;
margin:0 0 .45rem;
}
.gf-progress-label{font-size:.85rem;color:#344b66;font-weight:600;}
.gf-progress-track{
height:10px;
background:#e5edf6;
border-radius:999px;
overflow:hidden;
}
.gf-progress-fill{
display:block;
height:100%;
background:linear-gradient(90deg,#0f5c52,#2f72b8);
}
.gf-progress-value{font-size:.78rem;color:#3f566f;font-weight:700;}
.gf-vol-hero-context{font-weight:600;color:#2f3f59;margin:.2rem 0;}
.gf-vol-progress-card{
border:1px solid var(--gf-neutral-200);
border-radius:12px;
padding:.55rem .7rem;
background:#fff;
margin:.45rem 0;
}
.gf-vol-progress-kicker{
margin:0;
font-size:.72rem;
text-transform:uppercase;
letter-spacing:.05em;
color:#5f6a80;
font-weight:700;
}
.gf-vol-progress-big{
margin:.15rem 0;
font-size:2rem;
font-weight:800;
line-height:1.05;
color:#1e3350;
}
.gf-vol-progress-track{
height:10px;
border-radius:999px;
background:#e4ebf4;
overflow:hidden;
}
.gf-vol-progress-fill{
display:block;
height:100%;
background:linear-gradient(90deg,#1a8070 0%,#2f72b8 100%);
}
.gf-vol-progress-note{margin:.2rem 0 0;font-size:.8rem;color:#395472;font-weight:600;}
.gf-vol-hero h1{
margin:0.1rem 0 0.45rem;
font-size:2rem;
line-height:1.15;
}
.gf-vol-hero-kicker{
margin:0;
font-size:.76rem;
letter-spacing:.08em;
text-transform:uppercase;
font-weight:700;
color:var(--gf-primary-900);
}
.gf-form-section{
border:1px solid var(--gf-neutral-200);
border-radius:12px;
padding:0.65rem 0.78rem;
margin:0 0 0.6rem;
background:#fbfdff;
}
.gf-vol-dashboard{
display:grid;
grid-template-columns:minmax(0,1.55fr) minmax(280px,.9fr);
gap:0.9rem;
align-items:start;
}
.gf-vol-dashboard--stacked{
grid-template-columns:1fr;
}
.gf-vol-mid-grid{
display:grid;
grid-template-columns:minmax(0,1.25fr) minmax(260px,0.95fr);
gap:0.9rem;
align-items:start;
margin:0 0 0.85rem;
}
.gf-activities-toolbar{
display:flex;
flex-wrap:wrap;
gap:0.45rem;
align-items:center;
margin:0 0 0.75rem;
}
.gf-filter-chip,.gf-act-filter{
border:1px solid var(--gf-neutral-200);
background:#fff;
border-radius:999px;
padding:0.28rem 0.65rem;
font-size:0.78rem;
font-weight:600;
color:#3d4a5c;
cursor:pointer;
}
.gf-filter-chip.is-active,.gf-act-filter.is-active{
background:var(--gf-primary-900);
color:#fff;
border-color:var(--gf-primary-900);
}
table.gf-act-table th{
font-size:0.72rem;
text-transform:uppercase;
letter-spacing:0.04em;
color:#5f6a80;
}
table.gf-act-table td{vertical-align:middle;}
.gf-act-actions{white-space:nowrap;}
.gf-act-row-buttons{
display:flex;
flex-wrap:wrap;
gap:0.35rem;
align-items:center;
justify-content:flex-end;
max-width:14rem;
margin-left:auto;
}
tr.gf-act-locked{background:#f8fafc;}
tr[data-vol-status="verified"] td:first-child{
box-shadow:inset 3px 0 0 0 #44c3d0;
}
tr[data-vol-status="in_review"] td:first-child{
box-shadow:inset 3px 0 0 0 #f59e0b;
}
tr[data-vol-status="not_approved"] td:first-child{
box-shadow:inset 3px 0 0 0 #ef4444;
}
tr[data-vol-status="other"] td:first-child{
box-shadow:inset 3px 0 0 0 #94a3b8;
}
.gf-activities-status-legend{font-size:0.82rem;}
.gf-activities-status-legend .gf-legend-verified{color:#15803d;}
.gf-activities-status-legend .gf-legend-in_review{color:#b45309;}
.gf-activities-status-legend .gf-legend-not_approved{color:#b91c1c;}
.gf-activities-status-legend .gf-legend-other{color:#475569;}
.gf-goals-section-title{
margin:1.15rem 0 0.5rem;
font-size:1.05rem;
font-weight:800;
color:var(--gf-primary-900);
}
.gf-goals-section-title:first-of-type{margin-top:0;}
.gf-goal-stat-secondary{
font-size:1.05rem;
font-weight:700;
color:#2a4a6e;
margin:0.15rem 0 0;
}
.gf-goal-create-form{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:0.5rem 0.85rem;
align-items:end;
margin-top:0.45rem;
}
.gf-goal-create-form button{grid-column:1/-1;justify-self:start;}
@media(max-width:560px){
.gf-goal-create-form{grid-template-columns:1fr;}
/* Notification popover: anchor to the viewport, not the bell, so it never
   extends off-screen when the stacked header places the bell on the left. */
.gf-notif-pop{position:fixed;left:.5rem;right:.5rem;top:4.25rem;width:auto;max-height:70vh;overflow-y:auto;}
}
.gf-modal-form-stack{
display:flex;
flex-direction:column;
gap:0.35rem;
}
.gf-modal-section{
margin-bottom:0.15rem;
}
.gf-modal-actions{
margin-top:0.85rem;
padding-top:0.65rem;
border-top:1px solid var(--gf-neutral-200);
gap:0.5rem;
}
.gf-btn-modal-primary{
min-width:11rem;
font-weight:800;
font-size:1.02rem;
padding:0.58rem 1.35rem;
box-shadow:0 4px 14px rgba(10,61,98,.18);
}
.gf-btn-sm{
font-size:0.78rem;
padding:0.28rem 0.55rem;
}
.gf-goals-grid{
display:grid;
grid-template-columns:repeat(auto-fill,minmax(250px,1fr));
gap:0.9rem;
margin:0 0 1rem;
}
.gf-goal-card{
border:1px solid var(--gf-neutral-200);
border-radius:12px;
padding:0.95rem 1rem;
background:linear-gradient(180deg,#fbfdff 0%,#fff 100%);
box-shadow:0 1px 6px rgba(39,32,63,.05);
}
.gf-goal-card h3{margin:0 0 0.35rem;font-size:1rem;color:var(--gf-primary-900);}
.gf-goal-card .gf-goal-meta{margin:0 0 0.5rem;font-size:0.8rem;color:#5a6578;}
.gf-goal-stat{font-size:1.35rem;font-weight:800;color:#1e3350;}
.gf-plan-card{
border:1px solid var(--gf-neutral-200);
border-radius:12px;
padding:1rem 1.05rem;
margin:0 0 0.65rem;
background:#fff;
}
.gf-plan-grid{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:.85rem;
}
.gf-profile-hero{
display:grid;
grid-template-columns:120px minmax(0,1fr);
gap:1rem;
align-items:center;
}
.gf-profile-avatar{
width:108px;
height:108px;
border-radius:999px;
display:flex;
align-items:center;
justify-content:center;
font-size:1.5rem;
font-weight:800;
color:#fff;
background:linear-gradient(135deg,#135ea3,#1a8070);
box-shadow:0 8px 20px rgba(10,61,98,.2);
}
.gf-profile-form-grid{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:.6rem .9rem;
}
.gf-profile-portfolio-list{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:.7rem;
}
.gf-portfolio-item{
border:1px solid var(--gf-neutral-200);
border-radius:10px;
padding:.75rem .8rem;
background:#fff;
}
.gf-portfolio-section{
margin-bottom:1.5rem;
}
.gf-portfolio-section-title{
font-size:1rem;
font-weight:700;
color:var(--gf-primary-700);
margin:0 0 .6rem;
padding-bottom:.3rem;
border-bottom:2px solid var(--gf-primary-100,#dbeafe);
text-transform:uppercase;
letter-spacing:.04em;
}
.gf-portfolio-empty{
color:var(--gf-neutral-400);
font-size:.9rem;
margin:.25rem 0;
}
.gf-artifact-card{
border:1px solid var(--gf-neutral-200);
border-radius:10px;
padding:.75rem .85rem;
background:#fff;
margin-bottom:.55rem;
}
.gf-artifact-card-header{
display:flex;
flex-direction:column;
gap:.1rem;
margin-bottom:.4rem;
}
.gf-artifact-title{
font-size:.98rem;
font-weight:700;
color:var(--gf-neutral-900);
margin:0;
}
.gf-artifact-meta{
font-size:.82rem;
color:var(--gf-neutral-500);
margin:.1rem 0 0;
}
.gf-artifact-body{
margin:.35rem 0;
}
.gf-artifact-pre{
white-space:pre-wrap;
word-break:break-word;
font-family:inherit;
font-size:.9rem;
color:var(--gf-neutral-800);
margin:0;
max-height:5rem;
overflow-y:auto;
}
.gf-artifact-actions{
display:flex;
gap:.4rem;
margin-top:.5rem;
}
.gf-pf-form{
background:#f8fafc;
border:1px solid var(--gf-neutral-200);
border-radius:12px;
padding:1rem 1.1rem;
margin-bottom:1.2rem;
}
.gf-pf-row-2{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:.5rem .8rem;
}
/* My Difference hero */
.gf-md-hero{
display:flex;
align-items:center;
justify-content:space-between;
gap:1.5rem;
flex-wrap:wrap;
margin-bottom:.85rem;
}
.gf-md-hero-identity{
display:flex;
align-items:center;
gap:1rem;
}
.gf-md-avatar-img{
width:68px;
height:68px;
border-radius:999px;
object-fit:cover;
border:3px solid var(--gf-accent-teal-700);
flex-shrink:0;
}
.gf-md-avatar-initials{
width:68px;
height:68px;
border-radius:999px;
background:linear-gradient(135deg,var(--gf-accent-teal-700),var(--gf-primary-700));
color:#fff;
font-weight:800;
font-size:1.5rem;
display:flex;
align-items:center;
justify-content:center;
flex-shrink:0;
letter-spacing:.04em;
}
.gf-md-hero-name{
font-size:1.25rem;
font-weight:800;
color:var(--gf-primary-900);
margin:0 0 .15rem;
}
.gf-md-hero-email{
margin:0;
font-size:.85rem;
}
.gf-md-hero-since{
margin:.1rem 0 0;
font-size:.82rem;
}
.gf-md-hero-stats{
display:flex;
gap:1.5rem;
flex-wrap:wrap;
}
.gf-md-stat{
text-align:center;
}
.gf-md-stat-value{
font-size:1.6rem;
font-weight:800;
color:var(--gf-accent-teal-700);
line-height:1;
}
.gf-md-stat-label{
font-size:.76rem;
color:var(--gf-neutral-500);
margin-top:.2rem;
text-transform:uppercase;
letter-spacing:.04em;
}
/* My Difference sections */
.gf-difference-featured{
border-left:4px solid var(--gf-accent-teal-700);
margin-bottom:.85rem;
}
.gf-difference-section-h{
font-size:1.05rem;
}
.gf-md-add-card{
margin-bottom:.85rem;
}
.gf-md-add-header{
margin-bottom:1rem;
}
.gf-md-sections-card{
margin-bottom:.85rem;
}
/* artifact pin badge */
.gf-artifact-title-row{
display:flex;
align-items:center;
gap:.4rem;
flex-wrap:wrap;
}
.gf-artifact-pin-badge{
font-size:.7rem;
font-weight:700;
color:var(--gf-accent-teal-700);
background:rgba(15,92,82,.08);
border:1px solid rgba(15,92,82,.2);
border-radius:999px;
padding:.15rem .45rem;
letter-spacing:.03em;
white-space:nowrap;
}
.gf-artifact-card--pinned{
border-color:rgba(15,92,82,.35);
background:#f7fdfc;
}
.gf-checkbox-label{
display:flex;
align-items:center;
gap:.4rem;
font-weight:500;
cursor:pointer;
}
.gf-pf-checkbox-row{
margin:.15rem 0 .3rem;
}
.gf-pf-checkbox-row .gf-checkbox-label{
flex-wrap:wrap;
}
/* Settings */
.gf-settings-grid{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:.85rem;
}
.gf-settings-org-list{
list-style:none;
margin:0;
padding:0;
}
.gf-settings-org-item{
padding:.5rem 0;
border-bottom:1px solid var(--gf-neutral-100);
}
.gf-settings-org-item:last-child{
border-bottom:0;
}
.gf-settings-org-name{
font-weight:600;
}
.gf-settings-section{
margin-bottom:1rem;
}
.gf-settings-row{
display:flex;
gap:1rem;
align-items:baseline;
padding:.35rem 0;
border-bottom:1px solid var(--gf-neutral-100);
}
.gf-settings-label{
font-size:.83rem;
color:var(--gf-neutral-500);
text-transform:uppercase;
letter-spacing:.04em;
min-width:80px;
}
.gf-settings-value{
font-weight:500;
}
.gf-settings-subhead{
font-size:.95rem;
font-weight:700;
color:var(--gf-primary-900);
margin:1.25rem 0 .6rem;
padding-top:.85rem;
border-top:1px solid var(--gf-neutral-100);
}
.gf-settings-form{
display:flex;
flex-direction:column;
gap:.55rem;
}
/* AI summary card */
.gf-ai-summary-card{
border:2px solid var(--gf-brand-teal-100);
background:linear-gradient(135deg,var(--gf-brand-teal-50) 0%,#fff 60%);
margin-bottom:.85rem;
position:relative;
}
.gf-ai-summary-card::before{
content:'';
position:absolute;
top:0;left:0;right:0;
height:3px;
background:linear-gradient(90deg,var(--gf-brand-teal),var(--gf-brand-purple));
border-radius:10px 10px 0 0;
}
.gf-ai-summary-header{
display:flex;
align-items:flex-start;
gap:1rem;
margin-bottom:1rem;
}
.gf-ai-summary-icon{
font-size:1.6rem;
line-height:1;
flex-shrink:0;
}
.gf-ai-summary-title{
font-size:1.05rem;
color:var(--gf-brand-midnight);
}
.gf-ai-summary-controls{
display:flex;
align-items:flex-end;
gap:.75rem;
flex-wrap:wrap;
margin-bottom:.5rem;
}
.gf-ai-summary-controls>div{
flex:1;
min-width:180px;
}
.gf-ai-label{
font-size:.83rem;
font-weight:600;
color:var(--gf-neutral-700);
text-transform:uppercase;
letter-spacing:.04em;
display:block;
margin-bottom:.3rem;
}
.gf-ai-summary-select{
width:100%;
border:1px solid var(--gf-brand-teal-200);
border-radius:8px;
padding:.45rem .65rem;
font:inherit;
font-size:.9rem;
background:#fff;
color:var(--gf-brand-midnight);
cursor:pointer;
}
.gf-btn-ai-generate{
background:#c778b2;
color:#fff;
border-color:#b56aa0;
font-weight:700;
letter-spacing:.02em;
white-space:nowrap;
}
.gf-btn-ai-generate:hover:not(:disabled){
background:#b56aa0;
border-color:#9e5a8c;
}
.gf-btn-ai-generate:disabled{
opacity:.55;
}
.gf-ai-summary-result{
margin-top:1rem;
padding-top:1rem;
border-top:1px solid var(--gf-brand-teal-100);
}
.gf-ai-disclaimer{
background:var(--gf-brand-yellow-50);
border:1px solid var(--gf-brand-yellow-100);
border-radius:8px;
padding:.55rem .75rem;
font-size:.85rem;
color:#7a5a1a;
margin-bottom:.75rem;
}
.gf-ai-draft-textarea{
width:100%;
box-sizing:border-box;
border:1px solid var(--gf-brand-teal-200);
border-radius:8px;
padding:.65rem .75rem;
font:inherit;
font-size:.9rem;
line-height:1.6;
resize:vertical;
margin:.4rem 0 .75rem;
background:#fff;
}
.gf-ai-draft-textarea:focus{
outline:2px solid var(--gf-brand-teal);
outline-offset:1px;
border-color:var(--gf-brand-teal);
}
.gf-ai-summary-actions{
display:flex;
align-items:center;
flex-wrap:wrap;
gap:.4rem;
margin-bottom:.75rem;
}
.gf-ai-context-details{
margin-top:.5rem;
}
.gf-ai-context-pre{
background:var(--gf-neutral-50);
border:1px solid var(--gf-neutral-200);
border-radius:8px;
padding:.6rem .75rem;
font-size:.78rem;
color:var(--gf-neutral-700);
white-space:pre-wrap;
word-break:break-word;
overflow-x:auto;
max-height:180px;
overflow-y:auto;
margin:.35rem 0 0;
}
.gf-plan-card h3{margin:0 0 0.25rem;font-size:1.02rem;}
.gf-vol-dashboard-main,.gf-vol-dashboard-side{
display:flex;
flex-direction:column;
gap:0.85rem;
}
.gf-vol-impact-chips{
display:grid;
grid-template-columns:repeat(3,minmax(0,1fr));
gap:0.5rem;
margin:.55rem 0 .3rem;
}
.gf-vol-impact-chip{
border:1px solid var(--gf-neutral-200);
border-radius:10px;
padding:.45rem .5rem;
background:#fff;
display:flex;
flex-direction:column;
gap:.1rem;
}
.gf-vol-impact-chip span{
font-size:.68rem;
text-transform:uppercase;
letter-spacing:.04em;
color:#5f687d;
font-weight:600;
}
.gf-vol-impact-chip strong{
font-size:1.05rem;
color:var(--gf-primary-900);
line-height:1.2;
}
.gf-log-activity-drawer summary{
list-style:none;
cursor:pointer;
display:flex;
justify-content:space-between;
align-items:center;
font-weight:700;
font-size:1.08rem;
margin:0;
}
.gf-log-activity-drawer:not([open]) .gf-log-activity-body{display:none;}
.gf-log-activity-drawer summary::-webkit-details-marker{display:none;}
.gf-log-activity-drawer summary small{
font-weight:600;
font-size:.76rem;
color:#657088;
}
.gf-log-activity-body{
margin-top:.7rem;
}
.gf-log-activity-head{
display:flex;
justify-content:space-between;
align-items:center;
gap:.5rem;
padding-bottom:.45rem;
border-bottom:1px solid var(--gf-neutral-200);
}
.gf-log-activity-head h2{margin:0;font-size:1.15rem;}
.gf-log-activity-head small{color:#657088;font-weight:600;}
.gf-vol-rec-metrics{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:.45rem;
margin:.5rem 0 .75rem;
}
.gf-vol-rec-metrics div{
border:1px solid var(--gf-neutral-200);
border-radius:10px;
padding:.45rem .5rem;
background:#fbfdff;
}
.gf-vol-rec-metrics span{
display:block;
font-size:.72rem;
color:#616b80;
}
.gf-vol-rec-metrics strong{
font-size:1.1rem;
color:var(--gf-primary-900);
}
.gf-btn-text{
display:inline-flex;
align-items:center;
gap:0.35rem;
padding:0;
margin:0.15rem 0 0;
border:0;
background:none;
font:inherit;
font-weight:700;
font-size:0.92rem;
color:var(--gf-primary-500);
text-decoration:underline;
text-underline-offset:0.18em;
cursor:pointer;
}
.gf-btn-text:hover{color:var(--gf-primary-900);}
a.gf-btn-text{color:var(--gf-primary-500);}
a.gf-btn-text:hover{color:var(--gf-primary-900);}
.gf-log-cta-card{
display:flex;
flex-direction:column;
gap:.45rem;
}
.gf-vol-dashboard-next{
margin:0.65rem 0 0.35rem;
}
.gf-vol-dashboard-cta-card{
display:flex;
flex-direction:column;
align-items:center;
text-align:center;
gap:0.55rem;
padding:1.35rem 1.1rem 1.45rem;
border:2px solid #c5daf0;
background:linear-gradient(180deg,#f3f9ff 0%,#fff 55%);
box-shadow:0 8px 28px rgba(10,61,98,.12);
}
.gf-vol-cta-eyebrow{
margin:0;
font-size:0.72rem;
font-weight:800;
letter-spacing:0.12em;
text-transform:uppercase;
}
.gf-vol-cta-title{
margin:0;
font-size:1.38rem;
font-weight:900;
line-height:1.2;
color:var(--gf-primary-900);
}
.gf-vol-cta-copy{
margin:0;
max-width:26rem;
font-size:0.9rem;
line-height:1.45;
}
.gf-vol-dashboard-cta-btn{
min-width:15rem;
font-size:1.06rem;
font-weight:800;
padding:0.72rem 1.65rem;
margin-top:0.15rem;
box-shadow:0 6px 22px rgba(10,61,98,.22);
border:1px solid rgba(10,61,98,.12);
}
.gf-form-section h3{
margin:0 0 0.5rem;
font-size:1rem;
}
.gf-form-grid-2{
display:grid;
grid-template-columns:repeat(2,minmax(0,1fr));
gap:0.45rem 0.75rem;
}
.gf-form-grid-2 > div{
min-width:0;
}
.gf-dense-form input,.gf-dense-form select,.gf-dense-form textarea{
margin:0.15rem 0 0.45rem;
padding:0.42rem 0.56rem;
}
.gf-dense-form .muted{
margin-top:0.1rem;
}
.gf-primary-action-card{
border-color:#c9ddf1;
box-shadow:0 6px 18px rgba(10,61,98,.08);
}
.gf-btn-primary-cta{
font-size:.98rem;
padding:.56rem 1.2rem;
}
.gf-next-action-soft{
border-left-color:#d7e4f2;
background:#f7fbff;
}
.gf-next-action-soft strong{
color:#2e557e;
}
.gf-vol-timeline{
margin-top:.3rem;
}
.gf-vol-timeline .gf-vol-timeline-item{
display:flex;
gap:.55rem;
align-items:flex-start;
}
.gf-vol-timeline .gf-vol-timeline-date{
font-weight:700;
color:#1e3350;
min-width:5.8rem;
}
.gf-vol-timeline .gf-vol-timeline-body{
display:inline-flex;
flex-wrap:wrap;
gap:.35rem;
align-items:center;
}
.gf-vol-timeline .gf-status{
font-size:.7rem;
}
.gf-vol-timeline li::before{
background:var(--gf-brand-teal);
border-color:var(--gf-brand-teal-100);
}
.gf-sr-only{
position:absolute;
width:1px;
height:1px;
padding:0;
margin:-1px;
overflow:hidden;
clip:rect(0,0,0,0);
white-space:nowrap;
border:0;
}
.gf-modal-backdrop{
position:fixed;
inset:0;
z-index:1000;
background:rgba(15,31,50,.48);
display:none;
}
.gf-modal{
position:fixed;
left:50%;
top:50%;
transform:translate(-50%,-50%);
z-index:1001;
width:min(720px,calc(100vw - 1.5rem));
max-height:min(88vh,900px);
overflow:auto;
background:#fff;
border:1px solid var(--gf-neutral-200);
border-radius:14px;
box-shadow:0 22px 56px rgba(10,61,98,.22);
display:none;
padding:0;
}
.gf-modal-head{
display:flex;
align-items:flex-start;
justify-content:space-between;
gap:.75rem;
padding:0.85rem 1rem 0.65rem;
border-bottom:1px solid var(--gf-neutral-200);
background:linear-gradient(180deg,#fbfdff 0%,#fff 100%);
border-radius:14px 14px 0 0;
}
.gf-modal-head h2{
margin:0;
font-size:1.12rem;
color:var(--gf-primary-900);
}
.gf-modal-close{
border:0;
background:transparent;
color:#4a5a72;
font-size:1.45rem;
line-height:1;
padding:0.1rem 0.35rem;
border-radius:8px;
cursor:pointer;
}
.gf-modal-close:hover{background:#eef2f8;}
.gf-modal-body{
padding:0.85rem 1rem 1rem;
}
.gf-recent-details summary{
cursor:pointer;
list-style:none;
font-weight:700;
color:var(--gf-primary-900);
}
.gf-recent-details summary::-webkit-details-marker{display:none;}
.gf-recent-summary{
display:flex;
flex-wrap:wrap;
align-items:center;
gap:.35rem .6rem;
}
.gf-recent-summary-hint{
font-weight:600;
font-size:.82rem;
color:#5f6a80;
}
.gf-recent-details-body{
margin-top:.55rem;
}
.gf-vol-wins-title{
margin:.35rem 0 .45rem;
font-size:1.05rem;
font-weight:800;
color:var(--gf-primary-900);
}
.gf-vol-wins-grid{
display:grid;
grid-template-columns:repeat(3,minmax(0,1fr));
gap:.55rem;
margin:0 0 .65rem;
}
.gf-vol-win-card{
display:flex;
gap:.55rem;
align-items:center;
border:1px solid #dde4ee;
border-radius:999px;
padding:.55rem .85rem;
background:linear-gradient(180deg,#ffffff 0%,#f4f7fb 100%);
box-shadow:0 2px 6px rgba(15,42,67,.05);
}
.gf-vol-win-card > span:first-child{
font-size:1.15rem;
line-height:1.2;
flex-shrink:0;
}
.gf-vol-win-card p{margin:0;font-size:.82rem;color:#2e3a4d;line-height:1.35;}
.gf-vol-win-card strong{color:var(--gf-primary-900);}
/* Skills multi-select */
.gf-skills-select{
width:100%;
min-height:7rem;
font:inherit;
padding:0.3rem 0.45rem;
margin:0.15rem 0 0.45rem;
border:1px solid var(--gf-neutral-200);
border-radius:6px;
background:#fff;
color:var(--gf-neutral-900);
box-sizing:border-box;
}
.gf-skills-select:focus{
outline:2px solid var(--gf-accent-teal-700);
outline-offset:1px;
border-color:var(--gf-accent-teal-700);
}
.gf-modal-head-actions{
display:flex;
align-items:center;
gap:.5rem;
}
.gf-btn-mic{
border:0;
background:transparent;
color:var(--gf-neutral-600);
font-size:1.1rem;
line-height:1;
padding:0.1rem 0.35rem;
border-radius:8px;
cursor:pointer;
}
.gf-btn-mic:hover{background:#eef2f8;color:var(--gf-primary-900);}
@media (max-width:768px){
.gf-main .gf-filter-inline select.gf-filter-select-sm{width:auto;min-width:8.5rem;}
.gf-main{padding:1rem 0.875rem 2rem;}
.gf-main h1{font-size:1.45rem;}
.gf-main h2{font-size:1.1rem;}
.gf-main .gf-user-strip{width:100%;justify-content:flex-end;}
.gf-vol-dash-brand-row{flex-direction:column;align-items:stretch;}
.gf-vol-dash-header-meta{margin-left:0;justify-content:flex-start;}
.gf-brand-wordmark-img{width:156px;}
.gf-main input,.gf-main select,.gf-main textarea,.gf-main .gf-btn{width:100%;}
.gf-main .row .gf-btn{width:auto;}
.gf-main .gf-btn + .gf-btn{margin-left:0;}
.gf-grid-2,.gf-grid-3{grid-template-columns:1fr;}
.gf-plan-grid{grid-template-columns:1fr;}
.gf-profile-hero{grid-template-columns:1fr;}
.gf-profile-portfolio-list{grid-template-columns:1fr;}
.gf-profile-form-grid{grid-template-columns:1fr;}
.gf-pf-row-2{grid-template-columns:1fr;}
.gf-md-hero{flex-direction:column;align-items:flex-start;}
.gf-md-hero-stats{gap:.85rem;}
.gf-settings-grid{grid-template-columns:1fr;}
.gf-form-grid-2{grid-template-columns:1fr;}
.gf-vol-hero h1{font-size:1.6rem;}
.gf-vol-timeline .gf-vol-timeline-item{flex-direction:column;gap:.2rem;}
.gf-vol-timeline .gf-vol-timeline-date{min-width:0;}
.gf-vol-dashboard{grid-template-columns:1fr;}
.gf-vol-mid-grid{grid-template-columns:1fr;}
.gf-vol-impact-chips{grid-template-columns:1fr;}
.gf-log-activity-drawer summary{flex-direction:column;align-items:flex-start;gap:.2rem;}
.gf-vol-section-title{font-size:1.6rem;}
.gf-vol-hero-top{grid-template-columns:1fr;}
.gf-vol-hero-avatar{justify-self:start;width:96px;height:96px;}
.gf-vol-progress-big{font-size:1.5rem;}
.gf-vol-wins-grid{grid-template-columns:1fr;}
}
/* Visibility toggle badge */
.gf-artifact-visibility-row{
display:flex;
align-items:center;
gap:.5rem;
margin-top:.4rem;
flex-wrap:wrap;
}
.gf-visibility-badge{
font-size:.72rem;
font-weight:600;
border-radius:999px;
padding:.15rem .5rem;
letter-spacing:.03em;
white-space:nowrap;
}
.gf-visibility-badge--public{
background:rgba(15,92,82,.08);
border:1px solid rgba(15,92,82,.25);
color:var(--gf-accent-teal-700);
}
.gf-visibility-badge--private{
background:var(--gf-neutral-100);
border:1px solid var(--gf-neutral-200);
color:var(--gf-neutral-600);
}
.gf-btn-visibility{
font-size:.74rem;
padding:.18rem .55rem;
border-radius:6px;
border:1.5px solid var(--gf-neutral-300,#cbd5e0);
background:#fff;
color:var(--gf-neutral-700);
cursor:pointer;
white-space:nowrap;
line-height:1.4;
font-weight:600;
}
.gf-btn-visibility:hover{background:var(--gf-neutral-50);border-color:var(--gf-neutral-400);}
/* Public profile share controls on My Difference page */
.gf-pub-share-bar{
display:flex;
align-items:center;
gap:.6rem;
flex-wrap:wrap;
padding:.6rem .85rem;
background:var(--gf-brand-teal-50);
border:1px solid var(--gf-brand-teal-100);
border-radius:10px;
margin-bottom:.85rem;
}
.gf-pub-share-bar-text{
font-size:.85rem;
color:var(--gf-neutral-700);
margin:0;
flex:1;
}
/* Public profile page */
.gf-pub-profile{
max-width:760px;
margin:0 auto;
}
.gf-pub-header{
background:linear-gradient(135deg,var(--gf-brand-midnight) 0%,#3d3160 100%);
color:#fff;
border-radius:16px;
padding:2rem 2rem 1.5rem;
margin-bottom:1.25rem;
}
.gf-pub-avatar{
width:72px;
height:72px;
border-radius:999px;
background:linear-gradient(135deg,var(--gf-brand-teal),var(--gf-brand-purple));
color:#fff;
font-weight:800;
font-size:1.6rem;
display:flex;
align-items:center;
justify-content:center;
margin-bottom:1rem;
border:3px solid rgba(255,255,255,.25);
}
.gf-pub-name{
font-size:1.4rem;
font-weight:800;
margin:0 0 .25rem;
}
.gf-pub-since{
font-size:.85rem;
opacity:.75;
margin:0 0 1.25rem;
}
.gf-pub-stats{
display:flex;
gap:2rem;
flex-wrap:wrap;
}
.gf-pub-stat-value{
font-size:1.8rem;
font-weight:800;
line-height:1;
}
.gf-pub-stat-label{
font-size:.75rem;
opacity:.7;
margin-top:.15rem;
text-transform:uppercase;
letter-spacing:.05em;
}
.gf-pub-card{
background:#fff;
border:1px solid var(--gf-neutral-200);
border-radius:14px;
padding:1.1rem 1.2rem;
margin-bottom:1rem;
box-shadow:0 4px 12px rgba(39,32,63,.06);
}
.gf-pub-section-title{
font-size:.8rem;
font-weight:700;
text-transform:uppercase;
letter-spacing:.06em;
color:var(--gf-neutral-500);
margin:0 0 .75rem;
}
.gf-pub-artifact-title{
font-size:.98rem;
font-weight:700;
color:var(--gf-neutral-900);
margin:0 0 .2rem;
}
.gf-pub-artifact-meta{
font-size:.8rem;
color:var(--gf-neutral-500);
margin:0 0 .4rem;
}
.gf-pub-artifact-body{
font-size:.88rem;
color:var(--gf-neutral-700);
margin:0;
white-space:pre-wrap;
word-break:break-word;
}
.gf-pub-artifact + .gf-pub-artifact{
margin-top:.85rem;
padding-top:.85rem;
border-top:1px solid var(--gf-neutral-100);
}
.gf-pub-skills{
display:flex;
flex-wrap:wrap;
gap:.4rem;
}
.gf-pub-skill-chip{
font-size:.78rem;
background:var(--gf-brand-teal-50);
border:1px solid var(--gf-brand-teal-100);
color:var(--gf-accent-teal-700);
border-radius:999px;
padding:.2rem .55rem;
}
.gf-pub-empty{
text-align:center;
padding:3rem 1rem;
color:var(--gf-neutral-500);
}
.gf-pub-footer{
text-align:center;
font-size:.82rem;
color:var(--gf-neutral-400);
margin-top:2rem;
}
/* ── Volunteer dashboard SVG logo lockup ─────────────────────────────── */
.gf-vol-logo-mark{
height:30px;
width:auto;
display:block;
flex-shrink:0;
}
.gf-vol-logo-wordmark{
height:20px;
width:auto;
display:block;
flex-shrink:0;
}
.gf-logo--with-lockup.gf-vol-dash-lockup{
gap:10px;
}

/* ── Login page ──────────────────────────────────────────────────────── */
.gf-login-hero{
text-align:center;
padding:2.5rem 1rem 1.5rem;
}
.gf-login-title{
font-size:1.8rem;
font-weight:800;
color:var(--gf-primary-900);
margin:0 0 .5rem;
}
.gf-login-sub{
font-size:.97rem;
color:var(--gf-neutral-600);
margin:0;
max-width:440px;
margin-inline:auto;
}
.gf-login-card{
max-width:420px;
margin-inline:auto;
}
.gf-login-section-head{
margin:0 0 1rem;
font-size:1rem;
font-weight:700;
color:var(--gf-primary-900);
}
.gf-login-error{
max-width:420px;
margin:0.5rem auto 0;
min-height:1.4em;
color:var(--gf-danger-600);
font-size:.9rem;
text-align:center;
}

/* ── Trust-status chips (reporting page) ─────────────────────────────── */
.gf-trust-chip{
display:inline-block;
font-size:.78rem;
font-weight:600;
border-radius:999px;
padding:.18rem .55rem;
line-height:1.4;
white-space:nowrap;
}
.gf-trust-verified{
background:var(--gf-brand-teal-50);
color:var(--gf-accent-teal-700);
border:1px solid var(--gf-brand-teal-100);
}
.gf-trust-tracked{
background:var(--gf-neutral-100);
color:var(--gf-neutral-700);
border:1px solid var(--gf-neutral-200);
}
.gf-trust-pending{
background:var(--gf-brand-yellow-50);
color:var(--gf-warning-600);
border:1px solid var(--gf-brand-yellow-100);
}

/* ── Reporting metric variants ───────────────────────────────────────── */
.gf-metric--verified .gf-metric-value{
color:var(--gf-accent-teal-700);
}
.gf-metric--muted .gf-metric-value{
color:var(--gf-neutral-600);
}
.gf-metric-hint{
font-size:.75rem;
color:var(--gf-neutral-500);
margin-top:.2rem;
}
.gf-reporting-trust-note{
font-size:.88rem;
color:var(--gf-neutral-700);
border-left:3px solid var(--gf-accent-teal-500);
padding:.75rem 1rem;
}
.gf-reporting-trust-note p{
margin:0;
}
.gf-grid-3{
display:grid;
grid-template-columns:repeat(3,1fr);
gap:1rem;
margin-bottom:1rem;
}

/* --- Org admin navigation --- */
.gf-org-nav{background:#fff;border-bottom:2px solid var(--gf-brand-teal);box-shadow:0 2px 10px rgba(39,32,63,.07);margin-bottom:1.25rem;}
.gf-org-nav-inner{max-width:1180px;margin:0 auto;padding:.55rem 1.4rem;display:flex;align-items:center;gap:.75rem 1.25rem;flex-wrap:wrap;}
.gf-org-nav-name{font-weight:800;font-size:.82rem;letter-spacing:.03em;color:var(--gf-brand-midnight);text-transform:uppercase;flex-shrink:0;white-space:nowrap;}
.gf-org-nav-links{display:flex;flex-wrap:wrap;gap:.25rem;flex:1;}
.gf-org-nav-link{display:inline-flex;align-items:center;padding:.3rem .75rem;border-radius:999px;font-size:.76rem;font-weight:700;letter-spacing:.04em;text-decoration:none;color:var(--gf-neutral-700);border:1px solid transparent;transition:background .12s,color .12s,border-color .12s;}
.gf-org-nav-link:hover{background:var(--gf-brand-teal-50);color:var(--gf-accent-teal-700);border-color:var(--gf-brand-teal-100);}
.gf-org-nav-link.is-active{background:var(--gf-brand-midnight);color:#fff;border-color:var(--gf-brand-midnight);}
.gf-org-nav-user{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto;}
.gf-org-nav-email{font-size:.75rem;color:var(--gf-neutral-600);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* --- Org ops dashboard --- */
.gf-ops-attention{background:#fffbf0;border:1px solid #f5d88c;border-left:4px solid var(--gf-brand-teal);border-radius:10px;padding:.85rem 1rem;margin:0 0 1rem;}
.gf-ops-attention h3{margin:0 0 .5rem;font-size:.95rem;color:var(--gf-brand-midnight);}
.gf-ops-attention-items{display:flex;flex-wrap:wrap;gap:.5rem;}
.gf-ops-attention-item{display:inline-flex;align-items:center;gap:.45rem;padding:.35rem .75rem;border-radius:8px;font-size:.82rem;font-weight:600;background:#fff;border:1px solid #f5d88c;color:#7a5112;text-decoration:none;}
.gf-ops-attention-item.urgent{background:#fff8f0;border-color:#f0a840;color:#6b3a00;}
.gf-ops-attention-count{font-weight:800;font-size:.95rem;}

/* --- Program cards (ops dashboard) --- */
.gf-prog-summary-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem;margin-bottom:1rem;}
.gf-prog-summary-card{background:#fff;border:1px solid var(--gf-neutral-200);border-radius:12px;padding:1rem 1.1rem;box-shadow:0 3px 10px rgba(39,32,63,.05);display:flex;flex-direction:column;gap:.4rem;}
.gf-prog-summary-card:hover{box-shadow:0 6px 18px rgba(39,32,63,.09);}
.gf-prog-summary-name{font-weight:700;font-size:.95rem;color:var(--gf-brand-midnight);margin:0;}
.gf-prog-summary-meta{font-size:.8rem;color:var(--gf-neutral-600);}
.gf-prog-summary-actions{margin-top:.25rem;display:flex;gap:.4rem;flex-wrap:wrap;}
.gf-prog-summary-link{font-size:.8rem;font-weight:700;color:var(--gf-accent-teal-700);text-decoration:none;}
.gf-prog-summary-link:hover{text-decoration:underline;}

/* --- Program detail page --- */
.gf-prog-detail-header{display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-start;justify-content:space-between;margin-bottom:1rem;}
.gf-prog-detail-title{font-size:1.55rem;font-weight:800;color:var(--gf-brand-midnight);margin:0 0 .25rem;}
.gf-prog-detail-meta{font-size:.87rem;color:var(--gf-neutral-600);display:flex;flex-wrap:wrap;gap:.35rem .8rem;align-items:center;margin:.2rem 0;}
.gf-prog-detail-section{margin-top:1.5rem;}
.gf-prog-detail-section h2{margin:0 0 .65rem;font-size:1.08rem;font-weight:800;color:var(--gf-brand-midnight);padding-bottom:.4rem;border-bottom:1px solid var(--gf-neutral-200);}
.gf-prog-target-progress{margin:.75rem 0;}
.gf-prog-target-track{height:10px;background:var(--gf-neutral-200);border-radius:5px;overflow:hidden;margin:.35rem 0;}
.gf-prog-target-fill{height:100%;background:linear-gradient(90deg,var(--gf-brand-teal),var(--gf-brand-midnight));border-radius:5px;transition:width .3s;}
.gf-prog-target-label{font-size:.82rem;color:var(--gf-neutral-600);}
.gf-prog-inactive-banner{background:#f0f9ff;border:1px solid #bae6fd;border-left:4px solid #0284c7;border-radius:6px;padding:.65rem 1rem;font-size:.87rem;color:#075985;margin-bottom:1rem;}
.gf-impact-list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.4rem .0rem;}
.gf-impact-list li{padding:.3rem .0rem;font-size:.88rem;color:var(--gf-neutral-700);border-bottom:1px solid var(--gf-neutral-100);width:100%;}
.gf-impact-list li:last-child{border-bottom:none;}

/* --- Trust chip (reporting) --- */
.gf-trust-chip{display:inline-block;padding:.14rem .48rem;border-radius:8px;font-size:.74rem;font-weight:600;}
.gf-trust-verified{background:var(--gf-brand-teal-100);color:var(--gf-accent-teal-700);}
.gf-trust-tracked{background:var(--gf-neutral-100);color:var(--gf-neutral-600);}
.gf-trust-pending{background:#fff6e0;color:#7a5112;}

/* --- Volunteer roster --- */
.gf-vol-roster-table th:first-child{min-width:160px;}
.gf-vol-roster-chip{display:inline-block;background:var(--gf-brand-teal-50);color:var(--gf-accent-teal-700);border-radius:6px;padding:.08rem .35rem;font-size:.74rem;font-weight:600;margin:.1rem .1rem 0 0;}

/* --- Opportunities --- */
.gf-opp-card{background:#fff;border:1px solid var(--gf-neutral-200);border-radius:12px;padding:1rem 1.15rem;box-shadow:0 3px 10px rgba(39,32,63,.05);margin-bottom:.85rem;}
.gf-opp-card-header{display:flex;flex-wrap:wrap;gap:.4rem;align-items:flex-start;justify-content:space-between;margin-bottom:.35rem;}
.gf-opp-title{font-weight:700;font-size:1rem;color:var(--gf-brand-midnight);margin:0;}
.gf-opp-badges{display:flex;gap:.35rem;flex-wrap:wrap;align-items:center;}
.gf-opp-status{display:inline-block;padding:.13rem .48rem;border-radius:999px;font-size:.74rem;font-weight:600;}
.gf-opp-status-open{background:var(--gf-brand-teal-100);color:var(--gf-accent-teal-700);}
.gf-opp-status-draft{background:var(--gf-neutral-100);color:var(--gf-neutral-600);}
.gf-opp-status-closed{background:var(--gf-brand-midnight-50);color:var(--gf-brand-midnight);}
.gf-opp-status-cancelled{background:var(--gf-neutral-100);color:var(--gf-neutral-500);}
.gf-opp-meta{font-size:.82rem;color:var(--gf-neutral-600);margin:.2rem 0;}
.gf-opp-prog-link{font-size:.8rem;color:var(--gf-accent-teal-700);text-decoration:none;font-weight:600;}
.gf-opp-prog-link:hover{text-decoration:underline;}
.gf-opp-interest-count{font-size:.8rem;color:var(--gf-neutral-600);font-weight:600;}
.gf-opp-card-actions{display:flex;gap:.4rem;flex-wrap:wrap;margin-top:.6rem;}
.gf-opp-edit-form{margin-top:.85rem;padding-top:.75rem;border-top:1px solid var(--gf-neutral-200);}

/* --- Review queue improvements --- */
.gf-queue-filter-bar{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:.85rem;align-items:center;}
.gf-queue-filter-label{font-size:.82rem;font-weight:600;color:var(--gf-neutral-700);}
.gf-queue-filter-select{font-size:.82rem;border:1px solid var(--gf-neutral-300);border-radius:6px;padding:.28rem .55rem;color:var(--gf-neutral-800);background:#fff;}
.gf-queue-filter-hint{font-size:.78rem;color:var(--gf-neutral-500);}
.gf-queue-filter-btn{background:var(--gf-neutral-100);border:1px solid var(--gf-neutral-200);border-radius:999px;padding:.28rem .7rem;font-size:.78rem;font-weight:600;color:var(--gf-neutral-700);cursor:pointer;}
.gf-queue-filter-btn.is-active{background:var(--gf-brand-midnight);color:#fff;border-color:var(--gf-brand-midnight);}
.gf-queue-stale{background:#fff4e5;border:1px solid #f5c87a;border-radius:6px;padding:.15rem .5rem;font-size:.73rem;font-weight:700;color:#7a4d00;white-space:nowrap;}
.gf-queue-wait-ok{font-size:.73rem;color:var(--gf-neutral-500);}
.gf-queue-sig-badge{font-size:.68rem;font-weight:600;color:#b45309;background:#fef3c7;border-radius:4px;padding:.1rem .35rem;display:inline-block;margin-top:.2rem;}
.gf-queue-trust-note{font-size:.72rem;margin-bottom:.4rem;color:var(--gf-neutral-600);}
.gf-trust-note-approve{color:#166534;font-weight:600;}
.gf-trust-note-external{color:#1d4ed8;font-weight:600;}
.gf-queue-action-group{display:flex;flex-direction:column;gap:.35rem;}
.gf-queue-action-group input{padding:.3rem .5rem;font-size:.8rem;border:1px solid var(--gf-neutral-300);border-radius:6px;width:100%;box-sizing:border-box;}
.gf-queue-btns{display:flex;gap:.35rem;flex-wrap:wrap;}

/* ── Review queue table ──────────────────────────────────────────────────────
   Founder review found the Review Action controls clipped and unusable. The
   action column carried min-width:280px and its textarea another
   min-width:200px, inflating the table past its container — and the column
   that got cut off was the only one with buttons in it.

   The column is now pinned to the right edge, so however narrow the window
   gets, Approve / Request changes / Decline stay on screen while the
   informational columns scroll beneath them.

   .gf-main table sets overflow:hidden, which silently disables position:sticky
   on its descendants. It has to be overridden here, not merely declared
   alongside. */
.gf-queue-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
.gf-main .gf-queue-table{overflow:visible;min-width:900px;}
.gf-main .gf-queue-table th:last-child,
.gf-main .gf-queue-table td:last-child{
position:sticky;right:0;z-index:1;width:300px;
box-shadow:-8px 0 8px -8px rgba(15,35,64,.18);
}
.gf-main .gf-queue-table td:last-child{background:#fff;}
.gf-main .gf-queue-table tbody tr:nth-child(even) td:last-child{background:#fcfcfe;}
.gf-main .gf-queue-table tbody tr:hover td:last-child{background:#f5f8fc;}
.gf-main .gf-queue-table thead th:last-child{background:#eef0f5;z-index:2;}
/* Sizes to the pinned column instead of forcing the table wider than its
   container. */
.gf-queue-action-group{width:100%;max-width:290px;}
.gf-queue-action-group textarea{width:100%;box-sizing:border-box;min-width:0;}
.gf-queue-btns .gf-btn{flex:0 1 auto;white-space:nowrap;}
@media(max-width:820px){
/* Pinning a 300px column on a phone would leave almost nothing for the row, so
   it returns to normal flow and scrolls with the table. */
.gf-main .gf-queue-table th:last-child,
.gf-main .gf-queue-table td:last-child{position:static;box-shadow:none;width:auto;}
}
.gf-grid-4{grid-template-columns:repeat(4,1fr);}
.gf-metric--verified{border-left:3px solid var(--gf-brand-teal);}
.gf-metric--warning{border-left:3px solid #fbb85b;}
.gf-metric--muted{border-left:3px solid var(--gf-neutral-400);}
.gf-metric-hint{font-size:.73rem;color:var(--gf-neutral-500);margin-top:.15rem;}

/* --- Reporting/trust note --- */
.gf-reporting-trust-note{font-size:.88rem;color:var(--gf-neutral-700);border-left:3px solid var(--gf-brand-teal);padding:.75rem 1rem;}
.gf-reporting-trust-note p{margin:0;}

/* --- Program management --- */
.gf-prog-list{display:flex;flex-direction:column;gap:1rem;margin-bottom:1.5rem;}
.gf-prog-card{padding:1.25rem 1.5rem;}
.gf-prog-card-header{margin-bottom:.5rem;}
.gf-prog-card-title-row{display:flex;align-items:flex-start;gap:.75rem;flex-wrap:wrap;margin-bottom:.25rem;}
.gf-prog-name{margin:0;font-size:1.05rem;font-weight:600;color:var(--gf-neutral-900);}
.gf-prog-badges{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;}
.gf-prog-card-meta{font-size:.82rem;color:var(--gf-neutral-600);}
.gf-prog-desc{font-size:.88rem;margin:.25rem 0 .5rem;}
.gf-prog-progress{margin:.5rem 0;}
.gf-prog-progress-wrap{height:6px;background:var(--gf-neutral-200);border-radius:3px;overflow:hidden;margin-bottom:.25rem;}
.gf-prog-progress-bar{height:100%;background:var(--gf-brand-teal);border-radius:3px;transition:width .3s;}
.gf-prog-progress-label{font-size:.8rem;color:var(--gf-neutral-600);margin:0;}
.gf-prog-status{display:inline-block;padding:.15rem .55rem;border-radius:10px;font-size:.75rem;font-weight:600;letter-spacing:.03em;}
.gf-prog-status-active{background:var(--gf-brand-teal-100);color:var(--gf-accent-teal-700);}
.gf-prog-status-draft{background:var(--gf-neutral-100);color:var(--gf-neutral-600);}
.gf-prog-status-completed{background:var(--gf-brand-midnight-50);color:var(--gf-brand-midnight);}
.gf-prog-status-archived{background:var(--gf-neutral-100);color:var(--gf-neutral-500);}
.gf-prog-cat-chip{display:inline-block;padding:.12rem .45rem;border-radius:8px;font-size:.73rem;background:var(--gf-brand-purple-50);color:var(--gf-brand-midnight);font-weight:500;}
.gf-prog-pending-badge{display:inline-block;padding:.12rem .45rem;border-radius:8px;font-size:.73rem;background:#fff3cd;color:#856404;font-weight:500;}
.gf-prog-date-range{font-size:.82rem;}
.gf-prog-card-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.75rem;}
.gf-prog-edit-form{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--gf-neutral-200);}
.gf-input{width:100%;padding:.45rem .65rem;border:1.5px solid var(--gf-neutral-200);border-radius:6px;font-size:.9rem;box-sizing:border-box;background:#fff;color:var(--gf-neutral-900);}
.gf-input:focus{outline:none;border-color:var(--gf-accent-teal-400);}
.gf-form-row{margin-bottom:.75rem;}
.gf-form-row label{display:block;font-size:.83rem;font-weight:500;margin-bottom:.25rem;color:var(--gf-neutral-700);}
.gf-form-row input,.gf-form-row select,.gf-form-row textarea{width:100%;padding:.45rem .65rem;border:1px solid var(--gf-neutral-200);border-radius:5px;font-size:.9rem;box-sizing:border-box;background:#fff;}
.gf-form-row textarea{resize:vertical;}
.gf-form-row--2col{display:grid;grid-template-columns:1fr 1fr;gap:1rem;}
.gf-prog-edit-actions{display:flex;gap:.5rem;margin-top:.75rem;}
.gf-prog-edit-status{font-size:.82rem;margin-top:.4rem;}
.gf-prog-create-card{margin-top:1rem;}
.gf-prog-create-form{margin-top:1rem;}
.gf-prog-create-form button[type=submit]{margin-top:.5rem;}
.gf-prog-empty{margin-bottom:1rem;}
.gf-btn-muted{background:var(--gf-neutral-100);color:var(--gf-neutral-700);border:1px solid var(--gf-neutral-200);}
.gf-btn-muted:hover{background:var(--gf-neutral-200);}

@media (max-width:420px){
.gf-header{padding:0.75rem;}
.gf-logo-mark{width:156px;height:25px;}
.gf-wordmark{font-size:1.05rem;letter-spacing:0.1em;}
.gf-brand-wordmark-img{width:142px;}
.gf-header-meta{max-width:58vw;}
.gf-vol-logo-mark{height:24px;}
.gf-vol-logo-wordmark{height:16px;}
.gf-grid-3{grid-template-columns:1fr 1fr;}
.gf-form-row--2col{grid-template-columns:1fr;}
}

/* ── Global context bar ────────────────────────────────────────────────────── */
.gf-ctx-bar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.75rem 1.25rem;padding:.75rem 1rem;background:var(--gf-neutral-50,#f9f9fb);border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:8px;margin-bottom:1rem;}
.gf-ctx-controls{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.5rem 1rem;flex:1;}
.gf-ctx-label{display:block;font-size:.78rem;font-weight:600;color:var(--gf-neutral-600,#6b7280);margin-bottom:.2rem;white-space:nowrap;}
.gf-ctx-select{font-size:.85rem;padding:.35rem .6rem;border:1px solid var(--gf-neutral-300,#d1d5db);border-radius:6px;background:#fff;color:var(--gf-neutral-900,#111827);min-width:130px;}
.gf-ctx-select:focus{outline:2px solid var(--gf-brand-400,#6366f1);outline-offset:1px;}
.gf-ctx-toggle-label{display:flex;align-items:center;gap:.4rem;font-size:.85rem;color:var(--gf-neutral-700,#374151);cursor:pointer;white-space:nowrap;padding-bottom:.05rem;}
.gf-ctx-toggle-label input[type=checkbox]{accent-color:var(--gf-brand-500,#4f46e5);width:15px;height:15px;}
.gf-ctx-actions{display:flex;align-items:center;gap:.6rem;flex-shrink:0;}
.gf-ctx-active-badge{font-size:.72rem;font-weight:700;padding:.2rem .55rem;border-radius:99px;background:var(--gf-brand-100,#e0e7ff);color:var(--gf-brand-700,#4338ca);letter-spacing:.02em;}
.gf-ctx-apply-btn{font-size:.82rem;padding:.35rem .85rem;}
.gf-ctx-clear-link{font-size:.8rem;color:var(--gf-neutral-500,#9ca3af);text-decoration:underline;white-space:nowrap;}
.gf-ctx-clear-link:hover{color:var(--gf-neutral-700,#374151);}

/* ── Progress block (metrics.ts) ────────────────────────────────────────────── */
.gf-progress-block{margin:.75rem 0;}
.gf-progress-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.3rem;font-size:.85rem;}
.gf-progress-bar{height:10px;border-radius:99px;background:var(--gf-neutral-200,#e5e7eb);overflow:hidden;}
.gf-progress-fill{height:100%;border-radius:99px;background:var(--gf-brand-500,#4f46e5);transition:width .3s ease;}
.gf-progress-hint{font-size:.75rem;color:var(--gf-neutral-500,#9ca3af);margin-top:.25rem;}

/* ── Summary cards (metrics.ts) ─────────────────────────────────────────────── */
.gf-summary-card{padding:1rem 1.25rem;border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:8px;background:#fff;}
.gf-summary-card--highlight{border-color:var(--gf-brand-300,#a5b4fc);background:var(--gf-brand-50,#eef2ff);}
.gf-summary-card--muted{background:var(--gf-neutral-50,#f9f9fb);color:var(--gf-neutral-600,#6b7280);}
.gf-summary-card-title{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--gf-neutral-500,#9ca3af);margin:0 0 .35rem;}
.gf-summary-card-body{font-size:1.5rem;font-weight:700;color:var(--gf-neutral-900,#111827);line-height:1.2;}
.gf-summary-card-action{margin-top:.6rem;}
.gf-summary-card-action a{font-size:.82rem;}

/* ── Stat blocks (metrics.ts) ───────────────────────────────────────────────── */
.gf-stat-block{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;padding:.75rem 0;}
.gf-stat-block-item{display:flex;flex-direction:column;gap:.15rem;}
.gf-stat-block-value{font-size:1.25rem;font-weight:700;color:var(--gf-neutral-900,#111827);}
.gf-stat-block-label{font-size:.75rem;color:var(--gf-neutral-500,#9ca3af);}

/* ── Timeline (timeline.ts) ─────────────────────────────────────────────────── */
.gf-tl{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0;}
.gf-tl-item{display:flex;gap:.75rem;padding:.75rem 0;border-bottom:1px solid var(--gf-neutral-100,#f3f4f6);position:relative;}
.gf-tl-item:last-child{border-bottom:none;}
.gf-tl-icon{font-size:1.1rem;flex-shrink:0;width:1.5rem;text-align:center;margin-top:.05rem;}
.gf-tl-content{flex:1;min-width:0;}
.gf-tl-header{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;flex-wrap:wrap;margin-bottom:.2rem;}
.gf-tl-title{font-weight:600;font-size:.9rem;color:var(--gf-neutral-900,#111827);}
.gf-tl-title-link{font-weight:600;font-size:.9rem;color:var(--gf-brand-700,#4338ca);text-decoration:none;}
.gf-tl-title-link:hover{text-decoration:underline;}
.gf-tl-date{font-size:.75rem;color:var(--gf-neutral-400,#9ca3af);white-space:nowrap;flex-shrink:0;}
.gf-tl-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .6rem;margin-bottom:.2rem;}
.gf-tl-org{font-size:.78rem;color:var(--gf-neutral-500,#9ca3af);}
.gf-tl-hours{font-size:.78rem;font-weight:600;color:var(--gf-neutral-700,#374151);}
.gf-tl-body{font-size:.82rem;color:var(--gf-neutral-600,#6b7280);margin:.2rem 0 0;}
.gf-tl-detail{margin-top:.35rem;}
.gf-tl-detail summary{font-size:.78rem;color:var(--gf-neutral-500,#9ca3af);cursor:pointer;}
.gf-tl-detail-body{font-size:.82rem;color:var(--gf-neutral-600,#6b7280);margin-top:.35rem;padding:.5rem;background:var(--gf-neutral-50,#f9f9fb);border-radius:6px;}
.gf-tl-more{padding:.6rem 0;text-align:center;}
.gf-tl-more a{font-size:.82rem;color:var(--gf-brand-600,#4f46e5);}
/* Type accent colors */
.gf-tl-verification .gf-tl-icon,.gf-tl-milestone .gf-tl-icon,.gf-tl-goal .gf-tl-icon{filter:none;}
.gf-tl--compact .gf-tl-item{padding:.5rem 0;}
.gf-tl--compact .gf-tl-icon{font-size:.9rem;}
.gf-tl--compact .gf-tl-title,.gf-tl--compact .gf-tl-title-link{font-size:.83rem;}

/* ── Badge shelf (badge.ts) ─────────────────────────────────────────────────── */
.gf-badge-shelf{margin-bottom:1rem;}
.gf-badge-shelf--placeholder{opacity:.9;}
.gf-badge-group{margin-bottom:1rem;}
.gf-badge-group:last-child{margin-bottom:0;}
.gf-badge-group-label{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--gf-neutral-400,#9ca3af);margin:0 0 .6rem;}
.gf-badge-chips{display:flex;flex-wrap:wrap;gap:.5rem;}
.gf-badge{display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.6rem .8rem;border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:10px;background:#fff;min-width:90px;max-width:120px;text-align:center;}
.gf-badge--placeholder{opacity:.45;border-style:dashed;}
.gf-badge--milestone{border-color:var(--gf-brand-200,#c7d2fe);}
.gf-badge--leadership{border-color:#fde68a;}
.gf-badge--skill{border-color:#a7f3d0;}
.gf-badge--consistency{border-color:#fed7aa;}
.gf-badge--cert{border-color:#e9d5ff;}
.gf-badge--trust{border-color:#bfdbfe;}
.gf-badge-icon{font-size:1.4rem;line-height:1;}
.gf-badge-label{font-size:.72rem;font-weight:700;color:var(--gf-neutral-800,#1f2937);line-height:1.25;}
.gf-badge-sub{font-size:.65rem;color:var(--gf-neutral-400,#9ca3af);}
.gf-badge-sub--locked{font-style:italic;}

/* ── Grouped list (grouped-list.ts) ─────────────────────────────────────────── */
.gf-grouped-list{margin:0;}
.gf-group-section{border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:8px;margin-bottom:.6rem;overflow:hidden;}
.gf-group-section[open]{border-color:var(--gf-neutral-300,#d1d5db);}
.gf-group-header{display:flex;align-items:center;gap:.5rem;padding:.65rem .85rem;cursor:pointer;background:var(--gf-neutral-50,#f9f9fb);font-size:.85rem;list-style:none;user-select:none;}
.gf-group-header::-webkit-details-marker{display:none;}
.gf-group-section[open] .gf-group-header{border-bottom:1px solid var(--gf-neutral-200,#e5e7eb);}
.gf-group-label{font-weight:700;color:var(--gf-neutral-800,#1f2937);}
.gf-group-count{font-size:.72rem;font-weight:700;padding:.15rem .45rem;border-radius:99px;background:var(--gf-neutral-200,#e5e7eb);color:var(--gf-neutral-600,#6b7280);}
.gf-group-summary-hint{font-size:.78rem;}
.gf-group-body{padding:.5rem .75rem;}
.gf-grouped-row{display:flex;align-items:center;gap:.75rem;padding:.5rem .25rem;border-bottom:1px solid var(--gf-neutral-100,#f3f4f6);}
.gf-grouped-row:last-child{border-bottom:none;}
.gf-grouped-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:.15rem;}
.gf-grouped-row-title{font-size:.88rem;font-weight:600;color:var(--gf-neutral-900,#111827);}
.gf-grouped-row-title-link{font-size:.88rem;font-weight:600;color:var(--gf-brand-700,#4338ca);text-decoration:none;}
.gf-grouped-row-title-link:hover{text-decoration:underline;}
.gf-grouped-row-sub{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;}
.gf-grouped-row-meta{font-size:.75rem;}
.gf-grouped-row-actions{display:flex;gap:.4rem;flex-shrink:0;}
/* goals page uses gf-goals-group-list wrapper to keep card grid inside groups */
.gf-goals-group-list .gf-group-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.75rem;padding:.75rem;}

/* ── Dashboard metric summary ───────────────────────────────────────────────── */
.gf-dash-org-picker{display:flex;align-items:center;gap:.4rem;}
.gf-dash-next-step{padding:.65rem 1rem;border-radius:8px;border-left:3px solid var(--gf-neutral-300,#d1d5db);background:var(--gf-neutral-50,#f9f9fb);font-size:.85rem;margin-bottom:1rem;}
.gf-dash-next-step--action{border-left-color:var(--gf-brand-400,#818cf8);background:var(--gf-brand-50,#eef2ff);}
.gf-dash-next-step a{color:var(--gf-brand-700,#4338ca);}

/* ── Reporting narrative & next steps ───────────────────────────────────────── */
.gf-report-narrative{margin-bottom:.5rem;}
.gf-report-narrative-text{margin:0;font-size:.93rem;line-height:1.55;}
.gf-report-next-steps{margin-top:.5rem;}
.gf-report-steps-list{margin:.5rem 0 0;padding-left:1.25rem;font-size:.88rem;line-height:1.6;}
.gf-report-steps-list li{margin-bottom:.35rem;}
.gf-report-steps-list a{color:var(--gf-brand-700,#4338ca);}

/* ── Profile privacy panel ──────────────────────────────────────────────────── */
.gf-profile-privacy-panel{display:flex;align-items:flex-start;gap:.85rem;padding:.85rem 1rem;margin-bottom:1rem;background:var(--gf-neutral-50,#f9f9fb);border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:8px;font-size:.85rem;}
.gf-profile-privacy-panel-icon{font-size:1.25rem;flex-shrink:0;margin-top:.1rem;}
.gf-profile-privacy-panel-text{flex:1;min-width:0;line-height:1.5;}
.gf-profile-privacy-stats{display:block;margin-top:.35rem;color:var(--gf-neutral-500,#9ca3af);font-size:.78rem;}

/* ── Calendar entries ───────────────────────────────────────────────────────── */
.gf-cal-entry{display:flex;gap:.65rem;align-items:flex-start;padding:.5rem 0;border-bottom:1px solid var(--gf-neutral-100,#f3f4f6);}
.gf-cal-entry:last-child{border-bottom:none;}
.gf-cal-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;margin-top:.35rem;}
.gf-cal-dot--upcoming{background:var(--gf-brand-400,#818cf8);}
.gf-cal-dot--verified{background:#44c3d0;}
.gf-cal-dot--tracked{background:var(--gf-neutral-300,#d1d5db);}
.gf-cal-entry-main{flex:1;min-width:0;}
.gf-cal-entry-date{font-size:.75rem;font-weight:700;color:var(--gf-neutral-500,#9ca3af);text-transform:uppercase;letter-spacing:.04em;}
.gf-cal-entry-title{font-size:.88rem;font-weight:600;color:var(--gf-neutral-900,#111827);margin:.1rem 0;}
.gf-cal-entry-meta{font-size:.75rem;color:var(--gf-neutral-500,#9ca3af);}
.gf-cal-sync-notice{margin-top:1rem;}
.gf-cal-sync-notice h2{margin-top:0;}

/* ── Calendar month grid ──────────────────────────────────────────────────── */
.gf-cal-grid-card{padding:1.15rem 1.25rem;}
.gf-cal-grid-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem;margin-bottom:.85rem;}
.gf-cal-grid-month-title{margin:0;font-size:1.05rem;font-weight:700;color:var(--gf-brand-midnight);}
.gf-cal-grid-legend{display:flex;align-items:center;gap:.55rem;font-size:.78rem;color:var(--gf-neutral-600);}
.gf-cal-grid-days{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:4px;}
.gf-cal-grid-day-name{text-align:center;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--gf-neutral-500);padding:.25rem 0;}
.gf-cal-grid-body{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;}
.gf-cal-grid-cell{position:relative;min-height:2.85rem;border-radius:7px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:.35rem .2rem .25rem;background:var(--gf-neutral-50);cursor:default;transition:background .15s;gap:.15rem;}
.gf-cal-grid-cell--empty{background:transparent;}
.gf-cal-grid-cell--today{background:var(--gf-brand-teal-50);outline:2px solid var(--gf-brand-teal);outline-offset:-2px;}
.gf-cal-grid-cell--has-activity{background:var(--gf-brand-teal-50);}
.gf-cal-grid-cell[role="button"]:hover{background:var(--gf-brand-teal-100,#ccfbf1);}
.gf-cal-grid-cell[role="button"]:focus-visible{outline:2px solid var(--gf-brand-teal);outline-offset:1px;}
.gf-cal-grid-num{font-size:.8rem;font-weight:600;color:var(--gf-neutral-700);line-height:1;}
.gf-cal-grid-cell--today .gf-cal-grid-num{color:var(--gf-brand-teal);font-weight:800;}
/* Larger + higher-contrast than the original 6px flat dot (beta feedback:
   "make the calendar circles larger and use color more effectively") — the
   white ring keeps them legible against the cell's tinted background, and
   size/position still layer with the tooltip + aria-label so meaning isn't
   color-only. */
.gf-cal-grid-dot{display:block;width:9px;height:9px;border-radius:50%;background:var(--gf-neutral-400);flex-shrink:0;box-shadow:0 0 0 1.5px #fff;}
.gf-cal-grid-dot--verified{background:var(--gf-brand-teal);}
/* Sync panel */
.gf-cal-sync-card{margin-top:1rem;}
.gf-cal-sync-header{margin-bottom:.85rem;}
.gf-cal-sync-header h2{margin-top:0;}
.gf-cal-sync-actions{display:flex;flex-wrap:wrap;gap:.65rem;margin-bottom:1rem;}
.gf-cal-sync-steps{background:var(--gf-neutral-50);border:1px solid var(--gf-neutral-200);border-radius:10px;padding:.85rem 1rem;}
.gf-cal-sync-ol{margin:.2rem 0 0 1.1rem;padding:0;}
.gf-cal-sync-ol li{font-size:.88rem;color:var(--gf-neutral-700);margin:.3rem 0;}

/* ── Opportunity cards ──────────────────────────────────────────────────────── */
.gf-opp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;margin-bottom:1rem;}
.gf-opp-card{padding:1.1rem 1.25rem;}
.gf-opp-card-header{margin-bottom:.4rem;}
.gf-opp-title{font-size:1rem;font-weight:700;margin:0 0 .15rem;color:var(--gf-neutral-900,#111827);}
.gf-opp-org{font-size:.78rem;}
.gf-opp-dates{font-size:.78rem;margin:.2rem 0 .5rem;}
.gf-opp-desc{font-size:.85rem;color:var(--gf-neutral-600,#6b7280);margin:.5rem 0;line-height:1.5;}
.gf-opp-footer{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-top:.75rem;flex-wrap:wrap;}
.gf-opp-spots{font-size:.75rem;}
.gf-opp-future-note{margin-top:1rem;}
.gf-opp-future-note h2{margin-top:0;}

/* ── Phase 2A.3 — Org UX Cohesion ───────────────────────────────────────────── */

/* Org nav — Reporting + Settings links get same treatment as existing links */
/* (no new rules needed; .gf-org-nav-link styles already defined) */

/* ── Org dashboard improvements ─────────────────────────────────────────────── */
.gf-ops-section-title{margin:1.25rem 0 .65rem;font-size:1.05rem;font-weight:800;color:var(--gf-brand-midnight,#0f172a);}
.gf-ops-comms-placeholder{margin-top:0;}
.gf-ops-comms-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin:.75rem 0 .5rem;}
.gf-ops-comms-note{font-size:.78rem;margin:.5rem 0 0;}
.gf-ops-comms-note a{color:var(--gf-brand-700,#4338ca);}

/* ── Volunteer management page ───────────────────────────────────────────────── */
.gf-vol-invite-card,.gf-vol-comms-card{margin-bottom:0;}
.gf-vol-invite-actions,.gf-vol-comms-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin:.65rem 0 .5rem;}
.gf-vol-invite-note,.gf-vol-comms-note{font-size:.78rem;color:var(--gf-neutral-500,#9ca3af);margin:.35rem 0 0;}
.gf-vol-roster-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem;}
.gf-vol-roster-filters{display:flex;gap:.35rem;flex-wrap:wrap;}

/* ── Programs hierarchy banner ───────────────────────────────────────────────── */
.gf-prog-hierarchy-banner{display:flex;align-items:center;gap:.75rem;padding:.85rem 1.1rem;margin-bottom:1rem;background:var(--gf-neutral-50,#f9f9fb);border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:8px;flex-wrap:wrap;}
.gf-prog-hierarchy-step{display:flex;flex-direction:column;gap:.1rem;}
.gf-prog-hierarchy-step strong{font-size:.88rem;font-weight:700;color:var(--gf-brand-midnight,#0f172a);}
.gf-prog-hierarchy-step span{font-size:.75rem;color:var(--gf-neutral-500,#9ca3af);}
.gf-prog-hierarchy-arrow{font-size:1.2rem;color:var(--gf-neutral-400,#9ca3af);flex-shrink:0;}

/* ── Org settings page ───────────────────────────────────────────────────────── */
.gf-settings-org-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem;margin-bottom:0;}
/* .gf-settings-section, .gf-settings-row, .gf-settings-label, .gf-settings-value intentionally
   reuse volunteer settings CSS (defined earlier) — no overrides needed here */
.gf-settings-row:last-child{border-bottom:none;}
.gf-settings-placeholder-note{font-size:.78rem;color:var(--gf-neutral-500,#9ca3af);margin:.65rem 0 0;}
.gf-settings-placeholder-block{display:flex;align-items:flex-start;gap:.65rem;padding:.65rem;background:var(--gf-neutral-50,#f9f9fb);border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:6px;}
.gf-settings-placeholder-icon{font-size:1.1rem;flex-shrink:0;}
.gf-settings-placeholder-block strong{display:block;font-size:.85rem;margin-bottom:.15rem;}
.gf-settings-placeholder-block .muted{font-size:.78rem;}
.gf-settings-policy-form{max-width:600px;}
.gf-settings-policy-grid{display:grid;grid-template-columns:1fr 1fr;gap:.75rem 1rem;margin-bottom:.85rem;}
.gf-settings-policy-grid label.gf-settings-field-label{display:block;font-size:.78rem;font-weight:600;margin-bottom:.3rem;color:var(--gf-neutral-600,#6b7280);}
.gf-settings-policy-grid select{width:100%;padding:.45rem .6rem;border:1px solid var(--gf-neutral-300,#d1d5db);border-radius:5px;font-size:.85rem;}
.gf-settings-checks{display:flex;flex-direction:column;gap:.4rem;margin-bottom:.75rem;}
.gf-settings-check{display:flex;align-items:center;gap:.5rem;font-size:.85rem;cursor:pointer;}
.gf-settings-check input[type="checkbox"]{width:15px;height:15px;cursor:pointer;}

/* ── Org reporting page ──────────────────────────────────────────────────────── */
.gf-report-ai-placeholder{margin-bottom:1rem;background:linear-gradient(135deg,var(--gf-brand-50,#eef2ff) 0%,var(--gf-neutral-50,#f9f9fb) 100%);border:1px dashed var(--gf-brand-200,#c7d2fe);}
.gf-report-ai-placeholder h2{margin-top:0;display:flex;align-items:center;gap:.6rem;}
.gf-report-ai-badge{display:inline-block;font-size:.68rem;font-weight:700;letter-spacing:.04em;padding:.15rem .5rem;border-radius:999px;background:var(--gf-brand-100,#e0e7ff);color:var(--gf-brand-700,#4338ca);text-transform:uppercase;}

/* ── Phase 2A.5 — Volunteer Identity & Impact Experience ─────────────────── */

/* Impact hero block */
.gf-impact-hero{display:flex;flex-wrap:wrap;gap:1.5rem;align-items:center;justify-content:space-between;padding:1.5rem 1.75rem;background:linear-gradient(135deg,var(--gf-brand-midnight) 0%,#1e3a5f 100%);border-radius:14px;color:#fff;margin-bottom:1rem;}
.gf-impact-hero-left{flex:1 1 200px;min-width:0;}
.gf-impact-hero-right{display:flex;flex-wrap:wrap;gap:1rem 2rem;flex-shrink:0;}
.gf-impact-hero-number{font-size:3rem;font-weight:800;line-height:1;color:#fff;letter-spacing:-.02em;}
.gf-impact-hero-number-label{font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--gf-brand-teal);margin:.3rem 0 .55rem;}
.gf-impact-hero-narrative{font-size:.88rem;color:rgba(255,255,255,.7);line-height:1.5;max-width:360px;}
.gf-impact-stat{text-align:center;min-width:50px;}
.gf-impact-stat-value{display:block;font-size:1.75rem;font-weight:800;color:#fff;}
.gf-impact-stat-label{display:block;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgba(255,255,255,.55);margin-top:.1rem;}
.gf-impact-stat--teal .gf-impact-stat-value{color:var(--gf-brand-teal);}
.gf-impact-stat--muted .gf-impact-stat-value{color:rgba(255,255,255,.55);}

/* Journey milestone cards */
.gf-journey-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.65rem;margin-bottom:1rem;}
.gf-journey-card{background:#fff;border:1px solid var(--gf-neutral-200);border-radius:12px;padding:.85rem 1rem;position:relative;overflow:hidden;}
.gf-journey-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:var(--gf-neutral-200);}
.gf-journey-card--teal::before{background:var(--gf-brand-teal);}
.gf-journey-card--purple::before{background:var(--gf-brand-purple);}
.gf-journey-card--yellow::before{background:var(--gf-brand-yellow);}
.gf-journey-card--midnight::before{background:var(--gf-brand-midnight);}
.gf-journey-icon{font-size:1.1rem;margin-bottom:.3rem;line-height:1;}
.gf-journey-label{font-size:.65rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--gf-neutral-400);margin-bottom:.2rem;}
.gf-journey-value{font-size:.92rem;font-weight:700;color:var(--gf-neutral-900);line-height:1.3;}
.gf-journey-subvalue{font-size:.72rem;color:var(--gf-neutral-500);margin-top:.1rem;}

/* Activity cadence bar chart */
.gf-cadence-chart{display:flex;align-items:flex-end;gap:3px;height:56px;margin:.65rem 0 .25rem;}
.gf-cadence-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0;}
.gf-cadence-bar-outer{width:100%;flex:1;display:flex;align-items:flex-end;background:var(--gf-neutral-100);border-radius:3px 3px 0 0;overflow:hidden;}
.gf-cadence-bar-fill{width:100%;background:var(--gf-brand-teal);border-radius:3px 3px 0 0;}
.gf-cadence-bar-fill--zero{background:var(--gf-neutral-200);}
.gf-cadence-tick{font-size:.52rem;color:var(--gf-neutral-400);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;text-align:center;}
.gf-cadence-note{font-size:.72rem;color:var(--gf-neutral-500);margin:.15rem 0 0;}

/* Category visual distribution */
.gf-cat-dist{display:flex;flex-direction:column;gap:.5rem;margin-top:.35rem;}
.gf-cat-dist-row{display:flex;align-items:center;gap:.6rem;}
.gf-cat-dist-name{font-size:.8rem;font-weight:600;color:var(--gf-neutral-700);min-width:88px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gf-cat-dist-bar-track{flex:1;height:9px;background:var(--gf-neutral-100);border-radius:5px;overflow:hidden;}
.gf-cat-dist-bar-fill{height:100%;background:linear-gradient(90deg,var(--gf-brand-teal),var(--gf-brand-teal-200));border-radius:5px;transition:width .3s;}
.gf-cat-dist-stats{font-size:.74rem;font-weight:600;color:var(--gf-neutral-600);white-space:nowrap;min-width:62px;text-align:right;}

/* Skills cloud */
.gf-skills-cloud{display:flex;flex-wrap:wrap;gap:.4rem;margin:.45rem 0;}
.gf-skill-chip{display:inline-block;padding:.28rem .65rem;border-radius:999px;font-size:.76rem;font-weight:700;background:var(--gf-brand-teal-50);color:var(--gf-accent-teal-700);border:1px solid var(--gf-brand-teal-100);}
.gf-skill-chip--lg{font-size:.82rem;padding:.32rem .78rem;background:var(--gf-brand-teal);color:#fff;border-color:var(--gf-brand-teal);}
.gf-skill-chip--md{font-size:.79rem;padding:.3rem .7rem;}
.gf-skills-source{font-size:.7rem;color:var(--gf-neutral-400);margin:.25rem 0 0;}

/* Verification breakdown bar */
.gf-ver-breakdown{margin:.85rem 0;}
.gf-ver-bar-track{display:flex;height:12px;border-radius:6px;overflow:hidden;background:var(--gf-neutral-100);}
.gf-ver-bar-verified{background:var(--gf-brand-teal);}
.gf-ver-bar-policy{background:var(--gf-brand-purple);opacity:.75;}
.gf-ver-bar-tracked{background:var(--gf-neutral-300);}
.gf-ver-legend{display:flex;flex-wrap:wrap;gap:.4rem 1.1rem;margin-top:.55rem;}
.gf-ver-legend-item{display:flex;align-items:center;gap:.32rem;font-size:.76rem;color:var(--gf-neutral-700);}
.gf-ver-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;}
.gf-ver-dot--verified{background:var(--gf-brand-teal);}
.gf-ver-dot--policy{background:var(--gf-brand-purple);opacity:.75;}
.gf-ver-dot--tracked{background:var(--gf-neutral-300);}

/* Goal visual progress */
.gf-goal-progress-track{height:7px;background:var(--gf-neutral-100);border-radius:4px;overflow:hidden;margin:.5rem 0 .3rem;}
.gf-goal-progress-fill{height:100%;background:linear-gradient(90deg,var(--gf-brand-teal),var(--gf-brand-teal-200));border-radius:4px;transition:width .4s;}
.gf-goal-progress-fill--achieved{background:linear-gradient(90deg,#44c3d0,var(--gf-brand-teal));}
.gf-goal-progress-fill--personal{background:linear-gradient(90deg,var(--gf-brand-purple),var(--gf-brand-teal));}
.gf-goal-achieved-banner{font-size:.76rem;font-weight:700;color:#15803d;background:#dcfce7;border:1px solid #bbf7d0;border-radius:6px;padding:.22rem .6rem;display:inline-block;margin-bottom:.4rem;}
.gf-goal-card--achieved{border-color:#bbf7d0 !important;background:linear-gradient(135deg,#f0fdf4 0%,#fff 60%) !important;}
.gf-goal-type-badge{display:inline-block;font-size:.63rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;padding:.1rem .42rem;border-radius:999px;margin-bottom:.3rem;vertical-align:middle;}
.gf-goal-type-badge--personal{background:var(--gf-brand-purple-50);color:#7c3aed;}
.gf-goal-type-badge--program{background:var(--gf-brand-teal-50);color:var(--gf-accent-teal-700);}
.gf-goal-type-badge--assignment{background:var(--gf-brand-yellow-50);color:#92400e;}

/* Executive summary header */
.gf-exec-header{background:linear-gradient(135deg,var(--gf-brand-midnight) 0%,#1e3a5f 100%);color:#fff;border-radius:14px;padding:1.5rem 1.85rem;margin-bottom:1rem;}
.gf-exec-header-title{font-size:1.45rem;font-weight:800;margin:0 0 .3rem;letter-spacing:-.01em;}
.gf-exec-header-meta{font-size:.8rem;color:rgba(255,255,255,.6);margin:0;display:flex;flex-wrap:wrap;gap:.3rem 1.1rem;}
.gf-exec-stats-row{display:flex;flex-wrap:wrap;gap:1rem 2.5rem;margin-top:1.25rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,.12);}
.gf-exec-stat{text-align:center;}
.gf-exec-stat-value{display:block;font-size:2.1rem;font-weight:800;color:#fff;line-height:1;}
.gf-exec-stat-label{display:block;font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--gf-brand-teal);margin-top:.25rem;}
.gf-exec-stat--dim .gf-exec-stat-value{color:rgba(255,255,255,.55);}
.gf-exec-stat--dim .gf-exec-stat-label{color:rgba(255,255,255,.35);}

/* Impact narrative text */
.gf-impact-narrative{font-size:.93rem;color:var(--gf-neutral-700);line-height:1.6;padding:.85rem 1.1rem;background:var(--gf-brand-teal-50);border-left:4px solid var(--gf-brand-teal);border-radius:0 8px 8px 0;margin:.75rem 0;}

/* Section title with border accent */
.gf-section-title-accented{font-size:.75rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--gf-brand-teal);margin:0 0 .65rem;padding-bottom:.4rem;border-bottom:2px solid var(--gf-brand-teal-100);}

/* ── Opportunity detail (Phase 2B.1) ──────────────────────────────────────── */

/* Hero banner */
.gf-opp-detail-hero{background:linear-gradient(135deg,var(--gf-brand-midnight) 0%,#1e3a5f 100%);color:#fff;border-radius:14px;padding:1.75rem 2rem 1.5rem;margin-bottom:1rem;}
.gf-opp-detail-hero-status{display:inline-block;font-size:.63rem;font-weight:700;text-transform:uppercase;letter-spacing:.09em;padding:.18rem .55rem;border-radius:999px;margin-bottom:.7rem;}
.gf-opp-detail-hero-status--open{background:var(--gf-brand-teal);color:var(--gf-brand-midnight);}
.gf-opp-detail-hero-status--draft{background:rgba(255,255,255,.15);color:rgba(255,255,255,.75);}
.gf-opp-detail-hero-status--closed,.gf-opp-detail-hero-status--cancelled{background:var(--gf-brand-red-50);color:var(--gf-brand-red);}
.gf-opp-detail-title{font-size:1.6rem;font-weight:800;margin:0 0 .4rem;letter-spacing:-.015em;line-height:1.2;}
.gf-opp-detail-org{font-size:.87rem;color:rgba(255,255,255,.65);margin:0;}
.gf-opp-detail-meta-row{display:flex;flex-wrap:wrap;gap:.5rem .9rem;margin:.9rem 0 0;padding-top:.9rem;border-top:1px solid rgba(255,255,255,.12);}
.gf-opp-detail-meta-chip{display:flex;align-items:center;gap:.35rem;font-size:.8rem;color:rgba(255,255,255,.8);}
.gf-opp-detail-meta-chip-icon{font-style:normal;font-size:.9rem;}

/* Registration panel */
.gf-opp-register-panel{display:flex;align-items:center;flex-wrap:wrap;gap:.8rem 1.4rem;padding:1rem 1.25rem;border-radius:10px;border:1.5px solid var(--gf-brand-teal-100);background:var(--gf-brand-teal-50);margin-bottom:1rem;}
.gf-opp-register-panel--registered{border-color:#bbf7d0;background:#f0fdf4;}
.gf-opp-register-info{flex:1;min-width:0;}
.gf-opp-register-label{font-size:.8rem;font-weight:700;color:var(--gf-neutral-700);margin:0 0 .15rem;}
.gf-opp-register-label--registered{color:#15803d;}
.gf-opp-register-sub{font-size:.76rem;color:var(--gf-neutral-500);margin:0;}
.gf-opp-capacity-row{display:flex;align-items:center;gap:.65rem;font-size:.78rem;color:var(--gf-neutral-700);}
.gf-opp-capacity-track{flex:1;height:6px;background:var(--gf-neutral-100);border-radius:3px;overflow:hidden;min-width:60px;}
.gf-opp-capacity-fill{height:100%;background:var(--gf-brand-teal);border-radius:3px;}
.gf-opp-capacity-fill--full{background:var(--gf-brand-red);}
.gf-opp-register-btn{white-space:nowrap;padding:.5rem 1.15rem;font-size:.87rem;}
.gf-opp-register-btn--registered{background:#dcfce7;color:#15803d;border:1.5px solid #bbf7d0;}
.gf-opp-register-btn--registered:hover{background:#bbf7d0;}

/* Registered badge on list cards */
.gf-opp-registered-badge{display:inline-block;font-size:.63rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;padding:.12rem .42rem;border-radius:999px;background:#dcfce7;color:#15803d;border:1px solid #bbf7d0;vertical-align:middle;}

/* Card registered highlight */
.gf-opp-card--registered{border-left:3px solid var(--gf-brand-teal) !important;}

/* Participant list (org detail view) */
.gf-opp-participants{display:flex;flex-direction:column;gap:.45rem;margin:.65rem 0 0;}
.gf-opp-participant-row{display:flex;align-items:center;justify-content:space-between;padding:.55rem .75rem;border-radius:8px;background:var(--gf-neutral-50);font-size:.85rem;}
.gf-opp-participant-email{color:var(--gf-neutral-700);font-weight:500;}
.gf-opp-participant-date{color:var(--gf-neutral-500);font-size:.76rem;}

/* Upcoming registered on dashboard */
.gf-dash-upcoming{display:flex;flex-direction:column;gap:.5rem;margin:.55rem 0 0;}
.gf-dash-upcoming-item{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:.65rem .85rem;border-radius:9px;border:1px solid var(--gf-neutral-200);background:#fff;}
.gf-dash-upcoming-title{font-weight:600;font-size:.88rem;color:var(--gf-neutral-900);}
.gf-dash-upcoming-meta{font-size:.76rem;color:var(--gf-neutral-500);margin:.1rem 0 0;}
.gf-dash-upcoming-link{font-size:.78rem;white-space:nowrap;color:var(--gf-brand-teal);font-weight:600;text-decoration:none;}
.gf-dash-upcoming-link:hover{text-decoration:underline;}

/* Opportunity grid (list page) */
.gf-opp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1rem;margin-bottom:1rem;}
.gf-opp-card{background:#fff;border-radius:12px;border:1px solid var(--gf-neutral-200);padding:1rem 1.1rem;display:flex;flex-direction:column;gap:.45rem;transition:box-shadow .15s;}
.gf-opp-card:hover{box-shadow:0 4px 16px rgba(0,0,0,.08);}
.gf-opp-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem;}
.gf-opp-title{font-size:.97rem;font-weight:700;margin:0;color:var(--gf-neutral-900);}
.gf-opp-org{font-size:.76rem;color:var(--gf-neutral-500);}
.gf-opp-dates{font-size:.78rem;color:var(--gf-neutral-600);margin:0;}
.gf-opp-desc{font-size:.83rem;color:var(--gf-neutral-700);margin:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;}
.gf-opp-footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.45rem;margin-top:.2rem;padding-top:.55rem;border-top:1px solid var(--gf-neutral-100);}
.gf-opp-spots{font-size:.76rem;color:var(--gf-neutral-500);}

/* Segment headings on opp list */
.gf-opp-segment-heading{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.09em;color:var(--gf-neutral-500);margin:1.1rem 0 .45rem;padding-bottom:.3rem;border-bottom:1px solid var(--gf-neutral-200);}

/* ── Participation status (Phase 2B.2) ────────────────────────────────────── */

/* Status badge chips */
.gf-part-badge{display:inline-block;font-size:.63rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;padding:.14rem .5rem;border-radius:999px;vertical-align:middle;white-space:nowrap;}
.gf-part-badge--registered{background:var(--gf-brand-teal-50);color:var(--gf-accent-teal-700);border:1px solid var(--gf-brand-teal-100);}
.gf-part-badge--waitlisted{background:var(--gf-brand-yellow-50);color:#92400e;border:1px solid var(--gf-brand-yellow-100);}
.gf-part-badge--attended{background:#dcfce7;color:#15803d;border:1px solid #bbf7d0;}
.gf-part-badge--no_show{background:var(--gf-brand-red-50);color:var(--gf-brand-red);border:1px solid var(--gf-brand-red-100);}
.gf-part-badge--cancelled{background:var(--gf-neutral-100);color:var(--gf-neutral-600);border:1px solid var(--gf-neutral-200);}

/* Participant row with status controls (org detail) */
.gf-opp-participant-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;padding:.6rem .8rem;border-radius:8px;background:var(--gf-neutral-50);font-size:.85rem;}
.gf-opp-participant-info{display:flex;flex-direction:column;gap:.1rem;min-width:0;flex:1;}
.gf-opp-participant-email{color:var(--gf-neutral-700);font-weight:500;}
.gf-opp-participant-date{color:var(--gf-neutral-500);font-size:.74rem;}
.gf-opp-participant-controls{display:flex;gap:.35rem;flex-wrap:wrap;align-items:center;}
.gf-part-ctrl-btn{font-size:.72rem;padding:.22rem .6rem;border-radius:6px;border:1px solid var(--gf-neutral-200);background:#fff;cursor:pointer;font-weight:600;transition:background .12s;}
.gf-part-ctrl-btn:hover{background:var(--gf-neutral-100);}
.gf-part-ctrl-btn--active{opacity:.45;cursor:default;}
.gf-part-ctrl-btn--attended{color:#15803d;border-color:#bbf7d0;}
.gf-part-ctrl-btn--attended:hover:not(.gf-part-ctrl-btn--active){background:#dcfce7;}
.gf-part-ctrl-btn--no_show{color:var(--gf-brand-red);border-color:var(--gf-brand-red-100);}
.gf-part-ctrl-btn--no_show:hover:not(.gf-part-ctrl-btn--active){background:var(--gf-brand-red-50);}
.gf-part-ctrl-btn--registered{color:var(--gf-accent-teal-700);border-color:var(--gf-brand-teal-100);}
.gf-part-ctrl-btn--registered:hover:not(.gf-part-ctrl-btn--active){background:var(--gf-brand-teal-50);}
.gf-part-ctrl-btn--cancelled{color:var(--gf-neutral-600);border-color:var(--gf-neutral-200);}

/* Volunteer participation status panel (vol detail) */
.gf-opp-part-status-panel{padding:1rem 1.2rem;border-radius:10px;margin-bottom:1rem;border:1.5px solid var(--gf-neutral-200);background:var(--gf-neutral-50);}
.gf-opp-part-status-panel--attended{border-color:#bbf7d0;background:#f0fdf4;}
.gf-opp-part-status-panel--no_show{border-color:var(--gf-brand-red-100);background:var(--gf-brand-red-50);}
.gf-opp-part-status-panel--waitlisted{border-color:var(--gf-brand-yellow-100);background:var(--gf-brand-yellow-50);}
.gf-opp-part-status-panel--cancelled{border-color:var(--gf-neutral-200);background:var(--gf-neutral-100);}
.gf-opp-part-status-label{font-size:.83rem;font-weight:700;margin:0 0 .2rem;}
.gf-opp-part-status-sub{font-size:.8rem;color:var(--gf-neutral-700);margin:0;}
.gf-opp-part-status-cta{display:inline-block;margin-top:.65rem;font-size:.82rem;font-weight:600;color:var(--gf-brand-teal);text-decoration:none;}
.gf-opp-part-status-cta:hover{text-decoration:underline;}

/* Upcoming dashboard item with status badge */
.gf-dash-upcoming-item{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:.65rem .85rem;border-radius:9px;border:1px solid var(--gf-neutral-200);background:#fff;}
.gf-dash-upcoming-item--attended{border-color:#bbf7d0;background:#f0fdf4;}

/* Calendar opportunity dot */
.gf-cal-dot--opportunity{background:var(--gf-brand-purple);border-radius:50%;}
.gf-cal-grid-dot--opportunity{background:var(--gf-brand-purple);}

/* ── Phase 2B.3 — Contribution flow & Impact fields ─────────────────────── */

/* Contribute page card */
.gf-contribute-card{max-width:620px;}
.gf-contribute-title{font-size:1.35rem;font-weight:700;margin:0 0 .2rem;}
.gf-contribute-sub{color:var(--gf-neutral-500);margin:0 0 1.25rem;font-size:.9rem;}
.gf-contribute-form{display:flex;flex-direction:column;gap:.85rem;}
.gf-contribute-section-head{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--gf-neutral-500);margin-top:.35rem;}
.gf-contribute-field{display:flex;flex-direction:column;gap:.2rem;}
.gf-contribute-field-label{font-size:.85rem;font-weight:600;}
.gf-contribute-field input,.gf-contribute-field textarea{width:100%;box-sizing:border-box;}
.gf-contribute-impact-input{}
.gf-contribute-submit{align-self:flex-start;margin-top:.35rem;}

/* Inline CTA link inside status panels */
.gf-opp-part-status-cta-inline{color:#15803d;font-weight:600;text-decoration:none;}
.gf-opp-part-status-cta-inline:hover{text-decoration:underline;}

/* Contribution logged badge */
.gf-contribution-logged-badge{display:inline-flex;align-items:center;gap:.3rem;font-size:.82rem;color:#15803d;font-weight:600;padding:.2rem .6rem;border-radius:4px;background:#f0fdf4;border:1px solid #bbf7d0;width:fit-content;}

/* Org opportunity — impact fields section */
.gf-impact-fields-list{display:flex;flex-direction:column;gap:.5rem;}
.gf-impact-field-row{display:flex;align-items:center;gap:.75rem;padding:.5rem .65rem;background:var(--gf-neutral-50,#f9fafb);border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:6px;}
.gf-impact-field-label{font-weight:600;font-size:.9rem;flex:1;}
.gf-impact-field-type{font-size:.82rem;}

/* Org participant impact response display */
.gf-opp-impact-resp-row{display:flex;flex-wrap:wrap;gap:.4rem .85rem;margin-top:.35rem;}
.gf-opp-impact-resp-item{font-size:.8rem;color:var(--gf-neutral-600,#4b5563);}
.gf-opp-impact-resp-item--reflection{font-style:italic;}
.gf-opp-impact-resp-label{font-weight:600;}
.gf-opp-impact-resp-val{}

/* ── Phase 2B.4 — Evidence, Attestation & Review ────────────────────────── */

/* Attestation row in contribute form */
.gf-contribute-attestation-row{display:flex;align-items:flex-start;gap:.6rem;padding:.75rem;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:6px;}
.gf-contribute-attestation-row input[type="checkbox"]{margin-top:.15rem;flex-shrink:0;width:1rem;height:1rem;}
.gf-contribute-attestation-label{font-size:.84rem;line-height:1.5;color:#15803d;font-weight:500;}

/* Trust indicator chips */
.gf-trust-indicators-row{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.4rem;}
.gf-trust-indicator{display:inline-flex;align-items:center;font-size:.72rem;font-weight:600;padding:.15rem .5rem;border-radius:4px;line-height:1.4;}
.gf-trust-indicator--attested{background:#f0fdf4;color:#15803d;border:1px solid #bbf7d0;}
.gf-trust-indicator--evidence{background:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe;}
.gf-trust-indicator--reflection{background:#fefce8;color:#854d0e;border:1px solid #fde68a;}
.gf-trust-indicator--supervisor{background:#fdf4ff;color:#7e22ce;border:1px solid #e9d5ff;}

/* Review queue — reflection + evidence */
.gf-review-reflection{font-size:.78rem;color:var(--gf-neutral-600,#4b5563);margin-top:.35rem;font-style:italic;line-height:1.45;}
.gf-review-evidence-list{margin-top:.35rem;display:flex;flex-direction:column;gap:.2rem;}
.gf-review-evidence-item{font-size:.78rem;display:flex;align-items:baseline;gap:.3rem;flex-wrap:wrap;}
.gf-review-evidence-title{font-weight:600;color:var(--gf-neutral-700,#374151);}
.gf-review-evidence-link{color:var(--gf-brand-blue,#1d4ed8);text-decoration:none;font-size:.78rem;}
.gf-review-evidence-link:hover{text-decoration:underline;}
.gf-review-evidence-desc{font-size:.75rem;}

/* ── Phase 2A.6 — Volunteer Cohesion & Identity Polish ─────────────────── */

/* Notification bell */
.gf-notif-menu{position:relative;display:inline-block;}
.gf-notif-trigger{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.15rem;padding:.3rem .4rem;border-radius:6px;border:none;background:transparent;line-height:1;}
.gf-notif-trigger::-webkit-details-marker{display:none;}
.gf-notif-trigger:hover{background:rgba(255,255,255,.12);}
.gf-notif-bell{font-size:1.05rem;line-height:1;}
.gf-notif-badge{background:var(--gf-brand-red,#f15d5e);color:#fff;font-size:.6rem;font-weight:700;border-radius:9999px;padding:.05em .38em;min-width:1.1em;text-align:center;line-height:1.45;margin-left:.05rem;}
.gf-notif-pop{position:absolute;right:0;top:calc(100% + .4rem);width:310px;background:#fff;border-radius:10px;box-shadow:0 4px 24px rgba(0,0,0,.14);border:1px solid var(--gf-neutral-200,#e2e8f0);z-index:200;overflow:hidden;}
.gf-notif-header{padding:.55rem .9rem;border-bottom:1px solid var(--gf-neutral-100,#f1f5f9);font-size:.82rem;}
.gf-notif-item{display:flex;align-items:flex-start;gap:.55rem;padding:.6rem .9rem;border-bottom:1px solid var(--gf-neutral-100,#f1f5f9);}
.gf-notif-item:last-child{border-bottom:none;}
.gf-notif-item--unread{background:var(--gf-brand-teal-50,#ecfeff);}
.gf-notif-dot{flex-shrink:0;width:.45rem;height:.45rem;border-radius:50%;background:var(--gf-brand-teal,#44c3d0);margin-top:.35rem;}
.gf-notif-body{flex:1;min-width:0;}
.gf-notif-text{font-size:.8rem;margin:0;line-height:1.45;color:var(--gf-neutral-900,#1b1f24);}
.gf-notif-time{font-size:.72rem;color:var(--gf-neutral-500,#8898aa);margin:.2rem 0 0;}

/* Impact hero — purple variant */
.gf-impact-hero--purple{background:linear-gradient(135deg,var(--gf-brand-midnight,#27203f) 0%,#3b2d5c 60%,#4a3070 100%);color:#fff;border-radius:12px;}
.gf-impact-hero--purple .gf-impact-hero-number{color:#fff;}
.gf-impact-hero--purple .gf-impact-hero-number-label{color:rgba(255,255,255,.75);}
.gf-impact-hero--purple .gf-impact-hero-narrative{color:rgba(255,255,255,.65);}
.gf-impact-hero--purple .gf-impact-stat-label{color:rgba(255,255,255,.65);}
.gf-impact-hero--purple .gf-impact-stat-value{color:#fff;}
.gf-impact-hero--purple .gf-impact-stat--teal .gf-impact-stat-value{color:var(--gf-brand-teal,#44c3d0);}
.gf-impact-hero--purple .gf-impact-stat--muted .gf-impact-stat-value{color:rgba(255,255,255,.55);}

/* Reporting — purple exec header */
.gf-exec-header--purple{background:linear-gradient(135deg,var(--gf-brand-midnight,#27203f) 0%,#3b2d5c 60%,#4a3070 100%);color:#fff;border-radius:12px;}
.gf-exec-header--purple .gf-exec-header-eyebrow{font-size:.73rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--gf-brand-purple,#c778b2);margin-bottom:.25rem;}
.gf-exec-header--purple .gf-exec-header-title{color:#fff;}
.gf-exec-header--purple .gf-exec-header-meta{color:rgba(255,255,255,.65);}
.gf-exec-header--purple .gf-exec-header-meta span+span::before{color:rgba(255,255,255,.35);}
.gf-exec-header--purple .gf-exec-stat-value{color:#fff;}
.gf-exec-header--purple .gf-exec-stat-label{color:rgba(255,255,255,.65);}
.gf-exec-header--purple .gf-exec-stat--dim .gf-exec-stat-value{color:rgba(255,255,255,.5);}

/* AI narrative placeholder */
.gf-ai-narrative-placeholder{background:linear-gradient(135deg,var(--gf-brand-purple-50,#fdf4ff) 0%,var(--gf-brand-teal-50,#ecfeff) 100%);border:1px dashed var(--gf-brand-purple,#c778b2);border-radius:10px;padding:1rem 1.25rem;margin:.65rem 0;}
.gf-ai-narrative-label{font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--gf-brand-purple,#c778b2);margin-bottom:.4rem;}
.gf-ai-narrative-text{font-size:.88rem;color:var(--gf-neutral-700,#4a5563);line-height:1.55;margin:0 0 .4rem;}
.gf-ai-narrative-coming{font-size:.75rem;color:var(--gf-neutral-500,#8898aa);margin:0;font-style:italic;}

/* Settings — join org form */
.gf-join-org-form{margin-top:.5rem;}
.gf-join-org-row{display:flex;gap:.5rem;align-items:center;}
.gf-join-org-row input{flex:1;min-width:0;font-family:monospace;letter-spacing:.05em;}
.gf-settings-value--muted{color:var(--gf-neutral-500,#8898aa);font-size:.88rem;}

/* Org invite code */
.gf-invite-code-row{display:flex;gap:.5rem;align-items:center;margin-top:.3rem;}
.gf-invite-code-input{flex:1;min-width:0;font-family:monospace;letter-spacing:.08em;background:var(--gf-neutral-50,#f8fafc);border:1px solid var(--gf-neutral-200,#e2e8f0);border-radius:6px;padding:.4rem .65rem;font-size:.9rem;}
.gf-btn-sm{padding:.3rem .7rem!important;font-size:.8rem!important;}

/* ── Page-level tab navigation (Activities | Goals | Archived) ─────────── */
.gf-page-tab-row{display:flex;align-items:center;gap:.15rem;padding:.35rem .1rem .0rem;border-bottom:2px solid var(--gf-neutral-200,#e2e8f0);margin-bottom:.85rem;}
.gf-page-tab{display:inline-block;padding:.45rem 1rem;font-size:.88rem;font-weight:600;color:var(--gf-neutral-600,#718096);border-radius:6px 6px 0 0;text-decoration:none;transition:color .15s,background .15s;border:1px solid transparent;border-bottom:none;margin-bottom:-2px;}
.gf-page-tab:hover{color:var(--gf-neutral-900,#1b1f24);background:var(--gf-neutral-50,#f8fafc);}
.gf-page-tab.is-active{color:var(--gf-accent-teal-500,#1a8070);background:#fff;border-color:var(--gf-neutral-200,#e2e8f0);border-bottom-color:#fff;}

/* Compact inline filter */
.gf-filter-inline{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;margin:0;}
/* One control height for the whole toolbar row. Everything in a filter
   toolbar — the select, the "Verified only" chip, Print, Log Activity — is
   2rem tall and vertically centred, so nothing sits higher than its
   neighbours. The checkbox is styled as a chip so it reads as part of the
   filter group rather than loose text. */
.gf-filter-select-sm{font-size:.8rem;padding:0 .5rem;border:1px solid var(--gf-neutral-200,#e2e8f0);border-radius:6px;background:#fff;color:var(--gf-neutral-900,#1b1f24);height:2rem;line-height:1;box-sizing:border-box;}
/* The generic `.gf-main select{width:100%;margin:.2rem 0 .65rem}` rule out-specifies
   `.gf-filter-select-sm`, so the toolbar select collapsed to its flex row's
   min-content, clipped "All time" under the native arrow and sat above its
   neighbours. Same specificity class, later in the file: size to content,
   reserve room for the arrow, no stray margin, never shrink below its label. */
.gf-main .gf-filter-inline select.gf-filter-select-sm{width:auto;min-width:8.5rem;max-width:100%;margin:0;flex:0 0 auto;padding:0 1.7rem 0 .55rem;line-height:normal;}
.gf-main .gf-filter-inline .gf-filter-check-sm,.gf-main .gf-filter-inline .gf-filter-check-sm input{margin:0;}
.gf-filter-check-sm{font-size:.8rem;display:inline-flex;align-items:center;gap:.35rem;white-space:nowrap;color:var(--gf-neutral-700,#4a5563);height:2rem;padding:0 .6rem;border:1px solid var(--gf-neutral-200,#e2e8f0);border-radius:6px;background:#fff;box-sizing:border-box;cursor:pointer;}
.gf-filter-check-sm input{margin:0;accent-color:var(--gf-accent-teal-500,#1a8070);}
.gf-filter-check-sm:has(input:checked){border-color:var(--gf-accent-teal-500,#1a8070);color:var(--gf-accent-teal-700,#14766a);background:var(--gf-brand-teal-50,#e4f1ef);}
.gf-filter-clear{font-size:.78rem;color:var(--gf-neutral-500,#8898aa);text-decoration:underline;display:inline-flex;align-items:center;height:2rem;}
.gf-btn-xs{padding:.22rem .6rem!important;font-size:.78rem!important;min-width:0;}
.gf-toolbar--with-filter .gf-toolbar-actions{flex-wrap:wrap;gap:.5rem;align-items:center;}
.gf-toolbar--with-filter .gf-toolbar-actions .gf-btn-sm{height:2rem;display:inline-flex;align-items:center;padding-top:0!important;padding-bottom:0!important;box-sizing:border-box;}
/* A quiet divider between the filters and the page actions on wide screens;
   dropped when the row wraps on narrow ones. */
@media (min-width:641px){.gf-toolbar--with-filter .gf-filter-inline{padding-right:.6rem;border-right:1px solid var(--gf-neutral-200,#e2e8f0);margin-right:.1rem;}}

/* Profile photo upload */
.gf-photo-upload-area{display:flex;align-items:center;gap:1.25rem;margin-top:.75rem;}
.gf-photo-upload-preview{width:64px;height:64px;border-radius:50%;background:var(--gf-brand-midnight,#27203f);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.gf-photo-upload-initials{color:#fff;font-size:1.3rem;font-weight:700;letter-spacing:.03em;}
.gf-photo-upload-controls{display:flex;flex-direction:column;gap:.2rem;}

/* Org admin nav — avatar instead of email */
.gf-org-nav-avatar{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;background:var(--gf-brand-teal,#44c3d0);color:var(--gf-brand-midnight,#27203f);font-size:.75rem;font-weight:700;letter-spacing:.04em;cursor:default;}
.gf-org-nav-email{display:none;}

/* ── Button system (canonical — overrides earlier partials) ──────────────── */
.gf-btn{display:inline-flex;align-items:center;justify-content:center;gap:.35rem;padding:.42rem 1rem;font-size:.86rem;font-weight:600;border-radius:8px;border:1.5px solid transparent;cursor:pointer;text-decoration:none;transition:background .15s,color .15s,border-color .15s;line-height:1.3;white-space:nowrap;}
/* Primary = brand teal (#44c3d0), dark text for contrast */
.gf-btn-primary{background:#44c3d0;color:#27203f;border-color:#44c3d0;}
.gf-btn-primary:hover:not(:disabled){background:#2eaab8;border-color:#2eaab8;color:#fff;}
/* CTA = same teal, slightly larger — only use for the one "hero" action per page */
.gf-btn-primary-cta{background:#44c3d0;color:#27203f;border-color:#44c3d0;font-size:.94rem;padding:.52rem 1.25rem;font-weight:700;}
.gf-btn-primary-cta:hover:not(:disabled){background:#2eaab8;border-color:#2eaab8;color:#fff;}
.gf-btn-secondary{background:#fff;color:var(--gf-neutral-700,#4a5563);border-color:var(--gf-neutral-300,#cbd5e0);}
.gf-btn-secondary:hover:not(:disabled){background:var(--gf-neutral-50,#f8fafc);border-color:var(--gf-neutral-400,#a0aec0);}
.gf-btn-danger{background:#fff;color:#c53030;border-color:#c53030;}
.gf-btn-danger:hover:not(:disabled){background:#fff5f5;border-color:#9b2c2c;}
.gf-btn-sm{padding:.28rem .7rem!important;font-size:.8rem!important;}
.gf-btn-xs{padding:.18rem .5rem!important;font-size:.74rem!important;}
.gf-btn-logout{background:transparent;color:var(--gf-neutral-600,#718096);border-color:var(--gf-neutral-300,#cbd5e0);}
.gf-btn-logout:hover{background:var(--gf-neutral-50,#f8fafc);}
.gf-btn:disabled{opacity:.55;cursor:not-allowed;}

/* ── Phase 3 — Holistic UX/UI Redesign ───────────────────────────────────── */

/* Immersive hero — full-bleed purple gradient with ring slot */
.gf-hero-immersive{display:flex;align-items:stretch;gap:0;border-radius:16px;overflow:hidden;background:linear-gradient(135deg,#27203f 0%,#3b2d5c 55%,#1a3a52 100%);color:#fff;margin-bottom:1.1rem;min-height:160px;position:relative;}
.gf-hero-immersive::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 80% 50%,rgba(68,195,208,.18) 0%,transparent 65%);pointer-events:none;}
.gf-hero-left{flex:1 1 0;padding:1.5rem 1.75rem;display:flex;flex-direction:column;justify-content:center;gap:.55rem;z-index:1;}
.gf-hero-eyebrow{font-size:.65rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.5);margin:0;}
.gf-hero-number{font-size:3.5rem;font-weight:900;line-height:.95;letter-spacing:-.03em;color:#fff;margin:0;}
.gf-hero-number-unit{font-size:1.6rem;font-weight:700;opacity:.65;margin-left:.1rem;}
.gf-hero-label{font-size:.72rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--gf-brand-teal,#44c3d0);margin:.1rem 0 0;}
.gf-hero-narrative{font-size:.87rem;color:rgba(255,255,255,.6);line-height:1.5;max-width:380px;margin:0;}
.gf-hero-right{flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:1.25rem 1.75rem 1.25rem 0;z-index:1;}
.gf-hero-stats-grid{display:flex;gap:1.5rem 2rem;flex-wrap:wrap;align-items:flex-start;}
.gf-hero-stat{display:flex;flex-direction:column;align-items:center;text-align:center;min-width:48px;}
.gf-hero-stat-value{font-size:1.6rem;font-weight:800;color:#fff;line-height:1;}
.gf-hero-stat-value--teal{color:var(--gf-brand-teal,#44c3d0);}
.gf-hero-stat-value--yellow{color:var(--gf-brand-yellow,#fbb85b);}
.gf-hero-stat-label{font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:rgba(255,255,255,.5);margin-top:.2rem;white-space:nowrap;}
.gf-hero-ring-wrap{display:flex;flex-direction:column;align-items:center;gap:.35rem;}
.gf-hero-ring-label{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:rgba(255,255,255,.45);text-align:center;}
.gf-hero-divider{width:1px;background:rgba(255,255,255,.1);align-self:stretch;margin:0 .25rem;}

/* Achievement milestone shelf */
.gf-milestone-shelf{display:flex;gap:.5rem;flex-wrap:wrap;margin:.2rem 0 .55rem;}
.gf-milestone-badge{display:flex;flex-direction:column;align-items:center;gap:.15rem;padding:.55rem .75rem;border-radius:10px;min-width:62px;transition:transform .15s;}
.gf-milestone-badge--achieved{background:linear-gradient(135deg,#27203f,#3b2d5c);border:1px solid rgba(68,195,208,.35);color:#fff;}
.gf-milestone-badge--achieved:hover{transform:translateY(-2px);}
.gf-milestone-badge--next{background:#fff;border:2px dashed var(--gf-brand-teal,#44c3d0);color:var(--gf-neutral-700,#4a5563);animation:gfMilestoneGlow 2s ease-in-out infinite;}
.gf-milestone-badge--locked{background:var(--gf-neutral-50,#f8fafc);border:1px solid var(--gf-neutral-200,#e5e7eb);color:var(--gf-neutral-400,#9ca3af);opacity:.65;}
.gf-milestone-icon{font-size:1.3rem;line-height:1;}
.gf-milestone-label{font-size:.65rem;font-weight:700;text-align:center;line-height:1.2;letter-spacing:.02em;}
.gf-milestone-sub{font-size:.6rem;opacity:.7;text-align:center;}
@keyframes gfMilestoneGlow{0%,100%{box-shadow:0 0 0 0 rgba(68,195,208,.3);}50%{box-shadow:0 0 0 5px rgba(68,195,208,.1);}}

/* SVG chart containers */
.gf-chart-wrap{position:relative;width:100%;}
.gf-chart-svg-fill{display:block;width:100%;height:auto;}
.gf-chart-legend{display:flex;flex-wrap:wrap;gap:.3rem .9rem;margin-top:.55rem;}
.gf-chart-legend-item{display:flex;align-items:center;gap:.3rem;font-size:.75rem;color:var(--gf-neutral-700,#4a5563);}
.gf-chart-legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}

/* Donut chart layout (chart + legend side by side) */
.gf-donut-layout{display:flex;align-items:center;gap:1.1rem;flex-wrap:wrap;}
.gf-donut-svg-wrap{flex-shrink:0;}
.gf-donut-legend{flex:1;min-width:100px;display:flex;flex-direction:column;gap:.35rem;}
.gf-donut-legend-item{display:flex;align-items:center;gap:.45rem;font-size:.8rem;}
.gf-donut-legend-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;}
.gf-donut-legend-label{flex:1;color:var(--gf-neutral-700,#4a5563);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gf-donut-legend-pct{font-weight:700;font-size:.76rem;color:var(--gf-neutral-900,#1b1f24);}

/* Goal progress ring card layout */
.gf-goal-ring-card{display:flex;align-items:center;gap:1rem;padding:.75rem 0;border-bottom:1px solid var(--gf-neutral-100,#f1f5f9);}
.gf-goal-ring-card:last-child{border-bottom:none;padding-bottom:0;}
.gf-goal-ring-card:first-child{padding-top:0;}
.gf-goal-ring-body{flex:1;min-width:0;}
.gf-goal-ring-title{font-size:.9rem;font-weight:700;color:var(--gf-neutral-900,#1b1f24);margin:0 0 .2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gf-goal-ring-meta{font-size:.76rem;color:var(--gf-neutral-500,#8898aa);}
.gf-goal-ring-progress{font-size:.78rem;font-weight:700;color:var(--gf-accent-teal-700,#0f5c52);}

/* Visual activity card (timeline card upgrade) */
.gf-act-card{background:#fff;border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:10px;padding:.75rem 1rem;display:flex;align-items:flex-start;gap:.75rem;transition:box-shadow .15s;}
.gf-act-card:hover{box-shadow:0 2px 12px rgba(0,0,0,.07);}
.gf-act-card-accent{width:3px;border-radius:2px;flex-shrink:0;align-self:stretch;min-height:40px;}
.gf-act-card-accent--verified{background:var(--gf-brand-teal,#44c3d0);}
.gf-act-card-accent--pending{background:var(--gf-brand-yellow,#fbb85b);}
.gf-act-card-accent--denied{background:var(--gf-brand-red,#f15d5e);}
.gf-act-card-accent--submitted{background:var(--gf-neutral-300,#d1d5db);}
.gf-act-card-body{flex:1;min-width:0;}
.gf-act-card-title{font-size:.9rem;font-weight:700;color:var(--gf-neutral-900,#1b1f24);margin:0 0 .15rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gf-act-card-meta{font-size:.76rem;color:var(--gf-neutral-500,#8898aa);margin:0;}
.gf-act-card-right{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem;flex-shrink:0;}
.gf-act-card-hours{font-size:1.05rem;font-weight:800;color:var(--gf-neutral-900,#1b1f24);line-height:1;}
.gf-act-card-hours-label{font-size:.6rem;text-transform:uppercase;letter-spacing:.06em;color:var(--gf-neutral-400,#9ca3af);}

/* Status pipeline view */
.gf-pipeline-row{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap;margin:.5rem 0;}
.gf-pipeline-stage{display:flex;flex-direction:column;align-items:center;gap:.2rem;flex:1;min-width:56px;}
.gf-pipeline-count{font-size:1.4rem;font-weight:800;color:var(--gf-neutral-900,#1b1f24);}
.gf-pipeline-count--teal{color:var(--gf-brand-teal,#44c3d0);}
.gf-pipeline-count--yellow{color:var(--gf-brand-yellow,#fbb85b);}
.gf-pipeline-count--purple{color:var(--gf-brand-purple,#c778b2);}
.gf-pipeline-count--green{color:#44c3d0;}
.gf-pipeline-label{font-size:.62rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--gf-neutral-500,#8898aa);text-align:center;}
.gf-pipeline-arrow{color:var(--gf-neutral-300,#d1d5db);font-size:.8rem;flex-shrink:0;}

/* KPI row (ops dashboard) */
/* ── KPI cards ────────────────────────────────────────────────────────────────
   Founder review: "$3,792.15" pushed outside its card.

   Two causes, both structural rather than specific to that value:
     1. .gf-kpi-value was a fixed 1.8rem, so a long value could not shrink.
     2. .gf-kpi-row tracks could collapse to 110px, and grid/flex children
        default to min-width:auto — the text set the floor and then spilled.

   Fixed with responsive typography plus an explicit min-width:0 on every
   child, so this holds for any value at any width instead of needing a
   per-number font-size patch. Values WRAP rather than truncating: a clipped
   monetary figure is worse than a two-line one. Shared by the Dashboard and
   the Reporting page, which both use this class set. */
.gf-kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:.65rem;margin-bottom:1rem;}
.gf-kpi-card{background:#fff;border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:10px;padding:.9rem 1rem;display:flex;flex-direction:column;gap:.15rem;transition:box-shadow .15s;min-width:0;overflow:hidden;}
.gf-kpi-card:hover{box-shadow:0 2px 10px rgba(0,0,0,.06);}
.gf-kpi-card > *{min-width:0;}
.gf-kpi-value{
/* Default size, for values of roughly seven characters or fewer ("16",
   "119.25h"). Longer values get a step-down class from kpiValueHtml(), because
   neither clamp() nor a container query knows how many characters the value
   has — and that is what decides whether it fits on one line. */
font-size:clamp(1.15rem,2.1vw,1.8rem);
font-weight:900;
color:var(--gf-neutral-900,#1b1f24);
line-height:1.12;
letter-spacing:-.02em;
min-width:0;
overflow-wrap:anywhere;
font-variant-numeric:tabular-nums;
}
/* 8-10 characters, e.g. "$3,792.15". */
.gf-kpi-value--sm{font-size:clamp(1.05rem,1.6vw,1.35rem);letter-spacing:-.01em;}
/* 11+ characters, e.g. "$1,245,781.42". */
.gf-kpi-value--xs{font-size:clamp(.82rem,1.05vw,.95rem);letter-spacing:0;}
/* The Reporting impact banner reuses these value classes outside a
   .gf-kpi-card, on a dark ground — it inherits its own colour inline. */
.gf-kpi-value{color:inherit;}
.gf-kpi-card .gf-kpi-value{color:var(--gf-neutral-900,#1b1f24);}
.gf-kpi-label{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--gf-neutral-500,#8898aa);min-width:0;overflow-wrap:anywhere;}
.gf-kpi-delta{font-size:.74rem;font-weight:700;margin-top:.1rem;min-width:0;overflow-wrap:anywhere;line-height:1.35;}
.gf-kpi-delta--up{color:#44c3d0;}
.gf-kpi-delta--down{color:var(--gf-brand-red,#f15d5e);}
.gf-kpi-delta--flat{color:var(--gf-neutral-400,#9ca3af);}
.gf-kpi-card--teal{border-top:3px solid var(--gf-brand-teal,#44c3d0);}
.gf-kpi-card--purple{border-top:3px solid var(--gf-brand-purple,#c778b2);}
.gf-kpi-card--yellow{border-top:3px solid var(--gf-brand-yellow,#fbb85b);}
.gf-kpi-card--midnight{border-top:3px solid var(--gf-brand-midnight,#27203f);}

/* Program visual cards (org ops) */
.gf-prog-card{background:#fff;border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:12px;padding:1rem 1.1rem;display:flex;align-items:center;gap:1rem;transition:box-shadow .15s;}
.gf-prog-card:hover{box-shadow:0 3px 14px rgba(0,0,0,.08);}
.gf-prog-card-ring{flex-shrink:0;}
.gf-prog-card-body{flex:1;min-width:0;}
.gf-prog-card-name{font-size:.95rem;font-weight:700;color:var(--gf-neutral-900,#1b1f24);margin:0 0 .15rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gf-prog-card-stats{font-size:.78rem;color:var(--gf-neutral-600,#4b5563);}
.gf-prog-card-progress-label{font-size:.72rem;font-weight:700;color:var(--gf-accent-teal-700,#0f5c52);margin-top:.2rem;}
.gf-prog-card-actions{display:flex;gap:.4rem;flex-shrink:0;}
.gf-prog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:.75rem;margin:.5rem 0;}

/* Volunteer engagement funnel */
.gf-funnel{display:flex;flex-direction:column;gap:.45rem;}
.gf-funnel--compact{gap:.3rem;}
.gf-funnel-stage{display:flex;flex-direction:column;gap:.2rem;}
.gf-funnel-bar-wrap{width:100%;background:var(--gf-neutral-100,#f3f4f6);border-radius:4px;height:10px;overflow:hidden;}
.gf-funnel-bar{height:100%;border-radius:4px;transition:width .4s;}
.gf-funnel-meta{display:flex;align-items:center;gap:.4rem;font-size:.78rem;}
.gf-funnel-icon{font-style:normal;line-height:1;}
.gf-funnel-count{font-weight:800;color:var(--gf-neutral-900,#1b1f24);min-width:28px;}
.gf-funnel-label{flex:1;color:var(--gf-neutral-700,#4a5563);}
.gf-funnel-pct{color:var(--gf-neutral-400,#9ca3af);font-weight:600;}

/* Narrative story card (Reporting redesign) */
.gf-story-card{background:linear-gradient(135deg,#fdf4ff 0%,#ecfeff 100%);border:1px solid rgba(199,120,178,.2);border-radius:12px;padding:1.1rem 1.25rem;margin:.5rem 0;}
.gf-story-eyebrow{font-size:.65rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--gf-brand-purple,#c778b2);margin:0 0 .4rem;}
.gf-story-headline{font-size:1.15rem;font-weight:800;color:var(--gf-brand-midnight,#27203f);margin:0 0 .5rem;line-height:1.3;}
.gf-story-body{font-size:.88rem;color:var(--gf-neutral-700,#4a5563);line-height:1.6;margin:0;}

/* Opportunity discovery card (visual upgrade) */
.gf-opp-vis-card{background:#fff;border:1.5px solid var(--gf-neutral-200,#e5e7eb);border-radius:12px;padding:1rem 1.1rem;display:flex;flex-direction:column;gap:.45rem;transition:box-shadow .15s,border-color .15s,transform .12s;}
.gf-opp-vis-card:hover{box-shadow:0 6px 24px rgba(0,0,0,.1);border-color:var(--gf-accent-teal,#44c3d0);transform:translateY(-2px);}
.gf-opp-vis-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem;}
.gf-opp-vis-status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:.3rem;}
.gf-opp-vis-status-dot--open{background:#44c3d0;}
.gf-opp-vis-status-dot--waitlisted{background:var(--gf-brand-yellow,#fbb85b);}
.gf-opp-vis-status-dot--closed{background:var(--gf-neutral-400,#9ca3af);}
.gf-opp-vis-title{font-size:.95rem;font-weight:700;color:var(--gf-neutral-900,#1b1f24);margin:0;line-height:1.3;}
.gf-opp-vis-org{font-size:.73rem;color:var(--gf-neutral-500,#8898aa);margin-top:.1rem;}
.gf-opp-cause-tags{display:flex;flex-wrap:wrap;gap:.3rem;}
.gf-opp-cause-tag{display:inline-block;font-size:.66rem;font-weight:700;padding:.12rem .42rem;border-radius:999px;background:rgba(68,195,208,.12);color:var(--gf-accent-teal-700,#0f5c52);border:1px solid rgba(68,195,208,.3);backdrop-filter:blur(4px);}
.gf-opp-cause-tag--purple{background:rgba(124,58,237,.1);color:#7c3aed;border-color:rgba(124,58,237,.25);}
.gf-opp-cause-tag--yellow{background:rgba(251,184,91,.12);color:#92400e;border-color:rgba(251,184,91,.35);}
.gf-opp-participation-bar{height:4px;background:var(--gf-neutral-100,#f3f4f6);border-radius:3px;overflow:hidden;}
.gf-opp-participation-fill{height:100%;border-radius:3px;background:var(--gf-brand-teal,#44c3d0);transition:width .4s;}

/* Profile identity showcase */
.gf-profile-hero{background:linear-gradient(135deg,#27203f 0%,#3b2d5c 100%);border-radius:14px;padding:1.5rem 1.75rem;color:#fff;display:flex;align-items:center;gap:1.25rem;margin-bottom:1rem;}
.gf-profile-avatar-lg{width:72px;height:72px;border-radius:50%;border:3px solid rgba(255,255,255,.25);flex-shrink:0;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.12);font-size:1.6rem;font-weight:800;color:#fff;letter-spacing:.02em;}
.gf-profile-hero-body{flex:1;min-width:0;}
.gf-profile-hero-name{font-size:1.3rem;font-weight:800;margin:0 0 .2rem;letter-spacing:-.01em;}
.gf-profile-hero-meta{font-size:.8rem;color:rgba(255,255,255,.6);margin:0 0 .55rem;}
.gf-profile-hero-badges{display:flex;flex-wrap:wrap;gap:.3rem;}
.gf-profile-hero-badge{display:inline-flex;align-items:center;gap:.25rem;font-size:.67rem;font-weight:700;padding:.15rem .5rem;border-radius:999px;background:rgba(255,255,255,.12);color:rgba(255,255,255,.85);}

/* Empty state — compelling brand-aligned */
.gf-empty-hero{display:flex;flex-direction:column;align-items:center;text-align:center;padding:2.5rem 1.5rem;gap:.65rem;}
.gf-empty-hero-icon{font-size:2.5rem;line-height:1;opacity:.75;}
.gf-empty-hero-title{font-size:1.05rem;font-weight:700;color:var(--gf-neutral-800,#2d3748);margin:0;}
.gf-empty-hero-body{font-size:.87rem;color:var(--gf-neutral-500,#8898aa);margin:0;max-width:320px;line-height:1.55;}
.gf-empty-hero-cta{margin-top:.35rem;}

/* Ops dashboard — activity pipeline strip */
.gf-ops-pipeline{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:.5rem;margin:.5rem 0;}
.gf-ops-pipe-stage{background:var(--gf-neutral-50,#f8fafc);border:1px solid var(--gf-neutral-200,#e5e7eb);border-radius:8px;padding:.65rem .75rem;text-align:center;}
.gf-ops-pipe-count{font-size:1.5rem;font-weight:800;color:var(--gf-neutral-900,#1b1f24);line-height:1;}
.gf-ops-pipe-label{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--gf-neutral-500,#8898aa);margin-top:.15rem;}

/* Inline sparkline in KPI card */
.gf-kpi-sparkline{margin-top:.4rem;opacity:.7;}

/* Section label with teal pill accent */
.gf-section-pill{display:inline-flex;align-items:center;gap:.35rem;font-size:.65rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--gf-brand-midnight,#27203f);background:var(--gf-brand-teal-50,#ecfeff);border:1px solid var(--gf-brand-teal-100,#cffafe);padding:.15rem .6rem;border-radius:999px;margin-bottom:.6rem;}

/* Verification composition bar */
.gf-ver-comp{margin:.5rem 0;}
.gf-ver-comp-bar{height:10px;border-radius:5px;overflow:hidden;display:flex;}
.gf-ver-comp-seg{flex-shrink:0;transition:flex .3s;}
.gf-ver-comp-seg--verified{background:var(--gf-brand-teal,#44c3d0);}
.gf-ver-comp-seg--policy{background:var(--gf-brand-purple,#c778b2);}
.gf-ver-comp-seg--tracked{background:var(--gf-neutral-300,#d1d5db);}
.gf-ver-comp-seg--pending{background:var(--gf-brand-yellow,#fbb85b);}
.gf-ver-comp-legend{display:flex;flex-wrap:wrap;gap:.3rem 1rem;margin-top:.4rem;}
.gf-ver-comp-item{display:flex;align-items:center;gap:.3rem;font-size:.74rem;color:var(--gf-neutral-700,#4a5563);}
.gf-ver-comp-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}

/* Ops — volunteer list compact row */
.gf-vol-row{display:flex;align-items:center;gap:.65rem;padding:.55rem .75rem;border-radius:8px;background:#fff;border:1px solid var(--gf-neutral-200,#e5e7eb);}
.gf-vol-row:hover{background:var(--gf-neutral-50,#f8fafc);}
.gf-vol-row-avatar{width:32px;height:32px;border-radius:50%;background:var(--gf-brand-midnight,#27203f);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:700;flex-shrink:0;}
.gf-vol-row-name{flex:1;font-size:.87rem;font-weight:600;color:var(--gf-neutral-900,#1b1f24);}
.gf-vol-row-meta{font-size:.74rem;color:var(--gf-neutral-500,#8898aa);}
.gf-vol-row-stat{font-size:.84rem;font-weight:700;color:var(--gf-neutral-900,#1b1f24);}
.gf-vol-list{display:flex;flex-direction:column;gap:.4rem;}

/* Print overrides */
/* ── Org admin header (reuses vol-dash-header chrome) ──────────────────────── */
.gf-org-header-name{
font-size:.75rem;
font-weight:800;
letter-spacing:.06em;
text-transform:uppercase;
color:var(--gf-neutral-600);
flex:1;
text-align:center;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
padding:0 .5rem;
}
/* Org admin nav: left-justify sections (not centered like volunteer) */
.gf-header.gf-vol-dash-header .gf-vol-dash-header-sections{
justify-content:flex-start;
}
/* Range select (toolbar) */
.gf-range-select-wrap{display:inline-flex;align-items:center;gap:.45rem;}
.gf-range-select-wrap label{font-size:.74rem;font-weight:700;color:var(--gf-neutral-600);white-space:nowrap;}
.gf-range-select{font-size:.74rem;font-weight:600;padding:.3rem .55rem;border:1.5px solid var(--gf-neutral-200);border-radius:8px;background:#fff;color:var(--gf-neutral-800);cursor:pointer;}

/* ── Print: profile sections appended to report ─────────────────────────── */
.gf-print-profile-section{border-top:1.5px solid var(--gf-neutral-200);margin-top:1.25rem;padding-top:1rem}
.gf-print-section-head{font-size:.9rem;font-weight:800;color:#27203f;letter-spacing:.03em;text-transform:uppercase;margin:0 0 .65rem}
.gf-print-artifact{padding:.5rem 0;border-bottom:1px solid var(--gf-neutral-100)}
.gf-print-artifact:last-child{border-bottom:none}
@media print{.gf-print-profile-section[style*="display:block"],.gf-print-profile-section[style*="display: block"]{display:block!important}}

/* ── Service story editor ────────────────────────────────────────────────── */
.gf-service-story-editor{background:linear-gradient(135deg,#27203f 0%,#3d2d58 100%);border-radius:14px;padding:1.25rem 1.4rem;color:#fff;margin-bottom:1rem}
.gf-service-story-label{font-size:.7rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.55);margin:0 0 .3rem}
.gf-service-story-title{font-size:1.05rem;font-weight:700;color:#fff;margin:0 0 .5rem}
.gf-service-story-desc{font-size:.82rem;color:rgba(255,255,255,.7);margin:0 0 .8rem;line-height:1.55}
.gf-service-story-textarea{width:100%;min-height:110px;padding:.65rem .85rem;border:1.5px solid rgba(255,255,255,.2);border-radius:8px;background:rgba(255,255,255,.09);color:#fff;font-family:Montserrat,system-ui,sans-serif;font-size:.88rem;line-height:1.65;resize:vertical;box-sizing:border-box}
.gf-service-story-textarea::placeholder{color:rgba(255,255,255,.38)}
.gf-service-story-textarea:focus{outline:none;border-color:#44c3d0}
.gf-service-story-actions{display:flex;align-items:center;gap:.65rem;margin-top:.65rem;flex-wrap:wrap}
.gf-service-story-save{padding:.38rem .9rem;border-radius:8px;border:none;background:#44c3d0;color:#fff;font-weight:700;font-size:.82rem;cursor:pointer;transition:opacity .15s}
.gf-service-story-save:hover{opacity:.88}
.gf-service-story-save:disabled{opacity:.55;cursor:not-allowed}
.gf-service-story-status{font-size:.78rem;color:rgba(255,255,255,.7);margin-left:.1rem}
.gf-service-story-badge{display:inline-flex;align-items:center;gap:.3rem;font-size:.72rem;font-weight:700;color:#44c3d0;background:rgba(68,195,208,.15);border:1px solid rgba(68,195,208,.35);border-radius:999px;padding:.12rem .5rem;margin-bottom:.5rem}

/* ── Profile readiness widget ─────────────────────────────────────────────── */
.gf-readiness-card{background:#fff;border-radius:12px;border:1.5px solid var(--gf-neutral-200);padding:.9rem 1.1rem}
.gf-readiness-label{font-size:.67rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--gf-neutral-600);margin:0 0 .55rem}
.gf-readiness-list{display:flex;flex-direction:column;gap:.38rem}
.gf-readiness-item{display:flex;align-items:center;gap:.5rem;font-size:.82rem}
.gf-readiness-dot{width:17px;height:17px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.65rem;font-weight:700;line-height:1}
.gf-readiness-dot--done{background:#44c3d0;color:#fff}
.gf-readiness-dot--todo{background:var(--gf-neutral-200);color:var(--gf-neutral-400)}
.gf-readiness-item-text{color:var(--gf-neutral-700)}
.gf-readiness-item a{color:#44c3d0;font-weight:700;margin-left:.2rem;font-size:.75rem}
.gf-readiness-bar-track{height:5px;border-radius:999px;background:var(--gf-neutral-200);margin-top:.65rem;overflow:hidden}
.gf-readiness-bar-fill{height:100%;border-radius:999px;background:#44c3d0;transition:width .4s}
.gf-readiness-pct{font-size:.72rem;font-weight:700;color:#44c3d0;margin-top:.3rem}

/* ── Bebas Neue display numbers (volunteer identity) ─────────────────────── */
.gf-display-num{font-family:'Bebas Neue',Impact,system-ui,sans-serif;letter-spacing:.04em;line-height:1}
.gf-hero-number.gf-display-num{letter-spacing:.02em}

@media print{
.gf-vol-dash-header,.gf-toolbar-actions,.gf-ctx-bar,.gf-recent-details summary,.gf-btn,.gf-shell-meta-bar,.gf-page-tab-row{display:none!important;}
.gf-impact-hero,.gf-exec-header,.gf-hero-immersive{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
.gf-card{page-break-inside:avoid;box-shadow:none;border:1px solid #ddd;}
}

/* ── Org Activity Table ──────────────────────────────────────────────────── */
.gf-act-table{width:100%;border-collapse:collapse;font-size:.82rem}
.gf-act-table th{background:#27203f;color:#fff;padding:.5rem .7rem;text-align:left;font-size:.72rem;font-weight:700;letter-spacing:.04em;white-space:nowrap}
.gf-act-table td{padding:.5rem .7rem;border-bottom:1px solid var(--gf-neutral-100);vertical-align:middle}
.gf-act-table tr:hover td{background:var(--gf-neutral-50)}
.gf-act-table .gf-act-hours{font-weight:700;color:#44c3d0}
.gf-act-table-wrap{overflow-x:auto;border-radius:8px;border:1px solid var(--gf-neutral-200)}

/* ── Volunteer Groups ────────────────────────────────────────────────────── */
.gf-group-card{border:1.5px solid var(--gf-neutral-200);border-radius:10px;padding:.75rem 1rem;display:flex;align-items:center;gap:.75rem;margin-bottom:.5rem}
.gf-group-card-name{font-weight:700;font-size:.9rem;color:#27203f}
.gf-group-card-count{font-size:.78rem;color:var(--gf-neutral-500)}
.gf-group-badge{display:inline-block;padding:.1rem .38rem;border-radius:999px;background:#27203f;color:#fff;font-size:.62rem;font-weight:700;margin:.05rem}

/* ── Media Grid ─────────────────────────────────────────────────────────── */
.gf-media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem}
.gf-media-card{border:1.5px solid var(--gf-neutral-200);border-radius:10px;overflow:hidden;background:#fff}
.gf-media-card-body{padding:.65rem .8rem}
.gf-media-card-title{font-weight:700;font-size:.82rem;color:#27203f;margin-bottom:.25rem}
.gf-media-card-meta{font-size:.72rem;color:var(--gf-neutral-500)}
.gf-media-evidence-link{display:inline-block;padding:.2rem .5rem;background:var(--gf-brand-teal-50,#ecfeff);color:var(--gf-accent-teal-700,#0e7490);border-radius:6px;font-size:.72rem;font-weight:700;text-decoration:none;margin:.15rem .1rem 0 0}

/* ── Activity Filters & Status Tabs ─────────────────────────────────────── */
.gf-act-filters{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;padding:.65rem .9rem;background:#f8f8fb;border-radius:10px;border:1.5px solid var(--gf-neutral-200);margin-bottom:.85rem}
.gf-act-filters input,.gf-act-filters select{padding:.3rem .55rem;border:1.5px solid var(--gf-neutral-200);border-radius:6px;font-size:.8rem;background:#fff}
.gf-act-status-tabs{display:flex;gap:.3rem;margin-bottom:.6rem;flex-wrap:wrap}
.gf-act-status-tab{padding:.28rem .7rem;border-radius:999px;border:1.5px solid var(--gf-neutral-200);font-size:.75rem;font-weight:700;background:#fff;color:var(--gf-neutral-600);cursor:pointer;text-decoration:none}
.gf-act-status-tab.is-active{background:#27203f;color:#fff;border-color:#27203f}

/* ── Opportunities — upcoming highlight ──────────────────────────────────── */
.gf-opp-card--upcoming{border-left:3px solid #fbb85b !important;}

/* ── Settings org grid ───────────────────────────────────────────────────── */
.gf-settings-org-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:1rem;margin-bottom:1rem}

/* ── Queue table row hover ────────────────────────────────────────────────── */
#queueTable tbody tr:hover{background:rgba(68,195,208,.04)}
#queueTable tbody tr{border-bottom:1px solid var(--gf-neutral-100)}

/* ── Programs — Goal card accent ──────────────────────────────────────────── */
.gf-prog-card--goal{border-left:3px solid #fbb85b !important;}

/* ── Queue filter select ──────────────────────────────────────────────────── */
.gf-queue-filter-select{padding:.3rem .55rem;border:1.5px solid var(--gf-neutral-200);border-radius:6px;font-size:.8rem;background:#fff;cursor:pointer}

/* ── Org login standalone page ────────────────────────────────────────────── */
/* (styles embedded directly in auth-routes HTML; no additional CSS needed) */

/* ── Opportunity shifts ───────────────────────────────────────────────────── */
.gf-shift-row{padding:.75rem 0;border-bottom:1px solid var(--gf-neutral-100)}
.gf-shift-row:last-child{border-bottom:none}
.gf-shift-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem;margin-bottom:.25rem}
.gf-shift-name{font-weight:600;font-size:.9rem;margin-right:.5rem}
.gf-shift-time{font-size:.82rem}
.gf-shift-cap-label{font-size:.8rem;color:var(--gf-neutral-600);margin:.35rem 0 .25rem}
.gf-shift-cap-bar-wrap{height:6px;background:var(--gf-neutral-100);border-radius:3px;overflow:hidden;margin-bottom:.4rem}
.gf-shift-cap-bar-fill{height:100%;background:#44c3d0;border-radius:3px;transition:width .3s}
.gf-shift-vol-list{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.4rem}
.gf-shift-vol-chip{font-size:.75rem;background:rgba(68,195,208,.1);color:#1a8070;border-radius:4px;padding:.15rem .45rem;font-weight:500}
.gf-shift-row--mine{background:rgba(68,195,208,.04);border-radius:6px;padding:.75rem .6rem;margin:0 -.6rem}
.gf-shift-cap-bar-fill--full{background:#e53e3e}
.gf-shift-full-badge{font-size:.72rem;background:#fed7d7;color:#c53030;border-radius:4px;padding:.15rem .45rem;font-weight:600;white-space:nowrap}

/* ── Opportunity calendar grid ────────────────────────────────────────────── */
.gf-cal-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:.85rem}
.gf-cal-month-label{font-weight:700;font-size:1.05rem;color:var(--gf-neutral-900)}
.gf-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.gf-cal-day-header{font-size:.72rem;font-weight:600;color:var(--gf-neutral-500);text-align:center;padding:.3rem 0;background:var(--gf-neutral-50);border-radius:4px}
.gf-cal-cell{min-height:80px;padding:.35rem .4rem;border:1px solid var(--gf-neutral-100);border-radius:4px;background:#fff;display:flex;flex-direction:column;gap:.2rem}
.gf-cal-cell--empty{background:var(--gf-neutral-50);border-color:transparent}
.gf-cal-cell--today{border-color:#44c3d0;background:rgba(68,195,208,.04)}
.gf-cal-cell--has-opps{background:#fafffe}
.gf-cal-day-num{font-size:.75rem;font-weight:600;color:var(--gf-neutral-700);line-height:1}
.gf-cal-cell--today .gf-cal-day-num{color:#44c3d0}
.gf-cal-chips{display:flex;flex-direction:column;gap:.15rem;overflow:hidden}
.gf-cal-opp-chip{font-size:.68rem;font-weight:500;color:#fff;border-radius:3px;padding:.1rem .35rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none;line-height:1.4}
.gf-cal-opp-chip:hover{opacity:.85;text-decoration:none}

/* ── Goal cards (org admin) ──────────────────────────────────────────────── */
.gf-goal-card-admin{background:#fff;border:1.5px solid var(--gf-neutral-100);border-radius:12px;padding:1rem 1.1rem;transition:box-shadow .15s}
.gf-goal-card-admin:hover{box-shadow:0 4px 16px rgba(39,32,63,.08)}
.gf-goal-card-admin--risk{border-color:#fed7d7;background:#fffafa}
.gf-goal-card-admin--done{border-color:rgba(68,195,208,.35);background:rgba(68,195,208,.03)}
.gf-goal-card-admin-header{display:flex;align-items:flex-start;gap:.75rem}
.gf-goal-card-admin-name{font-size:.93rem;font-weight:700;color:var(--gf-neutral-900);display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}
.gf-goal-card-admin-meta{font-size:.78rem;color:var(--gf-neutral-500);margin-top:.2rem}
.gf-goal-card-admin-pct{font-size:1.4rem;font-weight:800;color:var(--gf-neutral-700);white-space:nowrap;line-height:1}
.gf-goal-card-admin-pct--done{color:#44c3d0}
.gf-goal-card-admin-pct--risk{color:#e53e3e}
.gf-goal-card-admin-stats{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.4rem}
.gf-goal-stat-chip{font-size:.74rem;padding:.18rem .52rem;border-radius:999px;background:var(--gf-neutral-50);border:1px solid var(--gf-neutral-100);color:var(--gf-neutral-700);font-weight:600}
.gf-goal-pending-badge{font-size:.72rem;padding:.18rem .52rem;border-radius:999px;background:#fef3c7;border:1px solid #fde68a;color:#92400e;font-weight:700}
.gf-goal-badge{font-size:.68rem;font-weight:700;padding:.1rem .42rem;border-radius:4px}
.gf-goal-badge--overdue{background:#fed7d7;color:#c53030}
.gf-goal-badge--risk{background:#fef3c7;color:#92400e}
.gf-goal-badge--done{background:rgba(68,195,208,.15);color:#1a8070}
.gf-goal-progress-track{height:6px;border-radius:999px;background:var(--gf-neutral-100);overflow:hidden}
.gf-goal-progress-fill{height:100%;border-radius:999px;transition:width .4s}

/* ── ⌘K navigation search modal ─────────────────────────────────────────── */
.gf-search-trigger{display:flex;align-items:center;gap:.35rem;padding:.28rem .65rem;border-radius:6px;border:1.5px solid rgba(255,255,255,.25);background:rgba(255,255,255,.08);color:#fff;cursor:pointer;font-size:.75rem;font-weight:600;letter-spacing:.04em;transition:background .15s}
.gf-search-trigger:hover{background:rgba(255,255,255,.15)}
.gf-search-trigger-icon{font-family:inherit;font-size:.72rem;opacity:.9}
.gf-search-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:9998;backdrop-filter:blur(2px)}
.gf-search-modal{position:fixed;top:15vh;left:50%;transform:translateX(-50%);width:min(560px,90vw);background:#fff;border-radius:12px;box-shadow:0 24px 64px rgba(0,0,0,.18),0 4px 12px rgba(0,0,0,.1);z-index:9999;overflow:hidden}
.gf-search-input-wrap{display:flex;align-items:center;gap:.65rem;padding:.85rem 1rem;border-bottom:1px solid var(--gf-neutral-100)}
.gf-search-icon{font-size:1rem;flex-shrink:0;opacity:.55}
.gf-search-input{flex:1;border:none;outline:none;font-size:1rem;color:var(--gf-neutral-900);background:transparent}
.gf-search-input::placeholder{color:var(--gf-neutral-400)}
.gf-search-esc{font-size:.68rem;color:var(--gf-neutral-400);background:var(--gf-neutral-100);border-radius:4px;padding:.15rem .4rem;font-family:inherit;flex-shrink:0}
.gf-search-results{list-style:none;margin:0;padding:.4rem 0;max-height:320px;overflow-y:auto}
.gf-search-result-item{display:flex;align-items:center;justify-content:space-between;padding:.6rem 1rem;cursor:pointer;font-size:.9rem;font-weight:500;color:var(--gf-neutral-900);gap:.5rem;transition:background .1s}
.gf-search-result-item:hover,.gf-search-result-item--active{background:rgba(68,195,208,.09);color:#27203f}
.gf-search-result-path{font-size:.75rem;color:var(--gf-neutral-400);font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px}

/* ── Goal detail page ────────────────────────────────────────────────────── */
.gf-goal-detail-header{display:flex;align-items:flex-start;gap:1rem;padding:1rem 1.1rem;background:#fff;border:1.5px solid var(--gf-neutral-100);border-radius:12px;margin-bottom:.85rem}
.gf-goal-assign-chip{display:inline-flex;align-items:center;padding:.15rem .5rem;border-radius:999px;font-size:.72rem;font-weight:600;background:rgba(251,184,91,.15);color:#b8620e;border:1px solid rgba(251,184,91,.4);white-space:nowrap}
.gf-goal-scope-badge{display:inline-flex;align-items:center;padding:.15rem .5rem;border-radius:999px;font-size:.72rem;font-weight:700;background:var(--gf-brand-midnight-50);color:#27203f;border:1px solid var(--gf-brand-midnight-100)}

/* ── Volunteer goal cards ─────────────────────────────────────────────────── */
.gf-vol-goal-card{background:#fff;border:1.5px solid var(--gf-neutral-100);border-radius:12px;padding:.9rem 1rem;display:flex;align-items:flex-start;gap:.85rem;transition:box-shadow .15s}
.gf-vol-goal-card:hover{box-shadow:0 4px 14px rgba(39,32,63,.07)}
.gf-vol-goal-card--risk{border-color:#fed7d7;background:#fffafa}
.gf-vol-goal-card--done{border-color:rgba(68,195,208,.35);background:rgba(68,195,208,.03)}
.gf-vol-goal-progress{flex-shrink:0}
.gf-vol-goal-meta{flex:1;min-width:0}
.gf-vol-goal-name{font-size:.9rem;font-weight:700;color:#27203f;margin:0 0 .2rem}
.gf-vol-goal-due{font-size:.76rem;color:var(--gf-neutral-500);margin:0 0 .3rem}
.gf-vol-goal-stats{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.35rem}

/* ── Requirement checklist chips ─────────────────────────────────────────── */
.gf-req-banner {
  background: rgba(251,184,91,.08);
  border: 1.5px solid rgba(251,184,91,.3);
  border-radius: 10px;
  padding: .6rem .85rem;
  margin-bottom: .75rem;
  font-size: .82rem;
  color: #8a5a0a;
}
.gf-req-chips {
  display: flex;
  flex-wrap: wrap;
  gap: .35rem;
  margin-top: .4rem;
}
.gf-req-chip {
  display: flex;
  align-items: center;
  gap: .3rem;
  font-size: .78rem;
  font-weight: 600;
  padding: .2rem .55rem;
  border-radius: 6px;
}
.gf-req-chip--needed {
  background: rgba(251,184,91,.18);
  color: #8a5a0a;
  border: 1px solid rgba(251,184,91,.4);
}
.gf-req-chip--done {
  background: rgba(68,195,208,.12);
  color: #1a8070;
  border: 1px solid rgba(68,195,208,.3);
}
.gf-req-icon {
  font-size: .85em;
}

/* ── Shift attendance management ────────────────────────────────────────────── */
.gf-attend-card {
  background: #fff;
  border: 1.5px solid var(--gf-neutral-200);
  border-radius: 12px;
  padding: .85rem 1rem;
  transition: box-shadow .15s;
}
.gf-attend-card:hover { box-shadow: 0 2px 12px rgba(0,0,0,.07); }
.gf-attend-card--attended { border-color: rgba(68,195,208,.4); background: rgba(68,195,208,.03); }
.gf-attend-card--no_show { border-color: rgba(229,62,62,.25); background: rgba(229,62,62,.02); }
.gf-attend-card--checked_in { border-color: rgba(251,184,91,.4); background: rgba(251,184,91,.04); }
.gf-attend-card--excused { border-color: rgba(199,120,178,.3); background: rgba(199,120,178,.03); }

.gf-attend-card-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: .5rem;
  margin-bottom: .6rem;
}
.gf-attend-email { font-size: .85rem; font-weight: 700; color: var(--gf-neutral-900); }
.gf-attend-sub { font-size: .72rem; color: var(--gf-neutral-500); margin-top: .1rem; }

.gf-attend-badge {
  font-size: .68rem;
  font-weight: 700;
  padding: .2rem .55rem;
  border-radius: 999px;
  white-space: nowrap;
  flex-shrink: 0;
}
.gf-attend-badge--registered { background: var(--gf-neutral-100); color: var(--gf-neutral-600); }
.gf-attend-badge--checked_in { background: rgba(251,184,91,.2); color: #8a5a0a; }
.gf-attend-badge--attended { background: rgba(68,195,208,.15); color: #1a8070; }
.gf-attend-badge--no_show { background: rgba(229,62,62,.12); color: #c53030; }
.gf-attend-badge--excused { background: rgba(199,120,178,.15); color: #7a3d6e; }

.gf-attend-actions {
  display: flex;
  flex-wrap: wrap;
  gap: .3rem;
}
.gf-attend-action-btn {
  font-size: .72rem;
  font-weight: 600;
  padding: .2rem .55rem;
  border-radius: 6px;
  border: 1.5px solid var(--gf-neutral-200);
  background: #fff;
  cursor: pointer;
  transition: background .1s, border-color .1s;
}
.gf-attend-action-btn:hover { background: var(--gf-neutral-50); border-color: var(--gf-neutral-300); }
.gf-attend-action-btn--checkin:hover { background: rgba(251,184,91,.15); border-color: rgba(251,184,91,.4); }
.gf-attend-action-btn--attended:hover { background: rgba(68,195,208,.12); border-color: rgba(68,195,208,.35); }
.gf-attend-action-btn--noshow:hover { background: rgba(229,62,62,.08); border-color: rgba(229,62,62,.3); color: #c53030; }
.gf-attend-action-btn--excused:hover { background: rgba(199,120,178,.1); border-color: rgba(199,120,178,.3); }
.gf-attend-action-btn--reset:hover { background: var(--gf-neutral-100); }
.gf-attend-action-btn:disabled { opacity: .45; cursor: not-allowed; }

.gf-attend-bulk-bar {
  position: sticky;
  top: 0;
  z-index: 20;
  background: linear-gradient(90deg, #27203f, #3d2d58);
  color: #fff;
  border-radius: 10px;
  padding: .6rem 1rem;
  margin-bottom: .85rem;
  display: flex;
  align-items: center;
  gap: .75rem;
  flex-wrap: wrap;
  box-shadow: 0 4px 16px rgba(39,32,63,.25);
}
.gf-attend-bulk-title { font-size: .82rem; font-weight: 700; margin-right: .25rem; }

/* Shift attendance summary chips (in opportunity detail) */
.gf-shift-attend-summary { display: flex; flex-wrap: wrap; gap: .3rem; margin-top: .35rem; }
.gf-shift-attend-chip {
  font-size: .67rem; font-weight: 700;
  padding: .1rem .4rem; border-radius: 999px;
}
.gf-shift-attend-chip--attended { background: rgba(68,195,208,.15); color: #1a8070; }
.gf-shift-attend-chip--checkin { background: rgba(251,184,91,.2); color: #8a5a0a; }
.gf-shift-attend-chip--noshow { background: rgba(229,62,62,.1); color: #c53030; }
.gf-shift-vol-chip--attended { background: rgba(68,195,208,.15); color: #1a8070; border-color: rgba(68,195,208,.3); }
.gf-shift-vol-chip--checked { background: rgba(251,184,91,.2); color: #8a5a0a; }
.gf-shift-vol-chip--noshow { background: rgba(229,62,62,.1); color: #c53030; text-decoration: line-through; }
.gf-shift-understaffed { font-size: .67rem; font-weight: 700; color: #8a5a0a; background: rgba(251,184,91,.2); padding: .1rem .4rem; border-radius: 4px; margin-left: .4rem; }

/* ── Opportunity setup flow ───────────────────────────────────────────────── */
.gf-opp-setup-section {
  border: 1.5px solid var(--gf-neutral-200);
}
.gf-opp-setup-section-head {
  display: flex;
  align-items: center;
  gap: .6rem;
  font-size: .9rem;
  font-weight: 800;
  color: var(--gf-neutral-800);
  margin-bottom: .85rem;
  padding-bottom: .65rem;
  border-bottom: 1px solid var(--gf-neutral-100);
  text-transform: uppercase;
  letter-spacing: .04em;
}
.gf-opp-setup-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: #44c3d0;
  color: #fff;
  font-size: .75rem;
  font-weight: 800;
  flex-shrink: 0;
}
.gf-shift-build-row {
  display: flex;
  gap: .5rem;
  align-items: flex-end;
  flex-wrap: wrap;
  padding: .65rem .75rem;
  background: rgba(68,195,208,.04);
  border: 1px solid rgba(68,195,208,.2);
  border-radius: 8px;
}

/* ── Opportunity detail: image hero ─────────────────────────────────────── */
.gf-opp-detail-hero--image {
  background-size: cover;
  background-position: center;
  position: relative;
  padding: 0;
  min-height: 220px;
  display: flex;
  align-items: flex-end;
}
.gf-opp-detail-hero-overlay {
  background: linear-gradient(to top, rgba(15,10,30,.88) 0%, rgba(15,10,30,.35) 100%);
  border-radius: 14px;
  width: 100%;
  padding: 1.75rem 2rem 1.5rem;
  color: #fff;
}

/* ── Opportunity enrichment info blocks ─────────────────────────────────── */
.gf-opp-info-grid { display: flex; flex-direction: column; gap: .85rem; }
.gf-opp-info-block { display: flex; gap: .75rem; align-items: flex-start; }
.gf-opp-info-block-icon { font-size: 1.1rem; flex-shrink: 0; margin-top: .05rem; }
.gf-opp-info-block-label { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .07em; color: var(--gf-neutral-500); margin: 0 0 .12rem; }
.gf-opp-info-block-text { font-size: .87rem; color: var(--gf-neutral-700); margin: 0; line-height: 1.5; white-space: pre-wrap; }

/* ── Shift row enhancements ─────────────────────────────────────────────── */
.gf-shift-row-header { display: flex; align-items: flex-start; justify-content: space-between; gap: .5rem; }
.gf-shift-mine-badge { display: inline-block; margin-left: .5rem; font-size: .73rem; color: #15803d; font-weight: 700; background: #dcfce7; border-radius: 999px; padding: .1rem .45rem; vertical-align: middle; }
.gf-shift-cap-label { font-size: .8rem; color: var(--gf-neutral-600); margin: .35rem 0 .15rem; }

/* ── Volunteer roster ───────────────────────────────────────────────────── */
.gf-shift-roster { display: flex; flex-wrap: wrap; gap: .3rem .4rem; margin: .45rem 0 .3rem; }
.gf-shift-roster-chip { display: inline-block; font-size: .73rem; font-weight: 600; color: var(--gf-neutral-600); background: var(--gf-neutral-50); border: 1px solid var(--gf-neutral-200); border-radius: 999px; padding: .15rem .55rem; }
.gf-shift-roster-chip--me { color: #0f766e; background: rgba(68,195,208,.12); border-color: rgba(68,195,208,.35); }
.gf-shift-roster-count { font-size: .78rem; color: var(--gf-neutral-500); margin: .3rem 0 .15rem; font-style: italic; }

/* ── Consent banner ─────────────────────────────────────────────────────── */
.gf-consent-banner { display: flex; align-items: flex-start; gap: .75rem; background: rgba(245,158,11,.08); border: 1.5px solid rgba(245,158,11,.35); border-radius: 10px; padding: .75rem 1rem; margin-bottom: 1rem; }
.gf-consent-banner-icon { font-size: 1.2rem; flex-shrink: 0; }
.gf-consent-banner-title { font-size: .88rem; font-weight: 700; color: #92400e; margin: 0 0 .15rem; }
.gf-consent-banner-body  { font-size: .8rem; color: #78350f; margin: 0; }
.gf-consent-banner--accepted { background: rgba(68,195,208,.08); border-color: rgba(68,195,208,.3); }
.gf-consent-banner--accepted .gf-consent-banner-title { color: #0f766e; }
.gf-consent-banner--accepted .gf-consent-banner-body  { color: #134e4a; }

/* ── Consent modal ──────────────────────────────────────────────────────── */
.gf-consent-modal-backdrop { position: fixed; inset: 0; background: rgba(15,10,30,.55); z-index: 1200; display: flex; align-items: center; justify-content: center; padding: 1rem; }
.gf-consent-modal { background: #fff; border-radius: 14px; padding: 1.75rem; max-width: 520px; width: 100%; box-shadow: 0 24px 64px rgba(15,10,30,.22); }
.gf-consent-modal-title { font-size: 1.05rem; font-weight: 800; color: var(--gf-brand-midnight); margin: 0 0 .5rem; }
.gf-consent-modal-body  { font-size: .85rem; color: var(--gf-neutral-600); margin: 0 0 1rem; white-space: pre-wrap; max-height: 220px; overflow-y: auto; }
.gf-consent-modal-field { margin-bottom: .75rem; }
.gf-consent-modal-field label { display: block; font-size: .78rem; font-weight: 700; color: var(--gf-neutral-600); margin-bottom: .25rem; }
.gf-consent-modal-field input[type="text"] { width: 100%; box-sizing: border-box; }
.gf-consent-modal-agree { display: flex; align-items: flex-start; gap: .5rem; font-size: .83rem; color: var(--gf-neutral-700); margin-bottom: 1.1rem; cursor: pointer; }
.gf-consent-modal-agree input { margin-top: .2rem; accent-color: #44c3d0; flex-shrink: 0; }
.gf-consent-modal-actions { display: flex; gap: .65rem; align-items: center; }

/* ── Consent status chips (org participant list) ────────────────────────── */
.gf-consent-status-chip { display: inline-flex; align-items: center; gap: .3rem; font-size: .7rem; font-weight: 700; border-radius: 999px; padding: .15rem .55rem; line-height: 1.4; }
.gf-consent-status-chip--accepted  { background: rgba(68,195,208,.13); color: #0f766e; border: 1px solid rgba(68,195,208,.3); }
.gf-consent-status-chip--missing   { background: rgba(239,68,68,.08); color: #b91c1c; border: 1px solid rgba(239,68,68,.25); }
.gf-consent-status-chip--reconsent { background: rgba(245,158,11,.10); color: #92400e; border: 1px solid rgba(245,158,11,.3); }
.gf-consent-status-chip--declined  { background: rgba(239,68,68,.08); color: #b91c1c; border: 1px solid rgba(239,68,68,.25); }

/* ── Consent banner additional variants ─────────────────────────────────── */
.gf-consent-banner--reconsent { background: rgba(245,158,11,.08); border-color: rgba(245,158,11,.35); }
.gf-consent-banner--reconsent .gf-consent-banner-title { color: #92400e; }
.gf-consent-banner--reconsent .gf-consent-banner-body  { color: #78350f; }
.gf-consent-banner--declined  { background: rgba(239,68,68,.07); border-color: rgba(239,68,68,.25); }
.gf-consent-banner--declined .gf-consent-banner-title  { color: #b91c1c; }
.gf-consent-banner--declined .gf-consent-banner-body   { color: #991b1b; }

/* ── My Impact: journey chips (Reached / Next / Streak) share one size ──── */
.gf-journey-chips{display:flex;gap:.65rem;flex-wrap:wrap;align-items:stretch;}
.gf-journey-chip{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.1rem;min-width:7.25rem;min-height:4.6rem;padding:.5rem .85rem;border-radius:10px;text-align:center;box-sizing:border-box;}
.gf-journey-chip-eyebrow{font-size:.65rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;line-height:1.2;}
.gf-journey-chip-value{font-size:1rem;font-weight:900;line-height:1.2;}
.gf-journey-chip-sub{font-size:.7rem;font-weight:600;opacity:.85;line-height:1.2;}

/* ── Review queue: per-row action feedback (visible next to the buttons) ── */
.gf-queue-row-status{margin:.4rem 0 0;font-size:.78rem;line-height:1.35;padding:.35rem .55rem;border-radius:6px;display:none;}
.gf-queue-row-status.is-ok{display:block;background:#f0fdf4;color:#166534;border:1px solid #bbf7d0;}
.gf-queue-row-status.is-error{display:block;background:#fff5f5;color:#c53030;border:1px solid #fecaca;font-weight:600;}
.review-notes.is-invalid{border-color:#c53030!important;box-shadow:0 0 0 3px rgba(197,48,48,.15);}

/* ── Volunteer picker (shared: group cards, create-group modal, group detail) ── */
.gf-vp{width:100%;min-width:0;box-sizing:border-box;}
.gf-vp-heading{font-size:.74rem;font-weight:700;color:var(--gf-neutral-600);margin:0 0 .35rem;text-transform:uppercase;letter-spacing:.05em;}
.gf-vp-tools{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-bottom:.4rem;}
.gf-vp-search{flex:1 1 160px;min-width:0;padding:.32rem .55rem;border:1.5px solid var(--gf-neutral-200);border-radius:6px;font-size:.82rem;}
.gf-vp-all-label{font-size:.78rem;font-weight:600;white-space:nowrap;display:inline-flex;align-items:center;gap:.3rem;cursor:pointer;}
.gf-vp-count{font-size:.76rem;color:var(--gf-neutral-500);white-space:nowrap;}
.gf-vp-list{max-height:180px;overflow-y:auto;overflow-x:hidden;border:1.5px solid var(--gf-neutral-200);border-radius:8px;background:#fff;}
.gf-vp-row{display:grid;grid-template-columns:auto minmax(0,1fr) minmax(0,auto);align-items:center;column-gap:.55rem;padding:.35rem .6rem;border-bottom:1px solid var(--gf-neutral-100);cursor:pointer;font-size:.84rem;color:var(--gf-neutral-900);}
.gf-vp-row:last-child{border-bottom:0;}
.gf-vp-row:hover{background:var(--gf-neutral-50);}
.gf-vp-row input{margin:0;accent-color:#44c3d0;}
.gf-vp-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.gf-vp-email{font-size:.76rem;color:var(--gf-neutral-500);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:22rem;}
@media (max-width:640px){.gf-vp-row{grid-template-columns:auto minmax(0,1fr);} .gf-vp-email{grid-column:2;max-width:none;}}
.gf-vp-empty{margin:0;padding:.6rem .7rem;font-size:.82rem;color:var(--gf-neutral-500);}
/* A group card is a flex row; anything that must span the full card (the picker) wraps to its own line. */
.gf-group-card{flex-wrap:wrap;}
.gf-group-card-picker{flex:1 1 100%;width:100%;min-width:0;}

/* ── Org Activities: compact filter row under the status tabs ─────────────── */
.gf-act-filters--compact{display:block;padding:.5rem .7rem;margin-bottom:.6rem;}
.gf-act-filters-row{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;}
.gf-act-filters--compact .gf-filter-select-sm{height:2rem;box-sizing:border-box;}
.gf-act-more-filters{margin-top:.35rem;font-size:.78rem;}
.gf-act-more-filters>summary{cursor:pointer;color:var(--gf-neutral-600);font-weight:600;list-style:none;display:inline-flex;align-items:center;gap:.3rem;}
.gf-act-more-filters>summary::before{content:"▸";font-size:.7rem;}
.gf-act-more-filters[open]>summary::before{content:"▾";}
.gf-act-summary>summary{list-style:none;}

/* ── Narrow-width closeout (2026-09-14) ──────────────────────────────────────
   Measured on live staging at 320 and 375 CSS px; causes and screenshots in
   docs/launch/2026-09-14-narrow-width-docket.md. Placed last on purpose: several
   of the defects were earlier narrow-screen rules silently overridden by later
   rules of the same specificity. Pinned by tests/narrow-width-layout.test.ts. */

/* Buttons. At <=768 every .gf-main button is width:100%; without border-box
   the padding and border were added on top, so a full-width link ran past its
   card, and the canonical nowrap kept long labels from wrapping. */
.gf-main .gf-btn{box-sizing:border-box;max-width:100%;}
@media (max-width:768px){
  .gf-main .gf-btn{white-space:normal;overflow-wrap:break-word;text-align:center;}
}

/* Settings grids. A track's minimum must never exceed the screen, and grid
   items must be allowed to shrink below their longest word (an email address
   set the volunteer column to 339px on a 320px screen). word-break:break-word
   is the WebKit fallback for overflow-wrap:anywhere before Safari 15.4. */
.gf-settings-org-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,340px),1fr));}
.gf-settings-grid > *,.gf-settings-org-grid > *{min-width:0;}
.gf-settings-value{min-width:0;word-break:break-word;overflow-wrap:anywhere;}
@media (max-width:768px){
  .gf-settings-grid{grid-template-columns:minmax(0,1fr);}
}

/* Notifications popover. The <=560 viewport anchoring earlier in this file was
   overridden by the later canonical rule (width:310px; position:absolute), so
   on phones and tablets — where the stacked header puts the bell on the left —
   the open popover ran 255px off the left edge. Anchored to the viewport up to
   the same 768px breakpoint at which the header stacks. */
@media (max-width:768px){
  .gf-notif-pop{position:fixed;left:.5rem;right:.5rem;top:4.25rem;width:auto;max-width:none;max-height:70vh;overflow-y:auto;}
}

/* Activity cards. The hours/status/actions column never shrank and its
   full-width buttons claimed most of a phone screen, leaving the text one word
   wide under the buttons. On phones the column moves below the text, the
   buttons size to their labels at a comfortable tap height, and the title wraps
   instead of being cut off. */
@media (max-width:560px){
  .gf-act-card{flex-wrap:wrap;}
  .gf-act-card-body{flex:1 1 0;min-width:0;}
  .gf-act-card-title{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:break-word;}
  .gf-act-card-right{flex:1 1 100%;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.4rem .75rem;padding-left:calc(3px + .75rem);}
  .gf-main .gf-act-card-right .gf-btn{width:auto;min-height:2.25rem;}
}

/* Profile header. The volunteer's email is one unbreakable word; as a flex
   item it set the header's minimum width past a 320px screen. */
.gf-md-hero-identity,.gf-md-hero-text,.gf-md-hero-stats{min-width:0;max-width:100%;}
.gf-md-hero-email,.gf-md-hero-name{word-break:break-word;overflow-wrap:anywhere;}

/* Profile entry actions (Edit / Feature / Visibility / Delete). A no-wrap row
   of full-width buttons pushed Delete past a 320px screen. */
.gf-artifact-actions{flex-wrap:wrap;}
@media (max-width:768px){
  .gf-main .gf-artifact-actions .gf-btn{width:auto;flex:1 1 auto;min-height:2.25rem;}
}

/* Profile privacy panel. The share button was full width and unshrinkable in
   the same flex row as the explanation. The row now wraps: the text keeps a
   readable measure and the button drops beneath it when there is no room. */
.gf-profile-privacy-panel{flex-wrap:wrap;}
.gf-profile-privacy-panel-text{flex:1 1 12rem;}
.gf-profile-privacy-panel > .gf-btn{flex:0 0 auto;white-space:nowrap;}
@media (max-width:768px){
  .gf-main .gf-profile-privacy-panel > .gf-btn{flex:1 1 100%;white-space:normal;}
}

/* Volunteer settings menu (gear: Profile, Identity, Requests, Settings, Logout).
   The menu was a dropdown anchored by its RIGHT edge to the gear
   (position:absolute; right:0). At <=768 the stacked header puts the gear about
   107px from the left, so the 173px menu started 30px left of the screen and
   every label was clipped (founder, Chrome for Android, 2026-09-14).
   On narrow screens it is a full-width sheet fixed to the viewport, directly
   under the header:
   - position:fixed with left:0/right:0 — no negative offsets, no transforms,
     no 100vw — so it starts at the physical left edge whatever the page does;
   - the header's backdrop-filter is dropped at <=768 (its background is made
     opaque instead): a filter makes the header the containing block of fixed
     descendants, and a header carried sideways by a wide page would carry the
     sheet with it;
   - the gear script sets top/max-height from the header's measured bottom;
     top:auto (its static position under the gear) is the no-script fallback;
   - safe-area insets pad the sheet, never move it.
   Pinned by tests/mobile-settings-menu.test.ts. */
@media (max-width:768px){
  .gf-header.gf-site-header--light.gf-vol-dash-header{-webkit-backdrop-filter:none;backdrop-filter:none;background:#fff;}
  .gf-vol-settings-menu{position:static;}
  .gf-vol-settings-pop{
    position:fixed;left:0;right:0;top:auto;
    width:auto;min-width:0;max-width:none;box-sizing:border-box;
    margin:0;border-radius:0 0 12px 12px;border-left:0;border-right:0;
    padding:.5rem max(.75rem,env(safe-area-inset-right)) max(.75rem,env(safe-area-inset-bottom)) max(.75rem,env(safe-area-inset-left));
    max-height:calc(100vh - 7rem);max-height:calc(100dvh - 7rem);
    overflow-y:auto;overscroll-behavior:contain;
    z-index:60;
  }
  .gf-vol-settings-pop a{
    display:flex;align-items:center;box-sizing:border-box;min-height:2.75rem;
    padding:.55rem .75rem;font-size:.95rem;
    white-space:normal;overflow-wrap:anywhere;word-break:break-word;
  }
}

/* Page tabs (Activities / Goals / Archived). A no-wrap row widened the page
   once text was enlarged (200% text scaling). */
.gf-page-tab-row{flex-wrap:wrap;}
