/* Request labels must have real space: the former arrow column was 34px wide.
   Keep the full action readable instead of clipping it or shrinking the type. */
.p31-deals .v27-clean-deal-card {
  grid-template-columns: 116px minmax(0, 1fr) minmax(0, 9rem);
}

.p31-deals .p38-open-request {
  min-width: 0;
  max-width: 100%;
  justify-self: end;
  text-align: right;
  white-space: normal;
  overflow-wrap: anywhere;
  line-height: 1.45;
}

.p31-deals .v27-clean-deal-copy :is(h2, p, small) {
  white-space: normal;
  overflow-wrap: anywhere;
}

.p31-deals .v27-clean-deal-top { flex-wrap: wrap; }
.p31-deals .v27-status-pill {
  box-sizing: border-box;
  max-width: 100%;
  white-space: normal;
  overflow-wrap: anywhere;
}

/* Grid and flex children may shrink with their card. Intrinsic text widths,
   including long names and translated labels, must not widen the page. */
.brand-workspace :is(.p33-intro-body, .p33-intro-body > *,
  [data-existing-athlete-requests], .partnership-review-footer,
  .partnership-budget, .partnership-budget > *, .partnership-composer,
  .partnership-composer > *, .p31-campaign-focus, .p31-campaign-requests,
  .p31-inline-actions, .bw-head-actions, .bt-steps, .bt-steps > button) {
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}

.brand-workspace .p33-intro-body {
  grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr);
}

.brand-workspace :is([data-existing-athlete-requests], .partnership-budget) {
  grid-template-columns: minmax(0, 1fr);
}

.brand-workspace :is([data-existing-request], [data-review-proposal],
  [data-open-placement], .p31-inline-actions > button, .bw-head-actions > button),
.form-partnership-dialog :is(.p31-action-stack button, .partnership-admin > button) {
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
  height: auto;
  min-height: 44px;
  padding: 10px 14px;
  font-size: 14px;
  line-height: 20px;
  white-space: normal;
  overflow-wrap: anywhere;
}

.brand-workspace :is([data-existing-request], [data-review-proposal], [data-open-placement]) {
  width: 100%;
}

.brand-workspace [data-existing-request] { text-align: left; }
.brand-workspace [data-review-proposal] { text-align: center; }

.brand-workspace :is(.bw-head-actions, .p31-inline-actions) {
  flex-wrap: wrap;
}

.brand-workspace :is(.partnership-row, .partnership-extra, .partnership-row-date) {
  min-inline-size: 0;
}

.brand-workspace :is(.partnership-budget h3, .partnership-composer h3,
  .p33-intro-body h2, .p33-intro-body p, .p33-intro-body dd) {
  overflow-wrap: anywhere;
}

/* Campaign rows keep the athlete, all selected zones and amount inside the row. */
.p31-campaign-requests > button,
.p31-campaign-requests > button > span {
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
  white-space: normal;
  overflow-wrap: anywhere;
}

.p31-campaign-requests > button > b {
  min-width: 0;
  font-variant-numeric: tabular-nums;
  overflow-wrap: anywhere;
}

/* Request dialogs are mounted outside the workspace. Give their actions their
   own bounds, with wrapping rows when the available width is too small. */
.form-partnership-dialog .form-dialog-actions { flex-wrap: wrap; }

.form-partnership-dialog .form-dialog-actions > :is(.v29-main-btn, .v29-ghost-btn) {
  flex: 1 1 160px;
  min-width: 0;
  max-width: 100%;
  white-space: normal;
  overflow-wrap: anywhere;
  text-align: center;
}

.form-partnership-dialog :is(.p31-action-stack, .p31-action-stack > *,
  .partnership-summary, .partnership-correspondence, .partnership-admin) {
  min-width: 0;
  max-width: 100%;
}

.form-partnership-dialog .partnership-admin > button { margin-right: 0; }

@media (max-width: 760px) {
  .brand-workspace .p33-intro-body { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 600px) {
  .p31-deals .v27-clean-deal-card {
    grid-template-columns: 78px minmax(0, 1fr);
  }

  .p31-deals .p38-open-request {
    grid-column: 2;
    justify-self: start;
    text-align: left;
  }

  .p31-campaign-requests > button {
    display: grid;
    grid-template-columns: 70px minmax(0, 1fr);
    gap: 8px 12px;
  }

  .p31-campaign-requests > button > b { grid-column: 2; }

  .brand-workspace .p33-intro-body > aside { padding: 18px; }
}

/* Access preferences must win even over high-specificity legacy and pill rules.
   Match all control states; reduction does not depend on a control being idle. */
html[data-theme][data-app-motion="reduced"] :is(#app,body) :is(button,label,a)[data-elan-control],
html[data-theme][data-app-motion="reduced"] :is(#app,body) :is(button,label,a)[data-elan-control]::before,
html[data-theme][data-app-motion="reduced"] :is(#app,body) :is(button,label,a)[data-elan-control]::after {
  transition: none !important;
  animation: none !important;
}
@media (prefers-reduced-motion: reduce) {
  html:root[data-theme] :is(#app,body) :is(button,label,a)[data-elan-control],
  html:root[data-theme] :is(#app,body) :is(button,label,a)[data-elan-control]::before,
  html:root[data-theme] :is(#app,body) :is(button,label,a)[data-elan-control]::after {
    transition: none !important;
    animation: none !important;
  }
}

/* Give the entire action group a new line instead of squeezing its buttons
   into the few pixels left beside a page heading. */
@media (max-width: 600px) {
  html[data-theme] #app .brand-workspace :is(.bw-head,.bw-section-head) {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    align-items: flex-start;
  }
  html[data-theme] #app .brand-workspace .bw-head > div:first-child {
    flex: 1 1 100%;
    min-width: 0;
    max-width: 100%;
  }
  html[data-theme] #app .brand-workspace .bw-head-actions {
    flex: 1 1 100%;
    width: 100%;
    min-width: 0;
    justify-content: flex-start;
  }
  html[data-theme] #app .brand-workspace .bw-head-actions > [data-elan-control] {
    flex: 0 1 auto !important;
    width: auto !important;
    max-width: 100% !important;
  }
}

/* A translated skip link can wrap above the viewport. Clip it while unfocused
   rather than relying on a percentage transform of its own changing height. */
html #app > a.p31-skip:not(:focus) {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  clip-path: inset(50%) !important;
  overflow: hidden !important;
  white-space: nowrap !important;
}
html #app > a.p31-skip:focus {
  position: fixed !important;
  inset: 8px auto auto 16px !important;
  z-index: 11000;
  width: auto;
  height: auto;
  max-width: calc(100vw - 32px);
  clip-path: none !important;
  transform: none !important;
}

/* Table actions and help entries are controls too, but keep tables tabular. */
html[data-theme] #app .v29-app .bw-table th button {
  color: var(--es-ink) !important;
  min-height: 44px;
  font-size: calc(.875rem * var(--elan-ui-scale,1));
  line-height: 1.4;
  text-decoration: underline;
  text-underline-offset: 4px;
  padding: 8px 0;
}
html[data-theme] #app .v29-app .bg-entry button {
  color: var(--es-accent-ink) !important;
  border-color: var(--es-line) !important;
  border-radius: 999px;
  font-size: calc(.875rem * var(--elan-ui-scale,1));
  font-weight: 550;
}

/* Wrap the whole capsule before wrapping its label. Fixed equal flex shares
   used to turn short photo actions into unnecessarily tall oval buttons. */
html[data-theme] #app .v29-app :is(.v29-page-actions,.bw-head-actions,.p31-inline-actions,.eu-actions)>:is(button,label,a)[data-elan-control] {
  flex: 0 0 auto !important;
  width: fit-content !important;
  min-width: 0 !important;
  max-width: 100% !important;
}

/* Shared pill decoration must not turn an overlay upload into relative text.
   Centre without transforms so the no-bounce action rule cannot displace it.
   It is the only control on an empty slot, so it sits in the middle, visible without scrolling. */
html[data-theme] #app .v29-app .elan-photo-card__media > .elan-photo-card__add[data-elan-control] {
  position: absolute !important;
  left: 12px !important;
  right: 12px !important;
  bottom: 16px !important;
  top: 16px !important;
  width: fit-content !important;
  inline-size: fit-content !important;
  height: max-content !important;
  max-width: calc(100% - 24px) !important;
  max-inline-size: calc(100% - 24px) !important;
  margin: auto !important;
  transform: none !important;
}
/* Emphasis in a page title is text, not a faint decorative surface. */
html[data-theme] #app .v29-app :is(.v29-page-head,.bw-head) h1 em {
  color: var(--es-muted) !important;
  opacity: 1 !important;
}

/* Leave enough room for all four short agreement filters at standard iPhone
   width. Labels and hit targets keep their size; enlarged text may still wrap. */
html[data-theme] #app .v29-app .ac-deals .ac-filters>button[data-elan-control] {
  padding-inline: 7px !important;
}

/* SOMAGON tab bar: shared rules. Portrait floats as a glass capsule (end of this file); landscape is a rail. */
html[data-theme] #app .v29-app nav.en-tabbar{
 --en-tab-ink:#F5F4F8;--en-tab-muted:#B4AEC2;--en-tab-surface:#0F0C14;--en-tab-line:#2F293B;
 box-sizing:border-box!important;position:fixed;left:0;right:0;bottom:0;transform:none!important;
 /* Five named destinations for each role, always centred. */
 display:grid;grid-template-columns:none!important;grid-auto-flow:column!important;grid-auto-columns:minmax(0,1fr)!important;gap:0!important;
 width:100%!important;max-width:none!important;height:auto!important;min-height:56px!important;
 padding:0 max(8px,env(safe-area-inset-right,0px),calc((100% - 560px)/2)) env(safe-area-inset-bottom,0px) max(8px,env(safe-area-inset-left,0px),calc((100% - 560px)/2))!important;
 border:0!important;border-top:1px solid var(--en-tab-line)!important;border-radius:0!important;
 background:var(--en-tab-surface)!important;box-shadow:none!important;backdrop-filter:none!important;
}
html[data-theme="light"] #app .v29-app nav.en-tabbar{--en-tab-ink:#17131F;--en-tab-muted:#5E5670;--en-tab-surface:#fff;--en-tab-line:#DDD9E6;}
html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]{
 box-sizing:border-box!important;position:relative;display:flex!important;flex-direction:column;align-items:center;justify-content:flex-start;
 min-width:44px!important;min-height:55px!important;width:100%!important;height:auto!important;margin:0!important;padding:7px 2px!important;gap:3px!important;
 border:0!important;border-radius:0!important;background:transparent!important;color:var(--en-tab-muted)!important;
 box-shadow:none!important;text-shadow:none!important;filter:none!important;transform:none!important;
 font-weight:400!important;letter-spacing:0!important;touch-action:manipulation;-webkit-tap-highlight-color:transparent;
 transition:none!important;
}
html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]:is(.active,[aria-current="page"]){color:var(--en-tab-ink)!important;background:transparent!important;}
html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]:is(:hover,:active){background:transparent!important;}
html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]:focus-visible{outline:2px solid var(--en-tab-ink)!important;outline-offset:-4px!important;border-radius:10px!important;}
html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]>.en-tab-icon{
 display:block;width:24px!important;height:24px!important;min-width:24px!important;flex:0 0 24px;margin:0!important;
 overflow:visible;transform-origin:center;transform-box:fill-box;transform:scale(1);stroke-width:1.65!important;
 transition:transform 160ms cubic-bezier(.2,.7,.25,1)!important;
}
html[data-theme] #app .v29-app nav.en-tabbar .en-tab-outline{display:block;}
html[lang][data-theme] #app .v29-app nav.en-tabbar .p36-nav-label{
 position:static!important;display:block;width:auto!important;height:auto!important;max-width:100%;padding:0!important;margin:0!important;clip-path:none!important;overflow:visible!important;
 color:inherit!important;font-family:var(--elan-ui-font,system-ui)!important;font-size:calc(.6875rem * var(--elan-ui-scale,1))!important;
 font-weight:400!important;line-height:1.2!important;letter-spacing:0!important;text-transform:none!important;text-align:center;
 white-space:normal!important;word-break:normal!important;overflow-wrap:anywhere!important;hyphens:auto;
}
html[lang][data-theme] #app .v29-app nav.en-tabbar>button[aria-current="page"] .p36-nav-label{font-weight:600!important;}
html[data-theme] #app .v29-app nav.en-tabbar .p36-nav-dot{box-sizing:content-box;width:5px;height:5px;top:5px;left:calc(50% + 9px);border:2px solid var(--en-tab-surface);background:#d84655;pointer-events:none;}
/* Enlarge labels naturally; never hide a destination or shrink its hit target. */
html[data-theme] #app .v29-app:has(nav.en-tabbar){--form-nav-height:56px;}
@media(prefers-reduced-motion:no-preference){
 html:not([data-app-motion="reduced"])[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]:active>.en-tab-icon{transform:scale(.9)!important;}
}
html[data-app-motion="reduced"][data-theme] #app .v29-app nav.en-tabbar>button[data-nav]>.en-tab-icon{transition:none!important;animation:none!important;transform:none!important;}
@media(prefers-reduced-motion:reduce){html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]>.en-tab-icon{transition:none!important;animation:none!important;transform:none!important;}}

/* Keep touch targets usable on 320px phones.
   At larger text sizes all icons remain top-aligned while labels may wrap. */
@media(max-width:360px){
 html[data-theme] #app .v29-app nav.en-tabbar{grid-template-columns:none!important;grid-auto-flow:column!important;grid-auto-columns:minmax(44px,1fr)!important;justify-content:stretch!important;padding-inline:env(safe-area-inset-left,0px) env(safe-area-inset-right,0px)!important;}
 html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]{padding-inline:0!important;}
}
/* Long labels (« Emplacements », « Partenariats », « Mes finances ») stay on one line at 11px whenever the bar fits
   (otherwise brand-visual.js sets data-tight and labels wrap). Columns stay equal whenever they can;
   on the narrowest phones the longest label takes a few pixels from its shorter neighbours (44px minimum each). */
@media(max-width:430px){
 html[data-theme] #app .v29-app nav.en-tabbar:not([data-tight]){grid-template-columns:none!important;grid-auto-flow:column!important;grid-auto-columns:minmax(max-content,1fr)!important;justify-content:stretch!important;}
 html[data-theme] #app .v29-app nav.en-tabbar:not([data-tight])>button[data-nav]{min-width:44px!important;padding-inline:2px!important;}
 html[lang][data-theme] #app .v29-app nav.en-tabbar:not([data-tight]) .p36-nav-label{white-space:nowrap!important;overflow-wrap:normal!important;hyphens:none!important;}
 html[lang][data-theme] #app .v29-app nav.en-tabbar[data-small] .p36-nav-label{font-size:calc(.625rem * var(--elan-ui-scale,1))!important;}
 html[data-theme] #app .v29-app nav.en-tabbar[data-small]>button[data-nav]{padding-inline:1px!important;}
}

/* Portrait: the bar floats like the Instagram menu. A glass capsule above the bottom edge: the page scrolls
   underneath and shows through, blurred. The current destination glows. Scrolling down folds the
   labels away and makes the capsule a little smaller; scrolling up, or back at the top, unfolds it
   (ui-controls.js sets html[data-nav-compact]). Icons, labels, badges and 44px targets are unchanged.
   The landscape rail (landscape-nav.css) keeps its own layout. */
@media not all and (orientation:landscape) and (min-width:900px){
 html[data-theme] #app .v29-app:has(nav.en-tabbar){--form-nav-height:72px;}
 html[data-theme] #app .v29-app nav.en-tabbar{
  --en-tab-surface:#1A1622;--en-tab-glass:rgba(26,22,34,.72);--en-tab-glow:rgba(149,111,255,.85);--en-tab-edge:rgba(255,255,255,.12);
  --en-tab-shadow:0 12px 32px rgba(0,0,0,.34);
  --en-tab-side:max(12px,env(safe-area-inset-left,0px),env(safe-area-inset-right,0px),calc((100% - 560px)/2));
  left:var(--en-tab-side)!important;right:var(--en-tab-side)!important;bottom:calc(env(safe-area-inset-bottom,0px) + 8px)!important;width:auto!important;
  min-height:0!important;padding:6px!important;gap:2px!important;
  border:1px solid var(--en-tab-edge)!important;border-radius:32px!important;
  background:var(--en-tab-glass)!important;
  -webkit-backdrop-filter:blur(22px) saturate(180%)!important;backdrop-filter:blur(22px) saturate(180%)!important;
  box-shadow:var(--en-tab-shadow)!important;
  transform:none!important;transform-origin:50% 100%;
  transition:transform .3s cubic-bezier(.2,.7,.25,1),padding .3s cubic-bezier(.2,.7,.25,1)!important;
 }
 html[data-theme="light"] #app .v29-app nav.en-tabbar{--en-tab-surface:#F6F4FA;--en-tab-glass:rgba(255,255,255,.78);--en-tab-glow:rgba(95,64,238,.6);--en-tab-edge:rgba(23,19,31,.10);--en-tab-shadow:0 12px 32px rgba(23,19,31,.16);}
 html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]{min-height:52px!important;padding-block:6px!important;border-radius:26px!important;transition:padding .3s cubic-bezier(.2,.7,.25,1)!important;}
 /* The current destination glows (its colour and a soft halo), with no tile around it. */
 html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]:is(.active,[aria-current="page"])>.en-tab-icon{filter:drop-shadow(0 0 2px var(--en-tab-glow)) drop-shadow(0 0 7px var(--en-tab-glow))!important;}
 html[lang][data-theme] #app .v29-app nav.en-tabbar>button[data-nav]:is(.active,[aria-current="page"]) .p36-nav-label{text-shadow:0 0 10px var(--en-tab-glow)!important;}
 html[data-theme] #app .v29-app nav.en-tabbar>button[data-nav]:focus-visible{border-radius:26px!important;}
 html[lang][data-theme] #app .v29-app nav.en-tabbar .p36-nav-label{max-height:3.6em;transition:max-height .3s cubic-bezier(.2,.7,.25,1),opacity .2s ease!important;}
 /* Small phones (320–360 px): a closer edge and a thinner rim keep every label on one line. */
 @media(max-width:360px){html[data-theme] #app .v29-app nav.en-tabbar{--en-tab-side:max(8px,env(safe-area-inset-left,0px),env(safe-area-inset-right,0px));padding:4px!important;gap:0!important;}html[data-theme] #app .v29-app nav.en-tabbar:not([data-tight])>button[data-nav]{padding-inline:0!important;}}
 /* Folded while scrolling down: icons only, a slightly smaller capsule; the targets stay 44px or more. */
 html[data-nav-compact][data-theme] #app .v29-app nav.en-tabbar{padding:4px!important;transform:scale(.94)!important;}
 html[data-nav-compact][data-theme] #app .v29-app nav.en-tabbar>button[data-nav]{min-height:48px!important;padding-block:12px!important;gap:0!important;justify-content:center!important;}
 html[data-nav-compact][lang][data-theme] #app .v29-app nav.en-tabbar .p36-nav-label{max-height:0!important;opacity:0!important;overflow:hidden!important;}
 html[data-app-motion="reduced"][data-theme] #app .v29-app nav.en-tabbar,html[data-app-motion="reduced"][data-theme] #app .v29-app nav.en-tabbar :is(button[data-nav],.p36-nav-label){transition:none!important;}
 @media(prefers-reduced-motion:reduce){html[data-theme] #app .v29-app nav.en-tabbar,html[data-theme] #app .v29-app nav.en-tabbar :is(button[data-nav],.p36-nav-label){transition:none!important;}}
}
/* Browsers without backdrop blur get an opaque bar, so labels never sit on unreadable content. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
 html[data-theme] #app .v29-app nav.en-tabbar{background:var(--en-tab-surface)!important;}
}
