:root{--app-panel-gap:16px}
/* Shared page actions: neutral return, primary confirmation, full-width solo action. */
:is(#app,.portal-dialog) .page-actions,
#app :is(.profile-editor-actions,.portal-dialog-actions,.auth-actions){
 --page-action-padding:13px 22px;display:flex;flex-wrap:wrap;align-items:stretch;justify-content:flex-end;gap:12px;
 width:100%;min-width:0;grid-column:1/-1;position:static;margin:var(--app-panel-gap) 0 0;
}
/* v351: the shared rule above resets position/margin and must not undo the sticky action footer of dialogs inside the chat panel (v350). */
:is(#app,.portal-dialog) .page-actions:is(.panel-confirm-dialog[open]>form>footer){position:static;margin:18px 0 0;padding:12px 0 0;background:transparent}
#app .page-actions.panel,#app .page-action-panel{padding:16px;margin-top:var(--app-panel-gap);border:0;border-radius:24px;background:#ffffffd9;box-shadow:0 8px 26px #29232a08,inset 0 0 0 1px #e3dde1;overflow:hidden;background-clip:padding-box}
#app .page-action-panel>.page-actions{margin:0;padding:0}
#app .page-action-panel>p:empty{display:none}
:is(#app,.portal-dialog) :is(.page-actions,.profile-editor-actions,.portal-dialog-actions,.auth-actions)>:is(button,a){
 /* v398: labels stay on one line ("Update veröffentlichen" wrapped in a 50/50 bar). Equal shares while they fit,
    never narrower than the label (automatic min-width), and the row wraps to full-width buttons when both do not fit. */
 flex:1 1 0;max-width:100%;min-height:48px;margin:0;padding:var(--page-action-padding,13px 22px);
 border-radius:16px;display:inline-flex;align-items:center;text-align:center;justify-content:center;white-space:nowrap;overflow-wrap:normal;line-height:1.4;
}
:is(#app,.portal-dialog) :is(.page-actions,.profile-editor-actions,.portal-dialog-actions,.auth-actions)>:is(.ghost,.action-back,.business-back){order:-1;margin-right:auto}
#app :is(.page-actions>.action-back,.back-link,.ow-back,.business-back,.business-portal-back),
:is(#app,.portal-dialog) :is(.page-actions,.profile-editor-actions,.portal-dialog-actions,.auth-actions)>.ghost{
 display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:var(--page-action-padding,13px 22px);
 border:1px solid #d9d9df;border-radius:16px;background:linear-gradient(135deg,#fff,#f0f1f4);color:#50515b;
 box-shadow:0 3px 12px #25232c06;text-decoration:none;font-weight:700;line-height:1.4;
}
:is(#app,.portal-dialog) :is(.page-actions,.profile-editor-actions,.portal-dialog-actions,.auth-actions)>.button:not(.action-back):not(.business-back){background:var(--brand-gradient,linear-gradient(135deg,#bb3159,#64162b));color:#fff;border:1px solid transparent}
:is(#app,.portal-dialog) :is(.page-actions,.profile-editor-actions,.portal-dialog-actions,.auth-actions)>:is(button,a):not([hidden]):not(:has(~:is(button,a):not([hidden]))):not(:is(button,a):not([hidden])~*){flex:1 1 100%;width:100%;margin-inline:0}
#app .page-actions>[hidden],#app .action-back[hidden],#app .business-back[hidden]{display:none!important}
#app form:is(.ops-form,.group-invite-form,.auth-form)>:is(button.button,button[type=submit]):last-of-type{width:100%;margin:20px 0 0;align-self:stretch;justify-self:stretch}
#app .ow-editor>.ow-actions{grid-column:1/-1;align-self:end}
#app .be-card-actions{align-items:center}
/* Container width, rather than viewport alone, decides how many event cards fit. */
#app .be-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,350px),1fr));align-items:stretch}
#app .be-card{container-type:inline-size}
#app .be-cover{height:auto;aspect-ratio:16/9}
#app .be-card-body{padding:clamp(18px,4cqi,28px)}
#app .be-card-actions{padding-top:24px}
@media(min-width:1000px){
 .app-host #app>:is(.business-space,.product-events,.history-page,.groups-page:not(.group-profile-editor),.ops-portal){width:100%;max-width:1920px;margin-inline:auto;padding-inline:32px;box-sizing:border-box}
/* festl-v405: website (#/events) uses the same list width/density as the app (max 5 cols). */
body:not(.app-host) #app>.product-events{width:100%;max-width:1920px;margin-inline:auto;padding-inline:max(24px,2vw);box-sizing:border-box}
@media(max-width:999px){body:not(.app-host) #app>.product-events{padding-inline:max(16px,3vw)}}

 .app-host #app>.product-event{width:100%;max-width:1600px}
 #app .be-grid:has(>.be-card:only-child)>.be-card{display:grid;grid-template-columns:minmax(260px,.7fr) minmax(0,1.3fr)}
 #app .be-grid:has(>.be-card:only-child) .be-cover{height:100%;min-height:240px;aspect-ratio:auto}
 #app .be-grid:has(>.be-card:only-child) .be-cover img{position:absolute;inset:0}
 #app .campaign-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,440px),1fr));align-items:stretch}
 #app .campaign-card{grid-template-columns:minmax(0,1fr)}
 #app .campaign-stats{justify-content:space-between;text-align:left}
}
@media(max-width:480px){
 :is(#app,.portal-dialog) :is(.page-actions,.profile-editor-actions,.portal-dialog-actions,.auth-actions){--page-action-padding:12px 10px;gap:8px}
 :is(#app,.portal-dialog) :is(.page-actions,.profile-editor-actions,.portal-dialog-actions,.auth-actions)>:is(button,a){flex:1 1 0;padding:var(--page-action-padding);font-size:13px}
 #app .page-actions.panel,#app .page-action-panel{padding:16px}
}
/* Ended events stay readable, with neutral surfaces, badges and list actions. */
#app :is(.event-past,.be-past){background:linear-gradient(135deg,#fff,#f0f1f3);border-color:#dedee3;box-shadow:0 8px 24px #24252a08;color:#55565e}
#app :is(.event-past,.be-past) :is(h2,h3,p,time,.eyebrow,.count,strong){color:#60616a}
#app :is(.event-past,.be-past) :is(.tag,.status-pill,.be-phase,.button,.ghost,.be-remove){background:#f3f3f5;color:#55565f;border-color:#d8d9df;box-shadow:none}
#app :is(.event-past,.be-past) :is(.event-art-placeholder,.be-cover){background:#e7e8ec;color:#62636c}
#app :is(.event-past,.be-past) :is(.event-art-placeholder>*,.be-pending){color:#60616a;border-color:#c8c9cf}

#app .settings-save>.settings-feedback{flex-basis:100%;margin:0}
#app .settings-save>.settings-feedback:empty{display:none}
#app .chat-back{background:#f4f4f6;color:#50515b;border:1px solid #dddde2;border-radius:50%}
#app .ow-claim-form [data-claim-pane="1"] .page-actions>.button{float:none}
#app .page-actions :focus-visible,.portal-dialog .page-actions :focus-visible{outline:3px solid #b34569;outline-offset:3px}

#app :is(.event-past,.be-past) img{filter:grayscale(1)}

#app .auth-actions>p{order:-2;flex-basis:100%}
#app .auth-actions>#auth-submit{order:1}
@media(min-width:1100px){
 .app-host #app>.settings-page{width:100%;max-width:1600px;padding-inline:32px}
 #app #settings-account{grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
 #app #settings-personal{grid-column:1/-1;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
 #app #settings-account>.danger-zone{grid-column:1/-1}
}

#app .business-events:has(#campaign-builder)>.page-return{display:none}

/* Grid gaps provide their own spacing: do not add a second footer margin. */
#app :is(.be-grid,.campaign-grid,.ow-editor,.ow-updates-grid,.campaign-workspace,.settings-content,.history-grid){gap:var(--app-panel-gap)}
#app .ow-editor>.page-actions{margin:0}
#app :is(.ow-feedback,.form-error,#profile-error,#campaign-feedback):empty{display:none}
#app .campaign-head.page-actions{margin:0 0 var(--app-panel-gap)}
#app .campaign-workspace>.panel,#app .ow-updates-grid>.ops-form{margin:0}
#app .be-workspace-tabs{margin:var(--app-panel-gap) 0}
#app .panel>.page-return{border:0;background:none;box-shadow:none;padding:0}
/* The app shell alone reserves room for floating navigation at the page end. */
.app-host:has(.app-chrome) #app>:is(.shell,.section,.business-space):not(.real-discovery,.product-chat){padding-bottom:0;margin-bottom:0}
.app-host:has(.app-chrome) #app>:is(.shell,.section,.business-space):not(.real-discovery,.product-chat)>:last-child{margin-bottom:0}
@media(min-width:1000px){
 .app-host:has(.app-chrome) #app:not(:has(>.real-discovery,>.product-chat)){padding-bottom:calc(82px + var(--app-panel-gap))}
}
#app .page-actions.panel,#app .page-action-panel{max-width:none;width:100%;box-sizing:border-box}

#app .be-section{margin:36px 0 0}
#app .be-section:first-of-type{margin-top:16px}
#app .ow-readonly :disabled{opacity:1;color:#60616a;background:#fafafb;cursor:default}
#app>.product-event{gap:var(--app-panel-gap)}

/* Code delivery is a secondary utility; keep the main action row to two short labels. */
#app .auth-code-help{display:flex;justify-content:center;margin:4px 0 0}
#app .auth-code-help #auth-resend{width:auto;min-height:44px;padding:10px 12px;border:0;border-radius:10px;background:transparent;box-shadow:none;color:#64162b;font-size:13px;font-weight:600;line-height:1.4;font-variant-numeric:tabular-nums;cursor:pointer}
#app .auth-code-help #auth-resend:disabled{color:#82828d;opacity:1;cursor:default}
#app .auth-code-help #auth-resend:not(:disabled):hover{background:#64162b09}
#app .auth-code-help+.auth-actions{margin-top:8px}

#app .campaign-grid{gap:12px;align-content:start;align-items:start}
#app .campaign-grid>.panel{margin:0;width:100%;max-width:none}
#app :is(.campaign-stats b,.ow-metric b,.ow-ad-metrics b){white-space:nowrap;word-break:normal;overflow-wrap:normal;font-variant-numeric:tabular-nums}
#app .ow-metrics-panel>.metric-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.ow-insight-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.ow-insight header{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:18px}.ow-insight h3{font-size:16px;margin:0}.ow-insight header>span{font-size:10px;color:#9b7c8b}.ow-insight p,.ow-stats-note{font-size:11px;color:#99828e;line-height:1.6}.ow-insight dl{margin:0}.ow-insight dl>div{display:flex;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px solid #f0e7ee}.ow-insight dt{font-size:12px;color:#8b7180}.ow-insight dd{margin:0;font-size:13px;font-weight:700;white-space:nowrap}.ow-activity-chart{height:170px;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:10px}.ow-activity-day{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:0}.ow-activity-day b{font-size:10px;white-space:nowrap}.ow-activity-day>span{font-size:9px;color:#a48a98}.ow-activity-track{height:120px;width:100%;max-width:36px;display:flex;align-items:end;background:#f9f2f6;border-radius:7px;overflow:hidden}.ow-activity-track i{width:100%;border-radius:7px;background:linear-gradient(#db93ad,#a53e67)}.ow-ad-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.ow-ad-metrics b{display:block;font-size:24px;color:#813452}.ow-ad-metrics span{display:block;font-size:11px;color:#a18291;margin-top:6px}
@media(max-width:700px){#app .ow-metrics-panel>.metric-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.ow-insight-grid{grid-template-columns:1fr}.ow-insight header{align-items:flex-start}.ow-insight dd{font-size:11px}.ow-ad-metrics b{font-size:21px}.ow-activity-chart{gap:6px}}

/* Account cards share row edges and a single spacing rhythm. */
#app .settings-page .settings-content>.panel{display:flex;flex-direction:column;margin:0;padding:24px;gap:0}
#app .settings-page .settings-content>.panel>.settings-card-actions{margin-top:auto;padding-top:16px}
#app .settings-page .settings-content>.panel>.settings-save{margin-top:auto;padding-top:16px}
#app .settings-page #settings-account>.account-summary{order:0}
#app .settings-page #settings-account>.passkey-settings{order:1}
#app .settings-page #settings-account>[data-settings-section=communications]{order:2;grid-column:1/-1}
#app .settings-page #settings-account>#settings-personal{order:3}
#app .settings-page #settings-account>.settings-data{order:4}
#app .settings-page #settings-account>.danger-zone{order:5}
@media(min-width:1100px){#app .settings-page #settings-account>.danger-zone{grid-column:auto}#app .settings-page .settings-categories{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:24px}#app .settings-page .settings-categories>p{grid-column:1/-1}}
@media(max-width:600px){#app .settings-page .settings-content>.panel{padding:20px}}

#app .settings-page .account-security-panels{grid-column:1/-1;order:0;grid-template-columns:minmax(0,1fr);align-items:stretch}
@media(min-width:760px){#app .settings-page .account-security-panels{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* The floating dock hides on downward scroll mid-page and is always shown again at the page end (app-nav-scroll.js).
   The page ends exactly above the shown dock: dock offset 12px + dock 58px + 12px gap, plus the safe area. */
@media(max-width:999px){
 .app-host:has(.app-chrome) #app:not(:has(>.real-discovery,>.product-chat)){padding-bottom:calc(var(--app-dock-clearance,82px) + var(--app-safe-bottom,env(safe-area-inset-bottom)))}
 html:has(body.app-host .app-chrome){scroll-padding-bottom:calc(var(--app-dock-clearance,82px) + var(--app-safe-bottom,env(safe-area-inset-bottom)))}
}

/* Keep authentication actions readable; wrap the row, never the button label. */
#app .auth-actions>:is(button,a){white-space:nowrap;min-width:max-content;flex:1 1 130px}

#app .business-space:is(.business-role-choice,.business-claim-picker){width:100%;max-width:800px;margin-inline:auto;overflow-x:clip;overflow-wrap:anywhere}#app .business-space:is(.business-role-choice,.business-claim-picker) *{box-sizing:border-box;min-width:0}#app .business-space:is(.business-role-choice,.business-claim-picker) :is(h1,h2,h3,p){overflow-wrap:anywhere}#app .business-space:is(.business-role-choice,.business-claim-picker) #ops-content>.panel{width:100%;max-width:none;margin-inline:0;padding:24px}#app .business-space:is(.business-role-choice,.business-claim-picker)>.page-actions{width:100%;max-width:none;margin-inline:0}@media(max-width:700px){#app .business-space:is(.business-role-choice,.business-claim-picker) #ops-content>.panel{padding:18px}}

#platform-maintenance{position:fixed;inset:0;z-index:10000;display:grid;place-items:center;padding:24px;background:linear-gradient(145deg,#fff3f6,#f1e4eb)}#platform-maintenance>.panel{max-width:580px;text-align:center;width:100%}#platform-maintenance img{border-radius:18px}#platform-maintenance .button{width:100%}
.as-skeleton{position:relative}.as-skeleton::after,[aria-busy=true]:not(button):not([data-fc-card])::before{content:"";display:block;width:28px;height:28px;border:3px solid #e7d6de;border-top-color:#cf2c50;border-radius:50%;animation:fc-loading .8s linear infinite;margin:20px auto}.as-skeleton::after{position:absolute;inset:0;margin:auto}button[aria-busy=true]::before{content:"";width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:fc-loading .8s linear infinite;display:inline-block;margin-right:8px}
/* festl-v403: Anmelden / primary auth busy spinner on the right, not centered alone. */
#login-form #auth-submit[aria-busy=true],
#app .auth-actions>.button[aria-busy=true],
#app .auth-actions>.button.is-busy{justify-content:center;gap:10px}
#login-form #auth-submit[aria-busy=true]::before,
#app .auth-actions>.button[aria-busy=true]::before,
#app .auth-actions>.button.is-busy::before{content:none;display:none}
#login-form #auth-submit[aria-busy=true]::after,
#app .auth-actions>.button[aria-busy=true]::after,
#app .auth-actions>.button.is-busy::after{content:"";width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:fc-loading .8s linear infinite;display:inline-block;flex:0 0 auto;margin-left:2px}
@media(prefers-reduced-motion:reduce){#login-form #auth-submit[aria-busy=true]::after,#app .auth-actions>.button[aria-busy=true]::after,#app .auth-actions>.button.is-busy::after{animation-duration:2s}}
@keyframes fc-loading{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.as-skeleton::after,[aria-busy=true]:not([data-fc-card])::before{animation-duration:2s}}
/* Swipe/profile cards stay visually intact; loading chrome is #global-loading only. */
[data-fc-card][aria-busy=true]::before{content:none;display:none}
/* Page/panel loads use #global-loading only; hide duplicate circular spinners. */
body.has-loading-island .as-skeleton::after,body.has-loading-island [aria-busy=true]:not(button):not([data-fc-card])::before{content:none;display:none}

#global-loading{position:fixed;top:12px;left:50%;transform:translateX(-50%);z-index:9999;padding:10px;border:1px solid #ffffffb3;border-radius:50%;background:var(--app-glass-surface,#fff8faa6);box-shadow:0 5px 22px #35132222;backdrop-filter:var(--app-glass-filter,blur(24px) saturate(160%));-webkit-backdrop-filter:var(--app-glass-filter,blur(24px) saturate(160%));pointer-events:none}#global-loading[hidden]{display:none}#global-loading>span{display:block;width:22px;height:22px;border:2px solid #cf2c5026;border-top-color:#cf2c50;border-radius:50%;animation:fc-loading .8s linear infinite}

#global-loading{display:flex;align-items:center;justify-content:center;gap:10px;left:50%;top:calc(var(--app-safe-top,env(safe-area-inset-top,0px)) + 10px);width:156px;height:44px;padding:10px;border-radius:22px;color:var(--burgundy);background:var(--app-glass-surface,#fff8faa6);border:1px solid #fff;transform:translate(-50%,calc(-100% - 20px)) scale(.8);opacity:0;transition:left .55s cubic-bezier(.22,.8,.25,1),top .55s cubic-bezier(.22,.8,.25,1),width .45s ease,transform .45s cubic-bezier(.22,.8,.25,1),opacity .25s ease;z-index:9999;box-sizing:border-box}#global-loading.is-visible{transform:translate(-50%,0) scale(1);opacity:1}#global-loading.is-docked{left:var(--loading-dock-x,calc(100% - 34px));top:var(--loading-dock-y,34px);width:40px;height:40px;transform:translate(-50%,-50%) scale(.8)}#global-loading.is-docked.is-visible{transform:translate(-50%,-50%) scale(1)}#global-loading>span{flex:none;width:20px;height:20px}#global-loading>small{font-size:12px;white-space:nowrap;overflow:hidden;max-width:110px;opacity:1;transition:opacity .15s,max-width .35s}#global-loading.is-collapsed>small{max-width:0;opacity:0}#global-loading.is-collapsed{gap:0;width:40px;height:40px}.chrome-bell{transition:transform .5s cubic-bezier(.22,.8,.25,1)}
@media(prefers-reduced-motion:reduce){#global-loading,.chrome-bell{transition:opacity .1s linear}}

body.has-loading-island [data-loading-replaced]{opacity:0!important;visibility:hidden!important;pointer-events:none!important}
#global-loading{height:var(--loading-open-height,40px);top:var(--loading-open-top,calc(var(--app-safe-top,env(safe-area-inset-top,0px)) + 10px));border-radius:999px}
#global-loading.is-large{width:190px}#global-loading.is-large>small{font-size:15px}#global-loading.is-large>span{width:26px;height:26px;border-width:3px}
#global-loading.is-collapsed,#global-loading.is-docked{width:var(--loading-dock-size,40px);height:var(--loading-dock-size,40px)}
#global-loading.is-docked{top:var(--loading-dock-y,34px)}

.auth-loading-screen{min-height:calc(100dvh - 160px);display:grid;place-items:center;padding:24px}.auth-loading-card{width:min(100%,380px);display:flex;flex-direction:column;align-items:center;gap:22px;padding:40px 24px;border:1px solid #ffffffd9;border-radius:28px;background:var(--app-glass-surface,#fff8faa6);backdrop-filter:var(--app-glass-filter,blur(24px));-webkit-backdrop-filter:var(--app-glass-filter,blur(24px));box-shadow:0 18px 60px #64162b12;text-align:center}.auth-loading-card p{margin:0;font-size:16px;font-weight:650;color:var(--burgundy,#64162b)}.auth-loading-spinner{display:block;width:48px;height:48px;border:3px solid #cf2c5026;border-top-color:#cf2c50;border-radius:50%;animation:fc-loading .8s linear infinite}@media(prefers-reduced-motion:reduce){.auth-loading-spinner{animation-duration:2s}}

/* A pending event has one full-width verification surface. */
#app :is(.organizer-workspace #ops-content,.be-event-view)>.panel:has(>[data-event-verification]){width:100%;max-width:none;grid-column:1/-1;margin-inline:0}

/* Foreground loading appears in its final header slot, without travel. */
#global-loading,#global-loading.is-docked{transition:opacity .15s ease;transform:translate(-50%,-50%)}

/* Hide replacement controls even when a render recreates them mid-request. */
body.has-loading-island:not(.loading-on-bell) .chrome-bell,body.has-loading-island:not(.loading-on-bell) .chrome-bell *{opacity:0!important;visibility:hidden!important;pointer-events:none!important}

/* Loading island = notification bell (v394): the same box and the same icon size, incl. stroke, on every viewport, in the
   app and the demo. runtime-controls.js copies the measured bell into --loading-dock-size/--loading-icon-size. */
:root{--chrome-bell-size:50px;--chrome-bell-icon-size:24px}
#global-loading.is-collapsed,#global-loading.is-docked{width:var(--loading-dock-size,var(--chrome-bell-size));height:var(--loading-dock-size,var(--chrome-bell-size))}
#global-loading>span,#global-loading.is-large>span{box-sizing:border-box;width:var(--loading-icon-size,var(--chrome-bell-icon-size));height:var(--loading-icon-size,var(--chrome-bell-icon-size));border-width:2px}
/* v398: action buttons in toolbars, dialogs and form footers keep their label on one line as well. */
:is(.form-actions,.portal-dialog-actions)>:is(button,a,.button){white-space:nowrap}
/* v399: the app-wide button rule `.product-host #app :is(a.ghost,button.ghost,.button):not([hidden])` (white-space:normal,
   overflow-wrap:anywhere) outranked the one-line rule above, so "Update veröffentlichen" still wrapped. Action rows win here. */
.product-host #app :is(.page-actions,.profile-editor-actions,.portal-dialog-actions,.auth-actions,.ow-actions,.form-actions)>:is(a,button,.button):not([hidden]){white-space:nowrap;overflow-wrap:normal}
/* v454: inline code section below the email field */
#app .auth-code-section{display:grid;grid-template-rows:1fr;opacity:1;transition:grid-template-rows .3s ease,opacity .25s ease}
#app .auth-code-inner{overflow:hidden;min-height:0}
#app .auth-code-section.expanding{animation:auth-code-expand .32s ease backwards}
#app .auth-code-section.collapsing{grid-template-rows:0fr;opacity:0}
#app .auth-code-note{margin:2px 0 0;color:var(--muted);font-size:14px}
@keyframes auth-code-expand{from{grid-template-rows:0fr;opacity:0}to{grid-template-rows:1fr;opacity:1}}
@media (prefers-reduced-motion:reduce){#app .auth-code-section,#app .auth-code-section.expanding{animation:none;transition:none}}
/* v457: the code field gets no browser focus ring, selection or autofill tint; a subtle app border instead */
#app #auth-code,#app #auth-code:focus,#app #auth-code:focus-visible{outline:none;box-shadow:none;-webkit-tap-highlight-color:transparent}
#app #auth-code:focus{border-color:#bd33566b;background:#fff}
#app #auth-code::selection{background:transparent}
#app #auth-code:-webkit-autofill,#app #auth-code:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 40px #fff inset;-webkit-text-fill-color:var(--ink);transition:background-color 9999s}
#app #auth-code:autofill{background:#fff}
/* v457: neutral welcome heading with a soft brand accent and a gentle entrance */
#app #login-form .auth-hello{background:linear-gradient(110deg,var(--burgundy) 0%,var(--wine) 45%,var(--red) 100%);-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
#app #login-form .auth-hello.enter{animation:auth-hello-in .5s cubic-bezier(.2,.8,.25,1) both}
#app #login-form .auth-hello.enter+.sub{animation:auth-hello-in .5s .08s cubic-bezier(.2,.8,.25,1) both}
@keyframes auth-hello-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){#app #login-form .auth-hello,#app #login-form .auth-hello.enter+.sub{animation:none}}
/* v460: team login heading pill */
#app #login-form .auth-admin-pill{display:inline-block;vertical-align:middle;margin-left:8px;padding:3px 10px;border-radius:999px;font-size:.38em;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#fff;-webkit-text-fill-color:#fff;background:linear-gradient(110deg,var(--wine),var(--red));position:relative;top:-.15em}
#app #login-form .auth-team-nowrap{white-space:nowrap}
@media (min-width:480px){#app #login-form .auth-hello:has(.auth-admin-pill){white-space:nowrap;text-wrap:nowrap}}
/* v502 Eventhistorie: standard 36pt gap under the bar, month groups and compact memory cards. */
html body.app-host #app>.history-page{padding-top:0!important;margin-top:0!important}
html body.app-host #app>.history-page>.app-head{margin:0!important;padding:0!important}
.history-page .history-body{display:grid;gap:22px;max-width:760px;margin:0 auto;width:100%}
.history-summary{margin:0;color:#8a6170;font-size:14px;font-weight:600}
.history-month h2{margin:0 0 10px 4px;font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:#a0566e}
.history-list{display:grid;gap:10px}
.history-item{display:flex;align-items:center;gap:14px;padding:12px;border-radius:var(--fc-sheet-radius,28px);background:linear-gradient(135deg,#ffffffd9,#fff4f8c7);border:1px solid #f3dbe3;box-shadow:0 10px 30px #64162b0d;color:inherit;text-decoration:none;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
.history-thumb{flex:none;display:grid;place-items:center;align-content:center;width:76px;height:76px;border-radius:20px;overflow:hidden;background:linear-gradient(145deg,#cf2c50,#64162b);color:#fff}
.history-thumb img{width:100%;height:100%;object-fit:cover}.history-thumb b{font-size:26px;line-height:1}.history-thumb small{font-size:12px;text-transform:uppercase;opacity:.85}
.history-text{display:grid;gap:2px;min-width:0;flex:1}.history-text b{font-size:16px;color:#3b1220;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.history-text small{color:#7a5a66;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.history-text i{justify-self:start;margin-top:4px;padding:3px 9px;border-radius:999px;background:#fbe3ea;color:#a12546;font:600 11px/1.4 system-ui;font-style:normal}
.history-chevron{flex:none;font-size:26px;color:#c48a9c;padding-right:4px}
/* v504 history: first card at the same top offset as every other tab (summary moves below the list, first month label inline) */
.history-body{display:flex;flex-direction:column}
.history-body>.history-summary{order:9;margin:14px 0 0!important;text-align:center}
.history-body>.history-month:first-of-type>h2{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.history-body>.history-month:first-of-type{margin-top:0!important;padding-top:0!important}
/* v504 history empty state: memories timeline */
.history-empty-v2 .he-card{box-sizing:border-box;width:min(100%,520px);margin:0 auto;padding:22px 20px 22px;text-align:center;border-radius:var(--fc-sheet-radius,30px);background:linear-gradient(160deg,#fff7e8 0%,#fdeee4 45%,#f3e6f7 100%);box-shadow:inset 0 1px .5px rgba(255,255,255,.9),0 18px 44px rgba(110,60,20,.12)}
.history-empty-v2 .he-visual{position:relative;height:170px;margin:0 auto 10px;max-width:300px}
.he-line{position:absolute;left:8%;right:8%;top:140px;border-top:2px dashed rgba(166,110,40,.45)}
.he-dot{position:absolute;top:134px;width:12px;height:12px;border-radius:50%;background:#d6a24a;box-shadow:0 0 0 4px rgba(214,162,74,.2)}
.he-dot-0{left:calc(18% - 6px)}.he-dot-1{left:calc(50% - 6px)}.he-dot-2{left:calc(82% - 6px)}
.he-now{background:#cf2c50;box-shadow:0 0 0 0 rgba(207,44,80,.4);animation:he-pulse 2.2s ease-out infinite}
.he-polaroid{position:absolute;top:8px;width:78px;padding:6px 6px 8px;background:#fff;border-radius:10px;box-shadow:0 10px 24px rgba(90,50,20,.18);display:grid;gap:5px;justify-items:center}
.he-polaroid img{width:66px;height:72px;object-fit:cover;border-radius:6px;filter:sepia(.25) saturate(.9)}
.he-polaroid small{font-size:10.5px;font-weight:600;color:#8a5a2a;white-space:nowrap}
.he-p0{left:calc(18% - 45px);transform:rotate(-7deg)}.he-p1{left:calc(50% - 45px);top:0;transform:rotate(3deg)}
.he-p2{left:calc(82% - 45px);transform:rotate(8deg);background:rgba(255,255,255,.55);border:2px dashed rgba(207,44,80,.45);box-shadow:none}
.he-p2 b{display:grid;place-items:center;width:66px;height:72px;font-size:30px;color:#cf2c50}
.he-kicker{display:block;font-size:12px;letter-spacing:.08em;text-transform:uppercase;font-weight:700;color:#b07a2e}
.history-empty-v2 h1{margin:4px 0 6px;font-size:24px;line-height:1.15;color:#5a2a14}
.history-empty-v2 p{margin:0 auto 16px;max-width:32ch;color:#7a5a48}
.history-empty-v2 .he-cta{display:inline-flex;justify-content:center;min-width:220px}
@keyframes he-pulse{70%{box-shadow:0 0 0 10px rgba(207,44,80,0)}100%{box-shadow:0 0 0 0 rgba(207,44,80,0)}}
@media(prefers-reduced-motion:reduce){.he-now{animation:none}}
/* v512 history empty: three identical polaroids on a 3-column grid, timeline dots centred under each card */
.history-empty-v2 .he-visual{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:auto 26px;align-items:end;justify-items:center;height:auto;max-width:300px;margin:0 auto 12px;position:relative}
.history-empty-v2 .he-polaroid{position:relative!important;left:auto!important;top:auto!important;grid-row:1;width:84px;box-sizing:border-box;padding:6px 6px 8px;border:0!important}
.history-empty-v2 .he-p0{grid-column:1;transform:rotate(-6deg)}.history-empty-v2 .he-p1{grid-column:2;transform:rotate(3deg) translateY(-6px)}.history-empty-v2 .he-p2{grid-column:3;transform:rotate(7deg)}
.history-empty-v2 .he-polaroid img,.history-empty-v2 .he-p2 b{width:72px;height:76px;box-sizing:border-box;border-radius:6px}
.history-empty-v2 .he-p2{background:#fff;box-shadow:0 10px 24px rgba(90,50,20,.12)}
.history-empty-v2 .he-p2 b{display:grid;place-items:center;font-size:28px;color:#cf2c50;background:rgba(207,44,80,.06);border:2px dashed rgba(207,44,80,.4)}
.history-empty-v2 .he-polaroid small{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;font-size:10.5px}
.history-empty-v2 .he-line{position:absolute;left:16.67%;right:16.67%;top:auto;bottom:12px;border-top:2px dashed rgba(166,110,40,.45)}
.history-empty-v2 .he-dot{position:relative;left:auto!important;top:auto;grid-row:2;align-self:center;width:12px;height:12px}
.history-empty-v2 .he-dot-0{grid-column:1}.history-empty-v2 .he-dot-1{grid-column:2}.history-empty-v2 .he-dot-2{grid-column:3}
/* v512 legal & contact pages as in-app screens: 36pt gap under the title bar, standard panels, no website eyebrow,
   contact addresses as tidy tap-to-reveal rows instead of blurred pills */
html.fc-inapp body.app-host #app .legal{padding:36px 16px 24px!important;margin:0 auto!important;max-width:640px}
html.fc-inapp body.app-host #app .legal>.eyebrow,html.fc-inapp body.app-host #app .legal>h1{display:none!important}
html.fc-inapp body.app-host #app .legal>.intro{font-size:15px;line-height:1.45;margin:0 4px 18px;color:#7a5a66}
html.fc-inapp body.app-host #app .legal :is(.legal-card,.contact-support-hero){margin:0 0 12px!important;padding:18px!important;border:0!important;border-radius:var(--fc-sheet-radius,28px)!important;background:rgba(255,255,255,.72)!important;box-shadow:none!important;-webkit-backdrop-filter:blur(20px) saturate(170%);backdrop-filter:blur(20px) saturate(170%)}
html.fc-inapp body.app-host #app .legal .contact-grid{display:block!important;margin:0!important}
html.fc-inapp body.app-host #app .legal .contact-compact-title{margin:22px 16px 8px;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.02em;color:#8a6a76}
html.fc-inapp body.app-host #app .legal .contact-grid .legal-card>span{display:none}
html.fc-inapp body.app-host #app .legal .contact-grid .legal-card h2{font-size:17px;margin:0 0 4px}
html.fc-inapp body.app-host #app .legal .contact-grid .legal-card p{font-size:14px;line-height:1.4;margin:0 0 10px;color:#6e5a62}
html.fc-inapp body.app-host #app .legal .email-link{all:unset;box-sizing:border-box;display:flex;align-items:center;gap:12px;width:100%;min-height:48px;padding:10px 12px;border-radius:14px;background:rgba(118,118,128,.08);color:#1c1c1e;font-size:15px;font-weight:500;cursor:pointer;text-decoration:none;position:relative}
html.fc-inapp body.app-host #app .legal .email-link::before{content:"";flex:none;width:30px;height:30px;border-radius:50%;background:rgba(10,132,255,.14) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230a84ff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2.5'/%3E%3Cpath d='m4 7 8 6 8-6'/%3E%3C/svg%3E") center/16px no-repeat}
html.fc-inapp body.app-host #app .legal .email-link::after{content:"";margin-left:auto;flex:none;width:7px;height:7px;border-right:2px solid #c4c4c7;border-top:2px solid #c4c4c7;transform:rotate(45deg);margin-right:4px}
html.fc-inapp body.app-host #app .legal button.email-link .email-obscured{display:none}
html.fc-inapp body.app-host #app .legal button.email-link>span:not(.email-obscured),html.fc-inapp body.app-host #app .legal button.email-link{}
html.fc-inapp body.app-host #app .legal button.email-link:not(:has(.fc-reveal))::before{flex:none}
html.fc-inapp body.app-host #app .legal button.email-link{color:#0a84ff}
html.fc-inapp body.app-host #app .legal button.email-link:empty::marker{content:none}
button.email-link .fc-reveal{display:none}
html.fc-inapp body.app-host #app .legal button.email-link .fc-reveal{display:inline}
/* v512 event card distance: small muted meta with a location glyph */
.event-card .event-km{display:inline-flex;align-items:center;gap:4px;margin:0 10px 0 0;font-size:13px;font-weight:600;color:#a0566c;vertical-align:middle}
.event-card .event-km::before{content:"";width:11px;height:13px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22s7-6.2 7-12a7 7 0 0 0-14 0c0 5.8 7 12 7 12Zm0-9.4a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22s7-6.2 7-12a7 7 0 0 0-14 0c0 5.8 7 12 7 12Zm0-9.4a2.6 2.6 0 1 0 0-5.2 2.6 2.6 0 0 0 0 5.2Z'/%3E%3C/svg%3E") center/contain no-repeat}
/* v513 organizer + date chips: always two lines (organizer, then date), 8pt apart, one consistent glass chip style with icons */
:is(.event-overview-copy,.event-card .event-body) .event-organizer{display:flex!important;width:fit-content;max-width:100%;box-sizing:border-box;margin:10px 0 0!important;min-height:34px;padding:7px 12px 7px 10px!important;gap:7px;align-items:center;border-radius:12px!important;font-size:14px!important;font-weight:700;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
:is(.event-overview-copy,.event-card .event-body) .event-organizer::before{content:""!important;display:block!important;flex:none;width:15px;height:15px;background:currentColor;-webkit-mask:var(--fc-ico-org) center/contain no-repeat;mask:var(--fc-ico-org) center/contain no-repeat}
.event-overview-copy .event-date{display:flex!important;width:fit-content;max-width:100%;box-sizing:border-box;margin:8px 0 0!important;min-height:34px;padding:7px 12px 7px 10px!important;gap:7px;align-items:center;border-radius:12px!important;font-size:14px!important;font-weight:600;line-height:1.2}
.event-overview-copy .event-date::before{content:"";flex:none;width:15px;height:15px;background:currentColor;-webkit-mask:var(--fc-ico-cal) center/contain no-repeat;mask:var(--fc-ico-cal) center/contain no-repeat}
.event-overview-copy :is(.event-organizer,.event-date){color:#fff!important;background:rgba(30,8,16,.38)!important;border:.5px solid rgba(255,255,255,.35)!important;-webkit-backdrop-filter:blur(16px) saturate(170%);backdrop-filter:blur(16px) saturate(170%);box-shadow:inset 0 1px .5px rgba(255,255,255,.25),0 4px 14px rgba(0,0,0,.18)!important;text-shadow:0 1px 2px rgba(0,0,0,.25)}
.event-card .event-body .event-organizer{color:#6b2a40!important;background:rgba(255,248,250,.9)!important;border:.5px solid #ecd0da!important}
:root{--fc-ico-org:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 21V5a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v16M15 9h4a1 1 0 0 1 1 1v11M3 21h18M8 8h3M8 12h3M8 16h3'/%3E%3C/svg%3E");--fc-ico-cal:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3.5' y='5' width='17' height='15.5' rx='3'/%3E%3Cpath d='M3.5 10h17M8 3v4M16 3v4'/%3E%3C/svg%3E")}
/* v513 event list rhythm: search row → chips → first card share one 16pt gap (was ~47pt under the chips) */
html body .product-events [data-event-quick-categories] .event-category-chips{padding:4px 1px 12px!important;margin:-4px 0 4px!important}
html body .product-events .event-grid{margin-top:0!important}
/* v519 app rule (Daniel): primary action buttons (Senden, Speichern, Weiter …) never float or stick over the content.
   They sit at the end of the form/content flow, above the tab bar clearance, and scroll with the page. */
html body #app :is(.profile-direct-editor,.group-profile-editor) .profile-direct-actions.page-actions,
html body :is(#app,.portal-dialog) .page-actions:is(.panel-confirm-dialog[open]>form>footer),
html body .panel-confirm-dialog[open]>form>footer{position:static!important;bottom:auto!important;transform:none!important;margin-bottom:0!important;background:transparent!important}
html body #app :is(.page-actions,.sp-sticky,.profile-direct-actions){position:static!important}

/* v549: app bell keeps showing while loading; the same brand spinner arc runs as a ring around the bell button */
#global-loading.on-bell,#global-loading.on-bell.is-docked{width:calc(var(--loading-dock-size,44px) + 8px)!important;height:calc(var(--loading-dock-size,44px) + 8px)!important;padding:0!important;background:none!important;border:0!important;box-shadow:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important;pointer-events:none}
#global-loading.on-bell>span{width:100%!important;height:100%!important;border-width:2px!important;box-sizing:border-box}
#global-loading.on-bell>small{display:none}
