/* Density scale: --f-sp-1..4 (4/8/12/16px) space labels, rows and groups; --f-sp-5..7 grow with the viewport for blocks, sections and columns. Hints and small labels use --f-fs-hint (13px). */
/* Scope: this file also loads on dashboard.html and the hub pages, so every selector starts with an f- class (only FIIU markup carries them) or sits under .f-page / .f-news-widget. No bare element, *, or :root selectors. */
.f-page,.f-news-widget{--f-forest:#3d5c38;--f-forest-deep:#2a4426;--f-leaf:#59bc53;--f-pale:#dcebd6;--f-panel:#f2f6ef;--f-ink:#20291e;--f-muted:#586253;--f-line:#d5dfce;--f-ok-bg:#e4f1e1;--f-ok:#2a4426;--f-amber-bg:#fff3d6;--f-amber:#6b4a00;--f-grey-bg:#eef0ec;--f-grey:#4a5446;--f-error:#862b13;--f-error-bg:#fff1e9;--f-focus:#286998;--f-header:101px;--f-gutter:clamp(20px,4vw,56px);--f-pad:30px;--f-sp-1:4px;--f-sp-2:8px;--f-sp-3:12px;--f-sp-4:16px;--f-sp-5:clamp(18px,1.6vw,24px);--f-sp-6:clamp(20px,2.4vw,36px);--f-sp-7:clamp(32px,4vw,60px);--f-fs-hint:.8125rem;color:var(--f-ink)}
.f-page{background:#fff;margin:0}
/* Short pages (a check-in outcome, organisers only) keep the footer at the bottom of the screen instead of mid-screen; long pages are unchanged. */
.f-page{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}.f-page>.f-shell{flex:1 0 auto}
/* Event typography stays in the content; the header uses the shared site styles. */
.f-shell,.f-footer{line-height:1.6}
.f-page *{box-sizing:border-box}.f-page [hidden],.f-news-widget [hidden]{display:none!important}.f-shell a,.f-footer a,.f-skip{color:var(--f-forest)}.f-footer a{color:#fff}.f-shell button,.f-shell input,.f-shell select,.f-shell textarea{font:inherit}.f-shell .f-button,.f-news-widget .f-button{font-weight:700;line-height:1.3}.f-shell :focus-visible,.f-footer :focus-visible,.f-skip:focus-visible,.f-news-widget :focus-visible{outline:3px solid var(--f-focus);outline-offset:4px}.f-page h1,.f-page h2,.f-page h3,.f-page h4{line-height:1.15;letter-spacing:-.025em}.f-page h1{font-size:clamp(2.5rem,5vw,5rem);font-weight:750;max-width:11ch;margin:.2em 0 .45em}.f-page h2{font-size:clamp(1.65rem,2.5vw,2.3rem);margin:0 0 1rem}.f-page h3{font-size:1.15rem}.f-page h1,.f-page h2{overflow-wrap:anywhere;hyphens:auto}.f-page :is(h1,h2),.f-day-head .f-date{text-wrap:balance}.f-page p{max-width:70ch}.f-sr-only{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
/* The navbar is sticky and in flow, so the shell needs no top padding; its gutter matches the header's. */
.f-shell{width:auto;max-width:none;margin:0;padding:0 var(--f-gutter) calc(2*var(--f-sp-5))}.f-shell>#fiiuStatus:not(:empty){margin:20px 0 0}.f-skip{position:fixed;left:20px;top:-100px;z-index:1000;background:#fff;padding:12px}.f-skip:focus{top:12px}
/* The sticky header (and the day or step nav under it) must never hide the focused control. */
html:has(>body.f-page){scroll-padding-top:176px}.f-page :where(section,footer)[id]{scroll-margin-top:0}
/* Inside the form the sticky step bar and the sticky save bar also cover the page. fiiu.js keeps --f-steps-h and --f-bar-h at their measured heights (the fallbacks cover the tallest layouts).
   Every focusable in the form, the step links and Back included, keeps clear of the save bar; those below the step bar keep clear of it too. The html scroll-padding already clears the header plus 75px, hence -59px. The save button itself sits in the bar. */
.f-page .f-stepped>fieldset,.f-page :is(.f-stepped fieldset,.f-form-feedback) :is(input,select,textarea,button,a,summary,[tabindex]){scroll-margin-top:max(0px,calc(var(--f-steps-h,116px) - 59px))}
.f-page .f-form :is(input,select,textarea,button,a,summary,[tabindex]){scroll-margin-bottom:calc(var(--f-bar-h,120px) + 16px)}.f-page .f-form .f-submit-bar>.f-button{scroll-margin-bottom:0}
/* Links inside the sticky day, section and step bars sit within the scroll-padding band while stuck; a negative top margin keeps the browser from scrolling the page to "reveal" them. */
.f-shell :is(.f-day-chip,.f-admin-nav a,.f-steps .f-step){scroll-margin-top:-72px}.f-shell :is(.f-day-chip,.f-admin-nav a){scroll-margin-bottom:24px}
.f-actions{display:flex;gap:var(--f-sp-3);flex-wrap:wrap;align-items:center;margin:var(--f-sp-5) 0 0}.f-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--f-leaf);color:var(--f-ink)!important;border:2px solid var(--f-ink);border-radius:7px;padding:11px 22px;font:inherit;font-weight:700;text-decoration:none;cursor:pointer;line-height:1.3;min-height:46px;box-shadow:4px 4px 0 var(--f-ink);transition:transform .22s cubic-bezier(.34,1.56,.64,1),box-shadow .22s cubic-bezier(.34,1.56,.64,1),background-color .2s ease,color .2s ease}.f-button:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--f-ink)}.f-button:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--f-ink);transition-duration:.08s}.f-button:disabled{opacity:.5;cursor:wait;transform:none;box-shadow:none}.f-button.secondary{background:#fff;color:var(--f-forest)!important;border-color:var(--f-forest);box-shadow:none}.f-button.secondary:hover{background:var(--f-forest);color:#fff!important;box-shadow:6px 6px 0 rgba(61,92,56,.25)}.f-button.secondary:active{box-shadow:1px 1px 0 rgba(61,92,56,.25)}.f-page :is(.f-button.f-small,.f-admin-head-side .f-button){min-height:42px;padding:8px 16px;font-size:.88rem}.f-text-link{text-underline-offset:4px;font-weight:600;color:#3d5c38}:is(.f-page,.f-news-widget) .f-text-link{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}:is(.f-page,.f-news-widget) .f-text-link:hover{text-decoration-thickness:2px}.f-muted{color:var(--f-muted);font-size:.9rem}.f-date{font-size:.91rem;font-weight:650;text-transform:none;display:block;margin:0 0 14px}.f-page summary{cursor:pointer;font-weight:600;padding:10px 0}
:is(.f-page,.f-news-widget) .f-pill{display:inline-flex;align-items:center;gap:5px;font-size:.82rem;font-weight:600;line-height:1.3;color:var(--f-grey);white-space:nowrap;text-decoration:none}:is(.f-page,.f-news-widget) .f-pill:is(.is-ok,.is-accepted,.is-published){color:var(--f-ok)}:is(.f-page,.f-news-widget) .f-pill:is(.is-pending,.is-accepted,.is-declined){min-height:24px;padding:2px 10px;border-radius:999px;background:var(--f-grey-bg)}:is(.f-page,.f-news-widget) .f-pill.is-accepted{background:var(--f-ok-bg)}:is(.f-page,.f-news-widget) .f-pill:is(.is-ok,.is-accepted)::before{content:"✓";content:"✓"/""}:is(.f-page,.f-news-widget) .f-pill.is-pending{background:var(--f-amber-bg);color:var(--f-amber)}:is(.f-page,.f-news-widget) .f-pill.is-open{color:var(--f-forest)}:is(.f-page,.f-news-widget) .f-pill.is-open::before{content:"●";content:"●"/"";color:var(--f-leaf);font-size:.8em}:is(.f-page,.f-news-widget) .f-chip{display:inline-block;font-size:.7rem;font-weight:650;letter-spacing:.1em;text-transform:uppercase;color:var(--f-forest);line-height:1.4;white-space:nowrap}#news .f-news-meta .f-chip{display:none}:is(.f-page,.f-news-widget) .f-count{display:inline-flex;gap:.3em;align-items:baseline}:is(.f-page,.f-news-widget) .f-count>b{font-weight:700;font-variant-numeric:tabular-nums}:is(.f-page,.f-news-widget) a[target="_blank"]:is(.f-text-link,.f-button)::after{content:"↗";content:"↗"/"";font-weight:500}:is(.f-page,.f-news-widget) a[target="_blank"].f-text-link::after{margin-left:.2em}
.f-notice{padding:15px;background:#e6eddf}.f-notice.is-warning{background:var(--f-amber-bg);color:var(--f-amber);border-radius:6px;padding:12px 14px}.f-notice.is-ok{background:var(--f-ok-bg);color:var(--f-ok);border-radius:6px;padding:12px 14px}.f-status{font-size:.92rem}.f-status:empty{display:none}.f-status.is-error{background:var(--f-error-bg);color:var(--f-error);padding:12px;border:1px solid #deb097;border-radius:6px}.f-conflict{margin:15px 0}.f-conflict:empty{display:none}.f-admin-link{display:inline-block;margin:20px 0 0}.f-festival-name{font-size:1.4rem!important;font-weight:650;letter-spacing:-.02em}
/* Hero: state-aware copy with a key-facts row, a static graticule band and the date poster. */
.f-hero{position:relative;isolation:isolate;display:grid;grid-template-columns:minmax(0,1fr) clamp(360px,34vw,600px);gap:var(--f-sp-5) var(--f-sp-7);align-items:stretch;padding:var(--f-sp-6) 0;border-bottom:1px solid #cbd6c7}.f-hero-copy{min-width:0}.f-page .f-hero-title{max-width:14ch;margin:0 0 .2em}.f-kicker{display:flex;flex-wrap:wrap;align-items:center;gap:.2em .7em;margin:0 0 var(--f-sp-3);font-size:.8rem;font-weight:600;letter-spacing:.16em;line-height:1.4;text-transform:uppercase;color:var(--f-forest)}.f-kicker>span:not(:last-child)::after{content:"·";content:"·"/"";margin-left:.7em}.f-hero-theme{display:block}.f-hero-intro{font-size:1.06rem;margin:var(--f-sp-3) 0 0}.f-hero .content-language{padding:0;border:0;border-radius:0;background:none;color:var(--f-muted);font-size:.74rem;font-weight:650;letter-spacing:.12em;text-transform:uppercase}.f-news-widget .content-language{padding:0;border:0;border-radius:0;background:none;color:var(--f-muted);font-size:.8rem;font-weight:600;letter-spacing:normal;text-transform:none}
.f-hero-meta,.f-hero-counts,.f-hero-status{margin:0;line-height:1.5}.f-hero-meta>*,.f-hero-counts>*,.f-hero-status>*{white-space:nowrap}.f-hero-meta>*{display:inline-block}.f-hero-meta{margin:var(--f-sp-4) 0 0;font-weight:650}.f-hero-counts{margin:var(--f-sp-1) 0 0;font-size:.92rem;color:var(--f-muted)}.f-hero-meta>:not(:last-child)::after,.f-hero-counts>:not(:last-child)::after,.f-hero-status>:not(:last-child,.is-pending,.is-accepted,.is-declined)::after{content:"·";content:"·"/"";margin:0 .55em;color:var(--f-muted);font-weight:400}.f-hero-status>:is(.is-pending,.is-accepted,.is-declined)+*{margin-left:.55em}.f-hero-meta>.is-open{color:var(--f-forest)}.f-hero-status{margin:var(--f-sp-3) 0 0;font-size:.9rem}
.f-date-panel{background:var(--f-pale);border-radius:80px 8px 8px 8px;padding:var(--f-sp-6);display:flex;flex-direction:column;justify-content:center;gap:var(--f-sp-4);min-width:0}.f-date-range{display:flex;align-items:center;gap:.13em;white-space:nowrap;font-size:clamp(3rem,6.2vw,6.5rem);line-height:1;font-weight:650;letter-spacing:-.07em}.f-date-separator{font-size:.55em;font-weight:400;letter-spacing:0}.f-date-month{margin:10px 0 0;font-size:1rem;font-weight:650;letter-spacing:.14em;text-transform:uppercase}.f-city{margin:4px 0 0;font-size:clamp(1.3rem,2vw,1.8rem);font-weight:700;letter-spacing:-.02em}.f-next{padding-top:var(--f-sp-3)}.f-next-label{margin:0;font-size:.72rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--f-forest)}.f-next-when{display:flex;flex-wrap:wrap;gap:4px 10px;margin:4px 0 2px;font-weight:650;font-variant-numeric:tabular-nums}.f-next-title{margin:0;font-weight:600}.f-next-venue{margin:2px 0 0;color:var(--f-muted);line-height:1.4}
.f-shell .f-latest{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:baseline;margin:var(--f-sp-3) 0 0;color:var(--f-ink);text-decoration:none}.f-latest-label{font-size:.72rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--f-forest)}.f-latest-title{font-weight:600;text-decoration:underline;text-underline-offset:3px}.f-latest:hover .f-latest-title{text-decoration-thickness:2px}
/* Layout: DOM order equals reading order at every width (programme, then registration). */
.f-layout{display:grid;grid-template-columns:minmax(0,1fr) clamp(360px,34vw,600px);gap:var(--f-sp-6) var(--f-sp-7);align-items:start;padding-top:var(--f-sp-5)}.f-programme{min-width:0}.f-layout>.f-updates-grid{grid-column:1/-1}.f-registration{container:f-panel/inline-size;--f-pad:0px;min-width:0}.f-page .f-registration>h2,.f-page[data-page="fiiu-admin"] .f-shell h2{font-size:clamp(1.45rem,2vw,1.8rem)}.f-registration>h2:focus{outline:none}.f-registration>h2:focus-visible{outline:3px solid var(--f-focus);outline-offset:4px}.f-registration>.f-notice:is(.is-ok,.is-warning):not(:empty){margin:0 0 16px}.f-notice-email{overflow-wrap:anywhere}
/* Programme: sticky day navigation, then one section per day with lab, conference cards and compact external groups. */
.f-page .f-section-head h2{margin:0 0 var(--f-sp-2)}.f-page .f-section-head p{margin:0;max-width:92ch}.f-day-nav{position:sticky;top:var(--f-header);z-index:5;margin:var(--f-sp-3) 0 0;padding:var(--f-sp-2) 0 0;background:#fff;border-bottom:1px solid var(--f-line)}.f-day-chips{display:flex;gap:16px;margin:-8px;padding:8px;list-style:none;overflow-x:auto;scroll-padding-inline:8px;scrollbar-width:thin}.f-shell .f-day-chip{display:grid;grid-template-columns:auto auto;align-items:baseline;justify-content:start;column-gap:6px;min-height:44px;padding:6px 4px;color:var(--f-ink);text-decoration:none;white-space:nowrap}.f-shell .f-day-chip:hover{box-shadow:inset 0 -2px 0 var(--f-line)}.f-day-chip-weekday{font-size:var(--f-fs-hint);font-weight:600;color:var(--f-muted)}.f-day-chip-num{font-size:1.35rem;font-weight:750;line-height:1.1;font-variant-numeric:tabular-nums}.f-shell .f-day-chip[aria-current="true"]{box-shadow:inset 0 -2px 0 var(--f-ink)}.f-day-chip[aria-current="true"] .f-day-chip-weekday{color:var(--f-ink)}
/* Days carry no rule: the heading and the space above it mark the break, so the sticky nav hairline is the only line in the programme column. A day-chip jump lands the day's top on the stuck nav's bottom edge, leaving the heading one day padding under it: the html scroll-padding-top is the header plus 75px (176px, 162px on phones) and the stuck day nav ends 53px under the header, hence -23px. */
.f-day{margin:0;padding:var(--f-sp-4) 0 var(--f-sp-3)}.f-page .f-day{scroll-margin-top:-23px}.f-day-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:6px 16px;margin:0 0 var(--f-sp-2)}.f-day-head .f-date{margin:0;font-size:clamp(1.35rem,2vw,1.7rem);font-weight:750;letter-spacing:-.02em}.f-day-blocks{display:grid}
.f-activity{margin:0;min-width:0}.f-activity h4{font-size:1.15rem;margin:0 0 var(--f-sp-1);line-height:1.35}.f-activity.is-conference{display:grid;grid-template-columns:128px minmax(0,1fr);grid-template-areas:"rail title" "rail body";column-gap:20px;align-content:start;padding:var(--f-sp-3) 0}.f-activity.is-conference>h4{grid-area:title}.f-time-rail{grid-area:rail}.f-activity-body{grid-area:body;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:0 16px}.f-activity-body>.f-venue{flex:1 1 14rem;margin:0}.f-activity-body>.f-activity-foot{flex:1 1 auto}.f-activity-body>.f-activity-foot:has(>details[open]){flex-basis:100%}.f-time-rail .f-time{margin:0;font-size:1.05rem;font-weight:700;font-variant-numeric:tabular-nums}.f-time-rail .f-muted{margin:0}.f-period{margin:4px 0 0;font-weight:650;color:var(--f-forest);font-size:var(--f-fs-hint)}.f-venue{margin:0 0 .4rem;font-size:.9rem;color:var(--f-muted)}.f-activity-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 16px}.f-activity-foot>.f-sessions[open]{flex-basis:100%}.f-activity-foot>:only-child:not(details){margin-left:auto}.f-sessions summary{padding:6px 0;font-size:.88rem}.f-session-list{margin:4px 0 8px;padding-left:18px;font-size:.9rem}.f-session-list li{margin:6px 0}.f-session-time{font-variant-numeric:tabular-nums;font-weight:600;margin-right:.6em}
.f-activity.is-lab{padding:var(--f-sp-3) 0}.f-activity.is-lab h4{margin:0 0 4px}.f-activity.is-lab>.f-pill{margin:0}.f-activity.is-lab>.f-lab-type{margin:0 0 var(--f-sp-2);font-size:var(--f-fs-hint);font-weight:650;color:var(--f-forest)}.f-type-group{padding:var(--f-sp-3) 0 var(--f-sp-1)}.f-type-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:0 0 var(--f-sp-1)}.f-type-head h4{margin:0;font-size:1rem}.f-type-note{font-size:.84rem;color:var(--f-muted)}.f-type-note::before{content:"·";content:"·"/"";margin-right:10px}.f-compact-list{list-style:none;margin:0;padding:0}.f-compact{display:flex;flex-wrap:wrap;gap:0 16px;align-items:center;margin:0;padding:var(--f-sp-2) 0}.f-compact-main{flex:1 1 21rem;min-width:0}.f-page .f-compact-title{max-width:none;margin:0;font-weight:600;font-size:.93rem;line-height:1.4}.f-compact-venue{margin:2px 0 0;font-size:.84rem;line-height:1.4;color:var(--f-muted)}.f-venue-label{font-weight:600}.f-compact-actions{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center}.f-programme :is(.f-compact-actions,.f-activity-foot) .f-text-link{font-size:.88rem;white-space:nowrap}.f-programme .f-button.secondary.f-small{min-height:36px;padding:6px 0;border-color:transparent;background:none;box-shadow:none;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}.f-programme .f-button.secondary.f-small:hover{background:none;color:var(--f-forest)!important;box-shadow:none;transform:none;text-decoration-thickness:2px}.f-page .f-button.secondary.is-added{text-decoration:none}.f-page .f-button.is-added::before{content:"✓";content:"✓"/""}
.f-party{margin:0;padding:var(--f-sp-4) 0 0}.f-party h3{margin:0 0 6px;font-size:1.25rem}.f-party .f-muted{margin:0}.f-party .f-button{margin-top:var(--f-sp-3)}
/* Conversation links (fiiu-ui.js talkLink) on programme cards, itinerary rows and the dashboard widget: a small inline link behind a speech bubble drawn in CSS. A card foot holding one
   packs to the start instead of spreading three items across the card, an itinerary row keeps it to its text, and on touch screens the target is 44px tall. */
:is(.f-page,.f-news-widget) .f-talk-link{display:inline-flex;align-items:center;gap:.4em;max-width:100%}:is(.f-page,.f-news-widget) .f-talk-link::before{content:"";flex:none;width:.95em;height:.72em;border:1.5px solid currentColor;border-radius:.3em .3em .3em 0}.f-activity-foot:has(>.f-talk-link){justify-content:flex-start}.f-activity-foot>.f-talk-link:only-child{margin-left:0}.f-itinerary-row>.f-talk-link{justify-self:start}
@media(pointer:coarse){:is(.f-page,.f-news-widget) .f-talk-link{min-height:44px}}
/* Registration panel: guest checklist, numbered steps with sticky progress, and a sticky save bar. */
.f-checklist{display:grid;gap:var(--f-sp-2);margin:var(--f-sp-3) 0;padding:0;list-style:none}.f-checklist li{display:flex;gap:10px;align-items:flex-start}.f-checklist li::before{content:"—";content:"—"/"";color:var(--f-muted)}.f-guest-privacy{margin:16px 0 0}.f-closed-hint{margin:var(--f-sp-3) 0 var(--f-sp-4)}
.f-form fieldset{border:0;padding:var(--f-sp-4) 0 0;margin:var(--f-sp-4) 0;min-width:0}.f-form fieldset fieldset{padding:var(--f-sp-1) 0 0;margin:var(--f-sp-2) 0}.f-stepped>fieldset+fieldset{margin-top:var(--f-sp-5)}.f-form legend{font-size:1.08rem;font-weight:700;padding:0}.f-stepped>fieldset>legend{display:flex;align-items:baseline;gap:8px;font-size:1.15rem}.f-form-intro{margin:0 0 12px}.f-form fieldset>.f-muted,.f-laboratory>.f-muted{margin:0 0 var(--f-sp-3)}.f-back{margin:0 0 16px}
.f-steps{position:sticky;top:var(--f-header);z-index:4;margin:0 0 8px;padding:12px 0 0;background:#fff;border-bottom:1px solid var(--f-line)}.f-steps ol{display:flex;gap:0 20px;margin:-8px;padding:8px;list-style:none;overflow-x:auto;scroll-padding-inline:8px;scrollbar-width:thin}.f-steps li{display:flex}.f-shell .f-step{display:inline-flex;align-items:center;gap:6px;min-height:40px;padding:4px 0;color:var(--f-muted);font-size:.8rem;font-weight:600;line-height:1.25;text-decoration:none;white-space:nowrap}.f-shell .f-step:hover{color:var(--f-ink)}.f-shell .f-step[aria-current="step"]{color:var(--f-ink);font-weight:700;box-shadow:inset 0 -2px 0 var(--f-ink)}.f-step.is-done::after{content:"✓";content:"✓"/"";color:var(--f-forest);font-weight:700}
.f-submit-bar{position:sticky;bottom:0;z-index:4;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--f-sp-1) var(--f-sp-4);margin:var(--f-sp-4) 0 0;padding:var(--f-sp-3) 0;background:#fff;border-top:1px solid #aab6a4}.f-submit-bar>.f-button{justify-self:end}.f-selection{display:flex;flex-wrap:wrap;gap:0 10px;margin:0;font-size:var(--f-fs-hint);line-height:1.35}.f-selection.is-error{align-items:center;color:var(--f-error);font-weight:650}.f-selection.is-error::before{content:"!";content:"!"/"";display:inline-grid;place-items:center;flex-shrink:0;width:18px;height:18px;margin-right:-4px;border-radius:50%;background:var(--f-error);color:#fff;font-size:.75rem;font-weight:800}.f-form-feedback>.f-status[data-fiiu-text="reviewErrors"]{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}.f-selection>:not(:last-child)::after{content:"·";content:"·"/"";margin-left:10px;color:var(--f-muted)}.f-form-feedback>.f-status:not(:empty){margin:16px 0 0}
.f-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,max(140px,calc(50% - 8px))),1fr));gap:0 var(--f-sp-4);align-items:start}@supports selector(:has(*)){.f-fields>.f-field{display:grid;grid-template-rows:subgrid;grid-row:span 4;align-content:start}.f-fields>.f-field>span:first-child{align-self:end;text-wrap:balance}.f-fields>.f-field>.f-required{display:none!important}.f-fields>.f-field:has(>.f-required:not([hidden]))>span:first-child::after{content:" *";content:" *"/"";color:var(--f-error);font-weight:700}}.f-field{display:block;font-size:.84rem;font-weight:550;line-height:1.5;min-width:0;margin:0 0 var(--f-sp-3)}.f-field-wide{grid-column:1/-1}.f-field input,.f-field select,.f-field textarea{display:block;width:100%;margin-top:var(--f-sp-1);border:1px solid #6e7a69;background:white;border-radius:6px;padding:11px 12px;min-height:45px;color:#20291e;font-weight:400;font-size:.92rem}.f-field input:read-only{background:none;border-color:transparent;padding-inline:0;font-weight:600}.f-form .f-field:has(>input[readonly]){display:flex;flex-wrap:wrap;align-items:baseline;gap:0 var(--f-sp-3)}.f-form .f-field:has(>input[readonly])>input{flex:1 1 12rem;width:auto;min-width:0;min-height:0;margin:0;padding-block:var(--f-sp-1)}.f-field textarea{min-height:90px;resize:vertical}.f-required{color:var(--f-error);font-weight:700}.f-hint{display:block;margin-top:var(--f-sp-1);font-size:var(--f-fs-hint);font-weight:400;color:var(--f-muted)}.f-field [aria-invalid="true"]{border-color:var(--f-error);box-shadow:inset 0 0 0 1px var(--f-error)}.f-page :is(.f-check,.f-activity-choice) input[aria-invalid="true"]:not(:focus-visible){outline:2px solid var(--f-error);outline-offset:2px}
.f-error{display:flex;align-items:flex-start;gap:6px;margin-top:var(--f-sp-1);font-size:var(--f-fs-hint);font-weight:600;line-height:1.4;color:var(--f-error)}.f-error::before{content:"!";content:"!"/"";display:inline-grid;place-items:center;flex-shrink:0;width:16px;height:16px;margin-top:1px;border-radius:50%;background:var(--f-error);color:#fff;font-size:.7rem;font-weight:800}.f-page :is(.f-check,.f-activity-choice):has(>.f-error){flex-wrap:wrap}.f-page :is(.f-check,.f-activity-choice):has(>.f-error)>:not(input,.f-error){flex:1 1 0;min-width:0}.f-page .f-check>.f-error{flex-basis:100%;margin:0 0 0 29px}.f-page .f-activity-choice>.f-error{flex-basis:100%;margin:0 0 0 31px}
.f-check{display:flex;align-items:flex-start;gap:10px;font-size:.87rem;margin:var(--f-sp-3) 0;cursor:pointer}.f-check input,.f-activity-choice input{width:19px;height:19px;accent-color:#3d5c38;flex-shrink:0;margin-top:3px}.f-activity-choice{display:flex;align-items:flex-start;gap:12px;padding:var(--f-sp-2) 0;margin:0;cursor:pointer;font-size:.86rem}.f-activity-choice:has(input:checked) .f-choice-title{font-weight:600}.f-choice-text{display:flex;flex-wrap:wrap;gap:2px 8px;min-width:0}.f-choice-title{flex-basis:100%}.f-choice-day{font-size:var(--f-fs-hint);font-weight:650;color:var(--f-muted)}.f-choice-time{font-weight:600;font-variant-numeric:tabular-nums}.f-choice-title{overflow-wrap:anywhere}.f-laboratory{margin:var(--f-sp-2) 0 var(--f-sp-4);padding:var(--f-sp-3) var(--f-sp-4);border-radius:6px;background:#fff}
.f-external-box{margin:var(--f-sp-4) 0 0}.f-external-box>summary{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;min-height:48px;padding:10px 0;font-size:.95rem;list-style:none}.f-external-box>summary::-webkit-details-marker{display:none}.f-external-box>summary::after{content:"+";content:"+"/"";margin-left:0;font-size:1.3rem;font-weight:500;line-height:1;color:var(--f-forest)}.f-external-box[open]>summary::after{content:"−";content:"−"/""}.f-external-count:empty{display:none}.f-form .f-external-box>fieldset{margin:0;padding:0 0 12px;border:0}.f-external-day{margin:var(--f-sp-4) 0 0}.f-form .f-external-day-label{margin:0 0 4px;padding:0;font-size:.9rem;font-weight:700}.f-external-choice{padding:2px 0 10px;margin-bottom:4px}.f-external-choice .f-check{font-weight:550;line-height:1.45;margin:8px 0 4px}.f-external-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin:0 0 0 29px;font-size:.82rem}
.f-questionnaire>.f-fields{margin-top:8px}.f-access>legend{font-size:.94rem;font-weight:650}.f-access-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}.f-access-grid>.f-check:first-child{grid-column:1/-1;padding-bottom:var(--f-sp-3)}.f-access-grid .f-check{min-height:40px;align-items:center;margin:0}
/* Saved state: a chronological "your programme" itinerary. */
.f-saved{container-type:inline-size}.f-saved:focus{outline:none}.f-saved:focus-visible{outline:3px solid var(--f-focus);outline-offset:4px}.f-saved-head h3{font-size:1.3rem;margin:0}.f-saved-who{margin:.2rem 0 0;color:var(--f-muted);font-size:.9rem;overflow-wrap:anywhere}.f-saved>.f-notice{margin:var(--f-sp-3) 0 0}.f-saved h4{margin:var(--f-sp-4) 0 0;font-size:1rem}.f-saved>h4+.f-muted{margin:var(--f-sp-1) 0 0;font-size:.84rem}.f-itinerary{list-style:none;margin:var(--f-sp-2) 0 var(--f-sp-3);padding:0}.f-itinerary-row{display:grid;grid-template-columns:118px minmax(0,1fr) auto;gap:4px 12px;align-items:start;padding:var(--f-sp-2) 0}.f-itinerary-when{display:grid;font-size:var(--f-fs-hint);font-weight:650}.f-itinerary-time{font-weight:500;color:var(--f-muted);font-variant-numeric:tabular-nums}.f-itinerary-title{font-size:.92rem;line-height:1.4;overflow-wrap:anywhere}.f-itinerary-row>:is(.f-itinerary-note,.f-itinerary-venue,.f-text-link){grid-column:2/-1;margin:0;font-size:.84rem}.f-itinerary-venue{line-height:1.4;color:var(--f-muted)}.f-saved .f-actions{margin-top:var(--f-sp-4)}
/* Badges are plain rows with a forest check, separated by space, not rules or boxed cards. */
.f-badges{margin-top:var(--f-sp-4)}.f-page .f-badge,.f-news-widget .f-badge{margin:0;padding:var(--f-sp-2) 0;font-size:.88rem;font-weight:600;line-height:1.4;color:var(--f-ok)}
/* News and materials, footer. */
.f-updates{padding:45px 0;border-top:1px solid #cbd6c7;margin-top:45px}.f-updates-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--f-sp-7);padding-top:var(--f-sp-6);border-top:1px solid #cbd6c7}.f-updates-grid .f-updates{margin:0;padding:0;border:0;min-width:0}.f-news{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.f-updates-grid .f-news{grid-template-columns:1fr;gap:0}.f-news-item{padding:var(--f-sp-4) 0;overflow-wrap:anywhere}.f-news-item :is(h3,h4){margin:0 0 var(--f-sp-2);font-size:1.1rem}.f-news-item p{white-space:pre-line;margin:8px 0;font-size:.9rem}.f-news-item .f-news-meta{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin:0 0 var(--f-sp-1);font-size:var(--f-fs-hint);color:var(--f-muted);white-space:normal}.f-updates-grid .f-news-item:first-child{padding-top:0}.f-empty{padding:18px;border:1px dashed var(--f-line);border-radius:8px}.f-load-more{margin-top:var(--f-sp-4)}
.f-footer{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:var(--f-sp-4) var(--f-sp-5);padding:var(--f-sp-5) var(--f-gutter);background:var(--f-forest);color:#fff;font-size:.88rem;line-height:1.6;border-top:0}.f-footer p{margin:0}.f-footer :focus-visible{outline-color:#fff}.f-footer-title{margin:0 0 6px;font-weight:700}.f-footer-main{display:grid;gap:2px}.f-footer-legal{display:flex;flex-wrap:wrap;gap:12px 20px;width:100%;padding-top:var(--f-sp-3)}.f-footer .socials a{color:#fff}.f-footer :is(.f-footer-main,.f-footer-legal) a[target="_blank"]::after,.f-footer>a[target="_blank"]::after{content:"↗";content:"↗"/"";margin-left:.2em}
/* Organiser dashboard: head, sticky section nav and a toast for page feedback. */
.f-page[data-page="fiiu-admin"] #fiiuAdminRoot{max-width:1760px}
/* The organiser dashboard and the check-in screen cap their sheet; past the cap the whole shell (status line included) is centred, so no band is left empty on one side. */
.f-page:is([data-page="fiiu-admin"],[data-page="fiiu-qr"]) .f-shell{width:100%;max-width:calc(1760px + 2*var(--f-gutter));margin-inline:auto}
.f-admin-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:var(--f-sp-2) 32px;padding:var(--f-sp-4) 0 var(--f-sp-3)}.f-admin-title{min-width:0}.f-page .f-admin-head h1{font-size:clamp(1.6rem,2.6vw,2.25rem);line-height:1.1;max-width:none;margin:0}.f-admin-sub{display:flex;flex-wrap:wrap;gap:2px 10px;margin:4px 0 0;color:var(--f-muted);font-weight:600;line-height:1.4}.f-admin-sub>:not(:last-child)::after{content:"·";content:"·"/"";margin-left:10px}
.f-admin-head-side{display:grid;justify-items:end;gap:var(--f-sp-1);min-width:0}.f-admin-head-side .f-actions{margin:0;gap:12px 20px;justify-content:flex-end}.f-export-note{margin:0;font-size:var(--f-fs-hint);line-height:1.4;max-width:52ch;text-align:right}.f-pill-host{display:flex}
.f-admin-nav{position:sticky;top:var(--f-header);z-index:5;padding:6px 0;background:#fff;border-bottom:1px solid var(--f-line)}.f-admin-nav ul{display:flex;gap:6px;margin:-8px;padding:8px;list-style:none;overflow-x:auto;scroll-snap-type:x proximity;scroll-padding-inline:8px;scrollbar-width:none}.f-shell .f-admin-nav a{display:inline-flex;align-items:center;min-height:40px;padding:6px 4px;margin-right:12px;color:var(--f-ink);font-size:.88rem;font-weight:600;text-decoration:none;white-space:nowrap;scroll-snap-align:start}.f-shell .f-admin-nav a:hover{box-shadow:inset 0 -2px 0 var(--f-line)}.f-shell .f-admin-nav a[aria-current="true"]{box-shadow:inset 0 -3px 0 var(--f-ink)}
/* Once the dashboard has rendered, #fiiuStatus floats at the bottom of the viewport; while loading or on an outage it stays in the flow. */
.f-page[data-page="fiiu-admin"] #fiiuStatus:not(:empty):has(+#fiiuAdminRoot>.f-admin-head){position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:40;width:max-content;max-width:min(560px,calc(100vw - 32px));margin:0;padding:12px 18px;border-radius:8px;background:var(--f-ink);color:#fff;box-shadow:0 8px 24px rgba(32,41,30,.25)}.f-page[data-page="fiiu-admin"] #fiiuStatus.is-error:not(:empty):has(+#fiiuAdminRoot>.f-admin-head){background:var(--f-error-bg);color:var(--f-error);border:1px solid #deb097}.f-page[data-page="fiiu-admin"] #fiiuStatus.is-error .f-text-link{color:inherit}
.f-admin-summary{padding:var(--f-sp-3) 0 var(--f-sp-1)}.f-admin-participants,.f-admin-settings,.f-admin-content{padding:var(--f-sp-5) 0 var(--f-sp-2)}.f-admin-participants,.f-admin-settings,.f-admin-content{margin-top:var(--f-sp-4);border-top:1px solid #cbd6c7}.f-page .f-admin-content h2,.f-page .f-admin-settings h2,.f-page .f-admin-participants h2{margin-bottom:var(--f-sp-3)}
/* Overview: one ruled strip of figures, the day ledger beside the profiles, then the activity tables stacked full width. */
.f-admin-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}.f-page .f-admin-toolbar h2{margin:0 auto 0 0}.f-updated{font-size:.84rem;color:var(--f-muted);font-variant-numeric:tabular-nums}.f-admin-toolbar .f-status.is-error{flex-basis:100%;margin:0}
/* The strip sits under one 2px ink rule with thin rules between rows; the laboratory takes two tracks, and fiiu-admin.js sets --f-tracks to the figures shown so no track is empty. */
.f-figures{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--f-sp-5);margin:var(--f-sp-3) 0 var(--f-sp-5);border-top:2px solid var(--f-ink)}@media(min-width:760px){.f-figures{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:1280px){.f-figures{grid-template-columns:repeat(var(--f-tracks,6),minmax(0,1fr))}}
.f-figure{display:grid;align-content:start;gap:var(--f-sp-1);min-width:0;padding:var(--f-sp-3) 0;border-bottom:1px solid var(--f-line)}.f-figure-label{margin:0;font-size:.86rem;font-weight:600;line-height:1.4}.f-figure .f-figure-value{font-size:2.2rem;font-weight:700;line-height:1.1;color:var(--f-forest)}.f-figure .f-figure-value.is-zero{color:var(--f-muted)}.f-figure-note{display:flex;flex-wrap:wrap;gap:0 .3em;margin:0;font-size:var(--f-fs-hint);line-height:1.4;color:var(--f-muted)}.f-figure>.f-figure-label+.f-figure-note{margin-top:var(--f-sp-2);font-size:.95rem;font-weight:600;color:var(--f-ink)}
.f-lab-card{grid-column:span 2;display:grid;align-content:start}.f-page :is(.f-lab-card,.f-summary-body .f-lab-card) h3{margin:0;font-size:.86rem;font-weight:600;line-height:1.4;letter-spacing:0}.f-lab-bar{display:flex;height:10px;margin:var(--f-sp-2) 0 var(--f-sp-1);border-radius:5px;overflow:hidden;background:var(--f-grey-bg)}.f-lab-bar>span{flex:var(--share,0) 1 0;min-width:0}.f-lab-bar>.is-pending,.f-lab-legend .is-pending::before{background:#c98a00}.f-lab-bar>.is-accepted,.f-lab-legend .is-accepted::before{background:var(--f-leaf)}.f-lab-bar>.is-declined,.f-lab-legend .is-declined::before{background:#6e7a69}
.f-lab-legend{display:flex;flex-wrap:wrap;gap:6px 18px;margin:0;padding:0;list-style:none;font-size:.86rem}.f-lab-legend li{display:flex;gap:6px;align-items:baseline}.f-lab-legend li::before{content:"";width:10px;height:10px;border-radius:2px;align-self:center}
.f-lab-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--f-sp-1) var(--f-sp-4)}.f-shell .f-lab-review{margin-left:auto;min-height:32px;padding:4px 0;border:0;background:none;color:var(--f-forest);font-size:.86rem;font-weight:650;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;cursor:pointer}.f-shell .f-lab-review:hover{text-decoration-thickness:2px}
/* Day ledger and profiles share one row. Each table keeps its natural row height and closes with its bottom rule: stretching the shorter table spread a few rows over a tall blank band. */
.f-summary-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr);gap:0 var(--f-sp-6);align-items:start}.f-summary-col{display:grid;grid-template-rows:auto 1fr auto;min-width:0}.f-summary-col>.f-summary-scroll{min-height:0}.f-summary-stack{display:grid;min-width:0}.f-page .f-summary-body h3{margin:0 0 var(--f-sp-2);font-size:1.05rem}.f-summary-body{transition:opacity .2s}.f-summary-body[aria-busy="true"]{opacity:.7}.f-table-note{margin:calc(var(--f-sp-2) - var(--f-sp-5)) 0 var(--f-sp-5);font-size:var(--f-fs-hint)}
/* position:relative keeps visually hidden headings inside the scrolling region instead of widening the page. */
.f-summary-scroll{position:relative;max-width:100%;overflow-x:auto;border-top:2px solid var(--f-ink);margin:0 0 var(--f-sp-5)}.f-summary-scroll:focus-visible{outline:3px solid var(--f-focus);outline-offset:2px}
.f-summary-table{border-collapse:collapse;width:100%;font-size:.87rem;text-align:left}.f-summary-table th,.f-summary-table td{padding:var(--f-sp-2) 14px var(--f-sp-2) 0;line-height:1.45;border-bottom:1px solid #e1e7dd;vertical-align:top}.f-summary-table thead th{font-size:.72rem;font-weight:650;letter-spacing:.1em;text-transform:uppercase;color:var(--f-muted);vertical-align:bottom;line-height:1.35;border-bottom-color:var(--f-line)}.f-summary-table tbody:last-child tr:last-child>*{border-bottom-color:var(--f-line)}
.f-table-caption{caption-side:top;text-align:left;padding:var(--f-sp-2) 0;font-weight:700;border-bottom:1px solid #e1e7dd}.f-summary-table th[scope="row"]{min-width:150px;font-weight:500;text-align:left}.f-summary-table .f-num{text-align:right;width:1%;white-space:nowrap}.f-summary-table th.f-num{white-space:normal;min-width:112px}.f-th-short{display:none}
/* Ledger and profiles spread their counts across the width instead of bunching them at the right edge. */
.f-summary-table:is(.is-ledger,.is-profiles){table-layout:fixed}.f-summary-table:is(.is-ledger,.is-profiles) .f-num{width:auto}.f-summary-table:is(.is-ledger,.is-profiles) th.f-num{min-width:0}.f-summary-table.is-ledger thead th:first-child{width:34%}.f-summary-table.is-profiles thead th:first-child{width:46%}
.f-summary-table tr[aria-current="date"]>*{border-bottom-color:var(--f-ink)}.f-row-day{display:flex;flex-wrap:wrap;gap:0 var(--f-sp-2);align-items:baseline}.f-row-today{font-size:var(--f-fs-hint);font-weight:650;color:var(--f-forest)}.f-summary-share{font-variant-numeric:tabular-nums;color:var(--f-muted)}
.f-summary-table .f-col-text{text-align:left;width:28%;min-width:180px}.f-summary-table td.f-col-text{font-size:.84rem;color:var(--f-muted)}.f-summary-table .f-col-action{width:1%;text-align:right;white-space:nowrap}.f-summary-table td.f-col-action{padding-right:0}
.f-summary-table tr.f-group th{padding:var(--f-sp-3) 14px var(--f-sp-1) 0;font-size:.74rem;font-weight:650;letter-spacing:.08em;text-transform:uppercase;color:var(--f-muted)}.f-row-label{display:grid}.f-row-meta{font-size:var(--f-fs-hint);color:var(--f-muted)}.f-summary-count{font-variant-numeric:tabular-nums;font-weight:600}.f-summary-count.is-zero{color:var(--f-muted);font-weight:400}
/* Participants: search and filters, aligned compact rows, and a detail that stays beside the list on wide screens. */
.f-admin-filters{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end;margin:0 0 16px}.f-admin-filters .f-field{margin:0;flex:0 1 320px;min-width:min(260px,100%)}.f-filter-chips{display:flex;flex-wrap:wrap;gap:6px}.f-result-count{margin:0 0 0 auto;align-self:center;font-size:.84rem;color:var(--f-muted)}.f-result-count:empty{display:none}
.f-shell .f-filter{min-height:40px;padding:6px 14px;border:2px solid var(--f-forest);border-radius:7px;background:#fff;color:var(--f-forest);font-weight:600;font-size:.85rem;cursor:pointer}.f-shell .f-filter:hover{background:var(--f-panel)}.f-shell .f-filter[aria-pressed="true"]{background:var(--f-forest);border-color:var(--f-forest);color:#fff}
.f-admin-columns{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:28px;align-items:start}.f-admin-list{min-width:0;container:f-list/inline-size}
@media(min-width:1340px){.f-admin-columns{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}}
.f-participant-list{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto auto;margin:0;padding:0;list-style:none}.f-participant{display:grid;grid-column:1/-1;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) auto auto;grid-template-columns:subgrid;align-items:center;gap:6px 14px;padding:var(--f-sp-2) 0;border-bottom:1px solid #dce3d7}.f-participant.is-selected{box-shadow:inset 0 -2px 0 var(--f-ink)}.f-participant>.f-button{grid-column:4}
.f-participant-main{display:grid;min-width:0}.f-participant-main .f-muted{font-size:.84rem;overflow-wrap:anywhere}.f-participant-meta{display:grid;font-size:var(--f-fs-hint);color:var(--f-muted)}.f-admin-list>.f-muted{margin:0 0 12px}.f-admin-list .f-load-more,.f-admin-list .f-show-all{margin-top:16px}
.f-admin-detail{min-width:0;padding:var(--f-sp-4) 0 0;border-top:3px solid var(--f-ink)}.f-admin-detail:focus{outline:none}.f-admin-detail:focus-visible{outline:3px solid var(--f-focus);outline-offset:2px}.f-admin-detail p{overflow-wrap:anywhere}.f-detail-empty{margin:0}.f-narrow-only{display:none}.f-admin-detail[aria-busy="true"]{opacity:.5;transition:opacity .15s .25s}
.f-detail-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px 16px}.f-page .f-detail-head h3{margin:0;font-size:1.3rem}.f-detail-head p{margin:2px 0 0}
/* Detail content: review card first, organiser wording, attendance grouped by day. */
.f-review-card{margin:var(--f-sp-3) 0;padding:var(--f-sp-3) 0;border-top:2px solid var(--f-ink)}.f-review-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px}.f-review-head h4{margin:0;font-size:1rem}.f-review-card .f-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 12px;margin-top:4px}.f-review-card .f-field{flex:1 1 220px;margin:0}.f-review-card .f-conflict{flex-basis:100%;margin:0}
.f-answers-list{display:grid;grid-template-columns:minmax(120px,auto) minmax(0,1fr);gap:6px 16px;margin:10px 0}.f-answers-list dt{font-size:.84rem;font-weight:650}.f-answers-list dd{display:grid;justify-items:start;margin:0;overflow-wrap:anywhere;font-size:.9rem}.f-masked{font-variant-numeric:tabular-nums;letter-spacing:.04em}.f-reveal{display:inline-flex;align-items:center;min-height:32px;padding:4px 0;border:0;background:none;color:var(--f-forest);font-weight:600;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.f-admin-detail fieldset{min-width:0;margin:var(--f-sp-5) 0 0;padding:var(--f-sp-3) 0 0;border:0;border-top:1px solid #cbd6c7}.f-admin-detail legend{float:left;width:100%;padding:0;font-size:1.02rem;font-weight:650}.f-attendance>.f-muted{clear:both;margin:4px 0 0;font-size:.84rem}.f-attendance>.f-muted+.f-muted{margin-top:6px}.f-interest-note{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}
.f-attendance-day{margin:12px 0 0}.f-attendance-date{margin:0 0 2px;font-size:.84rem;font-weight:700;color:var(--f-forest)}.f-attendance-row{display:flex;flex-wrap:wrap;align-items:center;gap:0 10px}.f-attendance-row .f-check{flex:1 1 220px;margin:4px 0}.f-attendance-row>:is(.f-pill,.f-inline-status){margin-left:29px}.f-attendance-title{display:flex;flex-wrap:wrap;gap:0 8px}.f-attendance-time{color:var(--f-muted);font-size:var(--f-fs-hint);font-variant-numeric:tabular-nums}
.f-unknown-interest{margin:10px 0 0}.f-other{margin:2px 0 0}.f-page .f-other>summary{padding:4px 0;font-size:.86rem;color:var(--f-forest)}.f-inline-status{font-size:var(--f-fs-hint);color:var(--f-muted)}.f-inline-status:empty{display:none}.f-inline-status.is-error{flex-basis:100%;color:var(--f-error)}
.f-answers{margin-top:var(--f-sp-4);padding-top:6px;border-top:1px solid #cbd6c7}
/* Settings and publications. */
.f-admin-settings form{max-width:650px}.f-switch-card{display:grid;gap:4px;margin:0 0 8px;padding:0 0 var(--f-sp-3)}.f-switch-card .f-check{align-items:center;margin:0;font-size:.95rem;font-weight:650}.f-switch-card>.f-muted{margin:0;font-size:.84rem}
@media(min-width:1000px){.f-admin-settings form{max-width:1100px}.f-admin-settings .f-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--f-sp-4)}}
/* Wide screens: the registration switch sits beside the two public links instead of above them, so the form uses the whole column. */
@media(min-width:1280px){.f-admin-settings form{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);column-gap:var(--f-sp-6);align-items:start;max-width:none}.f-admin-settings form>*{grid-column:1/-1}.f-admin-settings form>.f-switch-card{grid-column:1;margin:var(--f-sp-4) 0 0}.f-admin-settings form>.f-links{grid-column:2}.f-admin-settings form>.f-button{justify-self:start}}
/* Summary emails, under the settings: plain lines, one press-plate button at a time; Retry, Cancel and Stop are underlined text buttons. No box and no rule: the space above sets it apart. */
.f-backfill{max-width:80ch;margin:var(--f-sp-5) 0 0}.f-page .f-backfill h3{margin:0;font-size:1.02rem;line-height:1.4}.f-backfill .f-section-hint{margin:var(--f-sp-1) 0 var(--f-sp-2)}
.f-backfill-line{margin:0;font-weight:600;font-variant-numeric:tabular-nums}.f-backfill-note{margin:var(--f-sp-1) 0 0;font-size:.92rem;font-variant-numeric:tabular-nums}.f-backfill-note.is-error{color:var(--f-error);font-weight:600}.f-backfill-note:empty,.f-backfill-actions:empty{display:none}
.f-backfill-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--f-sp-3) var(--f-sp-5);margin:var(--f-sp-3) 0 0}.f-shell .f-backfill-link{min-height:40px;padding:4px 0;border:0;background:none;color:var(--f-forest);font-weight:650;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;cursor:pointer}.f-shell .f-backfill-link:hover{text-decoration-thickness:2px}
/* Wide screens: the same two tracks as the settings above it, the heading and its note beside the counts and the button. */
@media(min-width:1280px){.f-backfill{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);column-gap:var(--f-sp-6);align-items:start;max-width:none;margin-top:var(--f-sp-6)}.f-backfill>h3{grid-area:1/1}.f-backfill>.f-section-hint{grid-column:1;grid-row:2/span 2;margin-bottom:0}.f-backfill-line{grid-area:1/2}.f-backfill-note{grid-area:2/2}.f-backfill-actions{grid-area:3/2}}
:is(.f-switch-card,.f-auto-refresh) input[role="switch"]{appearance:none;width:44px;height:24px;margin:0;border-radius:4px;cursor:pointer;background:linear-gradient(#fff,#fff) 3px 50%/18px 18px no-repeat #6e7a69}:is(.f-switch-card,.f-auto-refresh) input[role="switch"]:checked{background:linear-gradient(#fff,#fff) 23px 50%/18px 18px no-repeat var(--f-forest)}
.f-page .f-auto-refresh{align-items:center;gap:8px;min-height:44px;margin:0;font-size:.84rem;font-weight:600}
.f-content-layout{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:28px 48px;align-items:start}.f-content-editor{min-width:0}.f-content-editor form{max-width:650px}.f-editor-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:0 0 12px}.f-page .f-editor-head h3{margin:0}.f-counter{display:block;margin:-10px 0 var(--f-sp-3);text-align:right;font-size:var(--f-fs-hint);color:var(--f-muted);font-variant-numeric:tabular-nums}.f-admin-content .f-field textarea{min-height:150px}
@media(min-width:561px){.f-content-editor .f-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);column-gap:var(--f-sp-4);align-items:end}.f-content-editor .f-form>*{grid-column:1/-1}.f-content-editor .f-form>.f-field:has(>select){grid-column:auto}.f-content-editor .f-form>.f-button{grid-column:2;justify-self:start;margin-bottom:var(--f-sp-3)}}
.f-pub-list{min-width:0}.f-pub-list>.f-news-item:first-child{padding-top:0}.f-page .f-pub h3{margin:0}.f-pub-meta{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin:6px 0 10px;font-size:var(--f-fs-hint);color:var(--f-muted)}
@media(min-width:561px){.f-pub{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:var(--f-sp-4);align-items:start}.f-pub>h3,.f-pub>.f-pub-meta{grid-column:1}.f-pub>.f-button{grid-column:2;grid-row:1/span 2;align-self:center}.f-pub-meta{margin:6px 0 0}}
/* Hubs and the dashboard widget. */
.f-hub-intro{padding:45px 0}.f-page .f-hub-intro h1{max-width:14ch;hyphens:manual}.f-hub-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:25px}.f-hub-card{padding:35px;background:#f2f6ef;border-radius:12px}.f-hub-card.featured{background:#dcebd6;grid-column:1/-1}
/* position:relative keeps the visually hidden new-tab note inside the scrolling context column instead of extending the page. */
.f-news-widget{position:relative;font-size:.88rem;line-height:1.5}.f-news-widget>h2+*{margin-top:0}.f-news-widget :is(#fiiuDashboardBody,.f-widget-news)>*+*{margin-top:var(--f-sp-2)}.f-news-widget .f-button{font-size:.82rem;padding:9px 12px;min-height:40px}.f-news-widget .f-news{display:block}.f-news-widget .f-news-item{padding:var(--f-sp-3) 0}.f-news-widget #fiiuDashboardBody>.f-widget-news{margin-top:var(--f-sp-5)}.f-news-widget #fiiuDashboardBody .f-widget-news>.f-news{margin-top:0}.f-news-widget .f-widget-news>.f-news>.f-news-item:first-child{padding-top:var(--f-sp-1)}.f-news-widget .f-news-item p{margin:var(--f-sp-1) 0}
.f-widget-meta{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin:0;font-weight:600}.f-widget-status{display:grid;justify-items:start;gap:var(--f-sp-2)}.f-widget-status>*{max-width:100%}.f-widget-status>.f-badges{justify-self:stretch}.f-widget-chips{display:flex;flex-wrap:wrap;gap:6px}.f-widget-next:empty{display:none}
.f-news-widget .f-next{display:flex;flex-wrap:wrap;gap:2px 8px;margin:0;padding:0;border:0}.f-news-widget .f-next-label{flex-basis:100%;font-size:.7rem}.f-news-widget :is(.f-next-date,.f-next-time){font-weight:650;font-variant-numeric:tabular-nums}.f-news-widget .f-next-title{flex-basis:100%;font-weight:600}.f-news-widget .f-next-venue{flex-basis:100%;margin:0}
.f-widget-admin{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.f-widget-status .f-pill{white-space:normal}.f-widget-admin .f-admin-link{margin:0}.f-news-widget .f-badges{margin:0}.f-news-widget .f-badges:has(.f-badge){margin-top:var(--f-sp-2)}.f-news-widget .f-badges>.f-muted{margin-top:var(--f-sp-1)}.f-news-widget :is(h3,h4){font-size:.94rem;margin:0 0 var(--f-sp-1)}.f-news-widget .f-badges:not(:has(.f-badge))>h3{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.f-news-widget .f-badge{font-size:.78rem}.f-news-widget .f-news-body{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
@media(min-width:1000px) and (min-height:641px){.f-admin-detail{position:sticky;top:calc(var(--f-header) + 72px);max-height:calc(100vh - var(--f-header) - 88px);overflow:auto;scrollbar-width:thin}}
@media(max-width:1180px){.f-admin-head{display:grid}.f-admin-head-side{justify-items:start}.f-admin-head-side .f-actions{justify-content:flex-start}.f-export-note{text-align:left}}
@media(max-width:959px){.f-summary-grid{grid-template-columns:minmax(0,1fr)}}
@media(max-width:1000px){.f-content-layout{grid-template-columns:1fr}}
/* Once the 1.15fr column would pass the 650px form, the column stops at the form and the publication list takes the rest. */
@media(min-width:1380px){.f-content-layout{grid-template-columns:minmax(0,650px) minmax(0,1fr)}}
@media(max-width:999px){.f-admin-columns{grid-template-columns:1fr}.f-page .f-narrow-only{display:inline-flex}}
@media(max-width:760px){.f-result-count{margin:0;flex-basis:100%}.f-admin-filters .f-field{flex-basis:100%}}
/* Scrolling chip rows fade at the right edge; the end padding lets the last item scroll clear of the fade. */
@media(max-width:760px){.f-admin-nav ul,.f-day-chips{padding-inline-end:36px;scroll-padding-inline:8px 36px;-webkit-mask-image:linear-gradient(to left,transparent,#000 28px);mask-image:linear-gradient(to left,transparent,#000 28px)}}
/* Phones: the toast sits under the section nav, clear of the save buttons it reports on. */
@media(max-width:760px){.f-page[data-page="fiiu-admin"] #fiiuStatus:not(:empty):has(+#fiiuAdminRoot>.f-admin-head){top:calc(var(--f-header) + 60px);bottom:auto}}
/* A list narrower than about 700px (up to 1600px screens beside the detail, and phones): name and email beside the button, then profile, date and lab state on one line, so no cell wraps word by word. */
@container f-list (max-width:700px){.f-participant-list{display:block}.f-participant{display:flex;flex-wrap:wrap;align-items:center;gap:2px 12px;padding-block:8px}.f-participant-main{flex:1 1 0;order:1}.f-participant>.f-button{order:2;flex:none}.f-participant::after{content:"";order:3;flex-basis:100%}.f-participant-meta{order:4;display:flex;flex-wrap:wrap;gap:0 10px}.f-participant-meta>:not(:last-child)::after{content:"·";content:"·"/"";margin-left:10px}.f-participant>.f-pill{order:5}}
@media(forced-colors:active){:is(.f-switch-card,.f-auto-refresh) input[role="switch"]{appearance:auto}}
@media(min-width:1001px) and (min-height:700px){.f-registration.is-compact{position:sticky;top:calc(var(--f-header) + 16px);max-height:calc(100vh - var(--f-header) - 32px);overflow:auto;scrollbar-width:thin}}
@media(max-width:1000px){.f-page{--f-pad:22px}.f-hero{grid-template-columns:1fr;gap:var(--f-sp-5)}.f-hero:has(>.f-date-panel.has-next){border-bottom:0}.f-date-panel:not(.has-next){display:none}.f-date-panel{border-radius:32px 8px 8px 8px;padding:var(--f-sp-4) var(--f-sp-5);gap:var(--f-sp-3)}.f-date-poster{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:24px}.f-date-range{font-size:3.2rem;grid-row:span 2}.f-date-month{margin:0;align-self:end}.f-city{margin:0;align-self:start}.f-layout{grid-template-columns:1fr;gap:var(--f-sp-7);padding-top:var(--f-sp-5)}.f-registration{border-top:1px solid #cbd6c7;padding-top:var(--f-sp-4)}}
/* Registered, on desktop: news and materials fill the column under the saved panel instead of a band below the programme. */
@media(min-width:1001px){.f-layout:has(>.f-registration .f-saved:not([hidden])){grid-template-rows:auto 1fr}.f-layout:has(>.f-registration .f-saved:not([hidden]))>.f-programme{grid-row:1/span 2}.f-layout:has(>.f-registration .f-saved:not([hidden]))>.f-updates-grid{grid-column:2;grid-template-columns:minmax(0,1fr);gap:var(--f-sp-6);padding-top:var(--f-sp-4)}.f-page .f-layout:has(>.f-registration .f-saved:not([hidden]))>.f-updates-grid h2{font-size:clamp(1.45rem,2vw,1.8rem)}}
/* Tablets: the saved date poster sits beside "Next for you" instead of above it. */
@media(min-width:561px) and (max-width:1000px){.f-date-panel.has-next{flex-direction:row;align-items:center;gap:var(--f-sp-7)}.f-date-panel.has-next .f-next{flex:1;min-width:0;padding:0}}
@media(max-width:760px){.f-page h1{max-width:13ch}.f-news,.f-hub-grid,.f-updates-grid{grid-template-columns:1fr}.f-hub-card{padding:25px}.f-footer-main,.f-footer .socials{width:100%}}
/* Narrow panel: the step bar keeps one row on its hairline with tighter gaps (like the day nav, it scrolls sideways only if done marks still overflow), and the save bar stacks a one-line summary above a full-width button, so neither changes height as answers change. */
@container f-panel (max-width:419px){.f-steps ol{gap:0 12px}.f-shell .f-step{gap:4px;font-size:.78rem}}
@container f-panel (max-width:460px){.f-submit-bar{grid-template-columns:minmax(0,1fr);padding-block:var(--f-sp-2)}.f-submit-bar>.f-button{justify-self:stretch;min-height:44px;padding-block:var(--f-sp-2)}.f-fields>.f-field:has(select){grid-column:1/-1}.f-selection{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:var(--f-fs-hint)}.f-selection>:not(:last-child)::after{margin:0 8px}.f-selection.is-error::before{display:inline-grid;vertical-align:-4px;margin-right:6px}}
/* Container query: the itinerary follows the width of its own column, not the viewport. */
@container (max-width:560px){.f-itinerary-row{grid-template-columns:minmax(0,1fr) auto;align-items:center}.f-itinerary-when{grid-area:1/1;display:flex;flex-wrap:wrap;gap:0 8px}.f-itinerary-row>.f-pill{grid-area:1/2}.f-itinerary-title{grid-column:1/-1}.f-itinerary-row>:is(.f-itinerary-note,.f-itinerary-venue,.f-text-link){grid-column:1/-1}}
@media(max-width:560px){.f-page{--f-header:87px}.f-date-poster{display:none}.f-date-panel .f-next{padding-top:0}html:has(>body.f-page){scroll-padding-top:162px}.f-activity.is-conference{grid-template-columns:1fr;grid-template-areas:"title" "rail" "body"}.f-time-rail{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline;margin:0 0 6px}.f-time-rail .f-period{margin:0}.f-activity-foot{justify-content:flex-start}.f-activity-foot>:only-child:not(details){margin-left:0}.f-day-head{display:grid;gap:4px}.f-hero-intro{font-size:1rem;line-height:1.5}.f-date-panel{padding:var(--f-sp-3) var(--f-sp-4)}}
@media(max-width:430px){.f-page{--f-pad:18px}.f-page h1{font-size:2.7rem}.f-page .f-hero-title{font-size:2.5rem}.f-actions>.f-button{flex:1 1 auto}.f-hero-copy .f-actions>.f-button{flex:1 1 100%}.f-date-range{font-size:2.8rem}.f-access-grid{grid-template-columns:1fr}.f-figure .f-figure-value{font-size:1.8rem}.f-summary-table{font-size:.82rem}.f-summary-table th,.f-summary-table td{padding:var(--f-sp-2) 10px var(--f-sp-2) 0}.f-summary-table tr.f-group th{padding:6px 10px}.f-table-caption{padding:9px 0}.f-summary-table th[scope="row"]{min-width:0;overflow-wrap:anywhere}.f-summary-table .f-num{padding-inline:6px}.f-summary-table th.f-num{min-width:0;font-size:.74rem;white-space:nowrap}.f-th-short{display:inline}.f-th-full{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}.f-summary-table th[scope="row"]{width:60%}.f-summary-table :is(th,td).f-num:last-child{padding-right:10px}.f-answers-list{grid-template-columns:1fr;gap:0}.f-answers-list dd{margin-bottom:6px}.f-admin-detail{padding:14px 0 0}}
@media(max-width:430px),(max-height:640px){.f-steps{position:static;border-bottom:0}.f-steps ol{flex-wrap:wrap;overflow:visible}.f-page .f-stepped>fieldset,.f-page :is(.f-stepped fieldset,.f-form-feedback) :is(input,select,textarea,button,a,summary,[tabindex]){scroll-margin-top:0}}
/* Short viewports (and 400% zoom): only the shared header stays sticky, so the FIIU bars scroll away and focus needs no extra room. */
@media(max-height:640px){.f-page :is(.f-submit-bar,.f-day-nav,.f-admin-nav){position:static}.f-page .f-day{scroll-margin-top:-8px}html:has(>body.f-page){scroll-padding-top:113px}.f-page .f-form :is(input,select,textarea,button,a,summary,[tabindex]){scroll-margin-bottom:0}}
@media(max-height:640px) and (max-width:560px){html:has(>body.f-page){scroll-padding-top:99px}}
@media(max-width:360px){.f-page .f-hub-intro h1{hyphens:auto}.f-summary-table{font-size:.78rem}.f-summary-table th,.f-summary-table td,.f-summary-table tr.f-group th{padding-inline:7px}}
@media(prefers-reduced-motion:reduce){html:has(>body.f-page){scroll-behavior:auto}.f-page *{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
/* Check-in section of the organiser dashboard: one ruled table of the NODAL blocks, each with when its check-in closes, live count and screen. */
.f-admin-checkin{margin-top:var(--f-sp-4);padding:var(--f-sp-5) 0 var(--f-sp-2);border-top:1px solid #cbd6c7}.f-page .f-admin-checkin .f-admin-toolbar h2{margin:0 auto 0 0}.f-section-hint{margin:var(--f-sp-1) 0 var(--f-sp-3);font-size:var(--f-fs-hint)}
/* "Check-in open until 13:30 Lima time": the time carries the weight; a closed block is greyed with its phrase in bold, the only state lists mark. */
.f-window{display:inline-flex;flex-wrap:wrap;gap:0 .45em;align-items:baseline;font-variant-numeric:tabular-nums}.f-when-day{font-weight:650}.f-window-time,.f-window-day{font-weight:600}.f-window-zone{font-size:var(--f-fs-hint);color:var(--f-muted)}.f-window.is-closed{color:var(--f-muted)}.f-window.is-closed .f-window-label{font-weight:650}
.f-summary-table.is-checkin td.f-col-checkinClosing{color:var(--f-ink);font-size:.87rem}.f-summary-table.is-checkin thead th:first-child{width:32%}.f-summary-table.is-checkin .f-col-venue{width:24%}.f-summary-table.is-checkin .f-col-checkinClosing{width:22%;min-width:200px}.f-row-venue{overflow-wrap:anywhere}
@media(max-width:759px){.f-summary-table .f-col-venue{display:none}}@media(max-width:1099px){.f-summary-table.is-checkin .f-col-venue{display:none}}
/* The check-in count's unit shows only when the rows stack (below). */
.f-cell-unit{display:none}
/* Below 800px the check-in table no longer fits its columns (the Spanish button label is the widest), so each block becomes one ruled row,
   like the screen list (.f-qr-row): block and time, then the closing line beside the count, then the screen button. The column headings stay for screen readers only. */
@media(max-width:799px){
.f-summary-table.is-checkin,.f-summary-table.is-checkin tbody{display:block}
.f-summary-table.is-checkin thead{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.f-summary-table.is-checkin tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--f-sp-1) var(--f-sp-4);align-items:baseline;padding:var(--f-sp-3) 0;border-bottom:1px solid #e1e7dd}
.f-summary-table.is-checkin tbody:last-child tr:last-child{border-bottom-color:var(--f-line)}
.f-summary-table.is-checkin tr>*{display:block;width:auto;min-width:0;padding:0;border:0}
.f-summary-table.is-checkin tr>.f-col-venue{display:none}
.f-summary-table.is-checkin th[scope="row"]{grid-column:1/-1;width:auto;overflow-wrap:break-word;font-size:.92rem;font-weight:600}
.f-summary-table.is-checkin td.f-col-checkinClosing{grid-column:1}
.f-summary-table.is-checkin td.f-num{grid-column:2;width:auto;padding:0;text-align:right}
.f-summary-table.is-checkin td.f-col-action{grid-column:1/-1;justify-self:start;padding:var(--f-sp-1) 0 0;text-align:left;white-space:normal}
.f-summary-table.is-checkin tr.f-group{display:block;padding:var(--f-sp-3) 0 var(--f-sp-1);border-bottom:1px solid var(--f-line)}.f-summary-table.is-checkin tr.f-group th{padding:0}
.f-summary-table.is-checkin .f-cell-unit{display:inline;font-weight:400;font-size:var(--f-fs-hint);color:var(--f-muted)}
}
/* A tablet has room for the button on the closing and count line. */
@media(min-width:600px) and (max-width:799px){.f-summary-table.is-checkin tr{grid-template-columns:minmax(0,1fr) auto auto;align-items:center}.f-summary-table.is-checkin td.f-col-action{grid-column:3;padding:0}}
/* Participant detail: sessions and certificate hours under the legend; each confirmed row says how and when it was confirmed. */
.f-attendance-total{clear:both;display:flex;flex-wrap:wrap;gap:2px var(--f-sp-3);margin:var(--f-sp-2) 0 0;font-size:.9rem;font-weight:600}.f-attendance-total>.f-count+.f-count::before{content:"·";content:"·"/"";margin-right:var(--f-sp-3);color:var(--f-muted);font-weight:400}.f-attendance-total>.f-muted{flex-basis:100%;font-size:var(--f-fs-hint);font-weight:400}
.f-attendance-method{font-size:var(--f-fs-hint);color:var(--f-muted);font-variant-numeric:tabular-nums;white-space:nowrap}.f-attendance-method:empty{display:none}.f-attendance-row>.f-attendance-method{margin-left:29px}
/* A lost session keeps the page and its drafts; this ruled line carries the sign-in link until a request succeeds again. */
.f-page .f-session-notice{margin:var(--f-sp-3) 0 0;padding:var(--f-sp-2) 0;border-radius:0;background:none;border-block:2px solid var(--f-amber);color:var(--f-amber);font-weight:600}.f-session-notice .f-text-link{color:var(--f-amber)}
/* Organisers only (the 403 page, and the dashboard or check-in screen once access is lost). */
.f-locked{max-width:46rem;padding:var(--f-sp-7) 0}.f-page .f-locked h1{font-size:clamp(2rem,4vw,3rem);max-width:none;hyphens:manual;margin:0 0 var(--f-sp-3)}.f-locked>p{margin:0}
/* Hours line: under the badges on the FIIU page, the dashboard widget and the check-in result. */
:is(.f-page,.f-news-widget) .f-hours{display:flex;flex-wrap:wrap;gap:2px var(--f-sp-3);align-items:baseline;margin:var(--f-sp-2) 0 0;font-weight:650}.f-hours-note{font-size:var(--f-fs-hint);font-weight:400;color:var(--f-muted)}.f-news-widget .f-hours{margin:0}
/* Attendee check-in page: phone first, one ruled result block. */
.f-page[data-page="fiiu-checkin"] #fiiuCheckinRoot{max-width:40rem}.f-checkin{padding:var(--f-sp-5) 0 var(--f-sp-6)}
.f-checkin-kicker{margin:0;font-size:.72rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--f-forest)}
.f-page .f-checkin-title{max-width:none;hyphens:manual;margin:var(--f-sp-2) 0 var(--f-sp-4);font-size:clamp(1.75rem,7vw,2.6rem);color:var(--f-ink)}.f-checkin-title:focus{outline:none}
.f-checkin.is-ok .f-checkin-title{color:var(--f-ok)}.f-checkin.is-ok .f-checkin-title::before{content:"✓ ";content:"✓ "/""}.f-checkin.is-warn .f-checkin-title{color:var(--f-amber)}.f-checkin.is-error .f-checkin-title{color:var(--f-error)}.f-checkin[aria-busy="true"] .f-checkin-title{color:var(--f-muted)}
.f-checkin-activity{padding:var(--f-sp-3) 0;border-top:1px solid var(--f-line)}.f-page .f-checkin-block{margin:0;font-size:1.1rem;font-weight:650;line-height:1.35}.f-checkin-when{display:flex;flex-wrap:wrap;gap:2px 0;margin:var(--f-sp-1) 0 0;font-size:.9rem;color:var(--f-muted)}.f-checkin-when>:not(:last-child)::after{content:"·";content:"·"/"";margin:0 .55em}.f-checkin-venue{margin:2px 0 0;font-size:.9rem;color:var(--f-muted);overflow-wrap:anywhere}
.f-checkin-facts{margin:0}.f-checkin-window{margin:var(--f-sp-3) 0 0}.f-checkin-fact{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--f-sp-1) var(--f-sp-3);padding:var(--f-sp-2) 0;border-bottom:1px solid var(--f-line)}.f-checkin-fact dt{font-weight:600}.f-checkin-fact dd{margin:0;font-variant-numeric:tabular-nums}
.f-checkin-activity+.f-checkin-hint,.f-checkin-title+.f-checkin-hint,.f-checkin-facts+.f-checkin-hint{margin-top:var(--f-sp-3)}.f-checkin-hint{margin:var(--f-sp-3) 0 0}.f-checkin .f-hours{margin-top:var(--f-sp-3)}.f-checkin .f-badges h2{margin:0 0 var(--f-sp-2);font-size:1rem}
.f-code-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--f-sp-3);margin-top:var(--f-sp-4)}.f-code-form .f-field{flex:1 1 12rem;margin:0}.f-code-form .f-field input{font-size:1.35rem;font-weight:650;letter-spacing:.18em;text-transform:uppercase;font-variant-numeric:tabular-nums}.f-code-form>.f-status{flex-basis:100%;margin:0}
/* Check-in screen: the code as large as the viewport allows beside the block, window, typed fallback and live count. Full screen keeps only the stage. */
.f-page[data-page="fiiu-qr"] #fiiuQrRoot{max-width:1760px}.f-qr{padding:var(--f-sp-4) 0 var(--f-sp-5)}
.f-qr-stage{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--f-sp-5) var(--f-sp-7);align-items:center;padding:var(--f-sp-4) 0;border-block:2px solid var(--f-ink);background:#fff}
.f-qr-code{width:min(calc(100vh - var(--f-header) - 120px),50vw,1080px);min-width:220px;aspect-ratio:1}.f-qr-svg{display:block;width:100%;height:100%}.f-qr-missing{margin:0;font-weight:600;color:var(--f-amber)}
.f-qr-side{display:grid;gap:var(--f-sp-3);align-content:center;min-width:0}.f-qr-kicker{margin:0;font-size:.85rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--f-forest)}.f-page .f-qr-title{max-width:24ch;margin:0;font-size:clamp(1.8rem,3vw,3.2rem);hyphens:manual}
.f-qr-meta{font-size:1.05rem;color:var(--f-muted)}:is(.f-qr-meta,.f-qr-row-meta) p{margin:0}:is(.f-qr-meta,.f-qr-row-meta) .f-meta-when{display:flex;flex-wrap:wrap;font-weight:600;color:var(--f-ink)}:is(.f-qr-meta,.f-qr-row-meta) .f-meta-when>:not(:last-child)::after{content:"·";content:"·"/"";margin:0 .55em}.f-meta-venue{overflow-wrap:anywhere}.f-qr-window{margin:0;font-size:1.05rem}.f-qr-window .f-window.is-open .f-window-label{font-weight:650;color:var(--f-ok)}
.f-qr-typed{display:grid;gap:var(--f-sp-1);padding:var(--f-sp-3) 0;border-block:1px solid var(--f-line)}.f-qr-type-label,.f-qr-url{margin:0}.f-qr-url{font-size:1.15rem;font-weight:600;overflow-wrap:anywhere}.f-page .f-qr-short{margin:var(--f-sp-1) 0 0;font-size:clamp(2.6rem,5vw,4.6rem);font-weight:750;line-height:1;letter-spacing:.12em;font-variant-numeric:tabular-nums}
.f-qr-count{margin:0;font-size:1.4rem;font-weight:700;color:var(--f-forest)}.f-qr-count:empty{display:none}.f-qr-controls{margin-top:var(--f-sp-4)}.f-qr-note{margin:var(--f-sp-2) 0 0;font-size:var(--f-fs-hint);text-wrap:balance}
.f-qr-stage:fullscreen{height:100vh;padding:4vh 4vw;border:0;align-content:center}.f-qr-stage:fullscreen .f-qr-code{width:min(90vh,56vw)}.f-qr-stage::backdrop{background:#fff}
@media(max-width:900px){.f-qr-stage{grid-template-columns:minmax(0,1fr)}.f-qr-code{justify-self:center;width:min(90vw,70vh)}}
/* Portrait (a tablet held at the door): the QR leaves room under it for the title, window, typed code and count, so people without a working camera see the code without scrolling. */
@media(max-width:900px) and (orientation:portrait){.f-qr-code{width:min(90vw,calc(100vh - var(--f-header) - 27rem))}}
.f-qr-head{padding:var(--f-sp-4) 0 var(--f-sp-2)}.f-page .f-qr-head h1{max-width:none;margin:0 0 var(--f-sp-1);font-size:clamp(1.6rem,2.6vw,2.25rem)}.f-qr-head p{margin:0}
.f-qr-day{margin-top:var(--f-sp-5)}.f-page .f-qr-day-label{margin:0 0 var(--f-sp-1);font-size:1.05rem;font-weight:700;color:var(--f-forest)}.f-qr-rows{margin:0;padding:0;list-style:none;border-top:2px solid var(--f-ink)}
.f-qr-row{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) auto;gap:var(--f-sp-2) var(--f-sp-5);align-items:center;padding:var(--f-sp-3) 0;border-bottom:1px solid var(--f-line)}.f-page .f-qr-row-title{margin:0;font-weight:650;line-height:1.4}.f-qr-row-meta{margin:2px 0 0;font-size:.86rem;color:var(--f-muted)}.f-qr-row-window{margin:0}.f-qr-list>.f-text-link{display:inline-block;margin-top:var(--f-sp-5)}
@media(max-width:760px){.f-qr-row{grid-template-columns:minmax(0,1fr)}.f-qr-row>.f-button{justify-self:start}}
.f-page .f-news-pinned{color:var(--f-forest);font-weight:650}
/* Conversations section of the organiser dashboard: the new-question form beside the questions, grouped by block in programme order. Each question is
   one ruled row (text, talk and totals, then the Open / Closed / Hidden switch and its links); a hidden one is greyed, the only state the list marks. */
.f-admin-conversations{margin-top:var(--f-sp-4);padding:var(--f-sp-5) 0 var(--f-sp-2);border-top:1px solid #cbd6c7}.f-page .f-admin-conversations h2{margin:0}
.f-conversations-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:var(--f-sp-5) var(--f-sp-7);align-items:start}.f-question-editor,.f-question-side{min-width:0}.f-question-editor form{max-width:650px}.f-page .f-question-editor h3{margin:0 0 var(--f-sp-3)}
.f-question-buttons{display:flex;flex-wrap:wrap;align-items:center;gap:var(--f-sp-2) var(--f-sp-4)}.f-question-form>.f-conflict:empty,.f-question>.f-conflict:empty{display:none}
.f-question-alert{display:flex;flex-wrap:wrap;align-items:center;gap:var(--f-sp-1) var(--f-sp-4);margin:0 0 var(--f-sp-3);color:var(--f-error);font-weight:600}
.f-question-group+.f-question-group{margin-top:var(--f-sp-5)}.f-page .f-question-block{display:flex;flex-wrap:wrap;gap:0 var(--f-sp-2);margin:0 0 var(--f-sp-1);font-size:1rem;line-height:1.4}.f-question-day{color:var(--f-forest)}
.f-questions{margin:0;padding:0;list-style:none;border-top:2px solid var(--f-ink)}.f-question{display:grid;gap:var(--f-sp-2);padding:var(--f-sp-3) 0;border-bottom:1px solid var(--f-line)}.f-question .f-form{max-width:650px}
.f-page .f-question-text{margin:0;font-weight:600;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}.f-question.is-hidden .f-question-text{color:var(--f-muted)}
.f-question-meta{display:flex;flex-wrap:wrap;gap:2px var(--f-sp-3);margin:var(--f-sp-1) 0 0;font-size:var(--f-fs-hint);color:var(--f-muted);font-variant-numeric:tabular-nums}.f-question-talk{flex-basis:100%;color:var(--f-ink);overflow-wrap:anywhere}
.f-question-count+.f-question-count::before{content:"·";content:"·"/"";margin-right:var(--f-sp-3)}
.f-question-controls{display:flex;flex-wrap:wrap;align-items:center;gap:var(--f-sp-2) var(--f-sp-5)}.f-question-links{display:flex;flex-wrap:wrap;align-items:center;gap:0 var(--f-sp-4)}.f-question-links>.f-text-link{display:inline-flex;align-items:center;min-height:40px;margin:0}
/* The status switch: the participant filter chips joined into one control. */
.f-segmented{display:inline-flex}.f-shell .f-segmented>.f-filter{border-radius:0}.f-shell .f-segmented>.f-filter+.f-filter{margin-left:-2px}.f-shell .f-segmented>.f-filter:first-child{border-radius:7px 0 0 7px}.f-shell .f-segmented>.f-filter:last-child{border-radius:0 7px 7px 0}.f-segmented[aria-busy="true"]{opacity:.6}
@media(max-width:1000px){.f-conversations-layout{grid-template-columns:minmax(0,1fr)}}
@media(pointer:coarse){.f-shell .f-segmented>.f-filter,.f-question-links>.f-text-link{min-height:44px}}
