/* ONLORE campaign pages (v2.4.1): project page + task panel, in the dark lime/graphite system. Every selector is .campaign- prefixed.
   Floors: text >= 11px for labels, pills and badges, >= 12px for body, notes, hints and legal copy; muted text no darker than #8b97a3;
   interactive controls >= 44px tall. */
.campaign-page{--campaign-coral:#ff8b78;--campaign-amber:#f0c674;--campaign-muted:#8b97a3;padding:24px 0 12px;min-width:0}
.campaign-back{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 6px;margin:0 0 12px -6px;border-radius:7px;color:var(--muted);font-size:13px;font-weight:600}
.campaign-back:hover{color:var(--text)}
.campaign-page .btn{min-height:44px}
.campaign-page :is(button,a,summary,input,textarea):focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* ---------- layout ---------- */
/* DOM order is the reading and tab order: main (banner, actions, pool, stats), side (tasks), more (activity, reviewed submissions). */
.campaign-layout{display:grid;grid-template-columns:minmax(0,58fr) minmax(0,42fr);column-gap:28px;row-gap:20px;align-items:start}
.campaign-main,.campaign-more{display:flex;flex-direction:column;gap:20px;min-width:0}
.campaign-main{grid-column:1;grid-row:1}
.campaign-more{grid-column:1;grid-row:2}
.campaign-side{grid-column:2;grid-row:1/span 2;position:sticky;top:110px;min-width:0}
.campaign-card{border:1px solid var(--border);border-radius:14px;background:var(--surface);padding:22px;min-width:0}
.campaign-card-head{display:flex;justify-content:space-between;align-items:center;gap:10px 14px;flex-wrap:wrap;margin-bottom:16px}
.campaign-card-head h2{font-size:18px;font-weight:500;letter-spacing:-.4px}
.campaign-card-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.campaign-tag,.campaign-range{display:inline-flex;align-items:center;min-height:22px;padding:2px 9px;border:1px solid #ffffff1c;border-radius:5px;font-size:11px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.campaign-range{border-color:transparent;padding-left:0;padding-right:0}
.campaign-empty{padding:26px 16px;text-align:center;border:1px dashed #3b4851;border-radius:12px;color:var(--muted);font-size:13px;line-height:1.6}
.campaign-sample-note{margin:12px 0 0;font-size:12px;line-height:1.6;color:var(--muted)}

/* ---------- banner ---------- */
.campaign-banner{border:1px solid var(--border);border-radius:16px;background:var(--surface);overflow:hidden}
.campaign-banner-media{position:relative;aspect-ratio:16/7;background:#121722;overflow:hidden}
.campaign-banner-media:after{content:'';position:absolute;inset:40% 0 0;background:linear-gradient(0deg,var(--surface),transparent);pointer-events:none}
.campaign-banner-art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.campaign-banner-media>.campaign-status{position:absolute;left:16px;top:16px;z-index:2;background:#0b111aeb;border-color:#ffffff30;backdrop-filter:blur(6px)}
.campaign-banner-media>.campaign-status.live{color:var(--accent)}
.campaign-banner-media>.campaign-status.alpha{color:var(--cyan)}
.campaign-banner-media>.campaign-status.ended{color:var(--muted)}
.campaign-head{position:relative;z-index:2;display:flex;align-items:flex-end;flex-wrap:wrap;gap:12px 14px;padding:0 22px;margin-top:-30px}
.campaign-logo{flex:0 0 auto;display:grid;place-items:center;width:64px;height:64px;border-radius:16px;border:1px solid color-mix(in srgb,var(--project-accent,var(--accent)) 55%,transparent);background:color-mix(in srgb,var(--project-accent,var(--accent)) 20%,#0f141a);color:var(--project-accent,var(--accent));font-family:var(--display);font-size:30px;font-weight:600;box-shadow:0 8px 30px #0006}
.campaign-heading{flex:1 1 180px;min-width:0}
.campaign-heading h1{font-size:clamp(26px,3.2vw,36px);font-weight:500;letter-spacing:-1.2px;line-height:1.1;overflow-wrap:anywhere}
.campaign-kicker{margin-top:5px;font-size:12px;color:var(--muted)}
.campaign-links{display:flex;gap:8px;margin-left:auto}
.campaign-icon-button{display:grid;place-items:center;width:44px;height:44px;border:1px solid var(--border);border-radius:9px;background:#ffffff06;color:var(--muted)}
.campaign-icon-button:disabled{cursor:not-allowed}
.campaign-desc{padding:16px 22px 22px;color:#bcc6cf;font-size:14px;line-height:1.75}

/* ---------- actions ---------- */
.campaign-actions{display:flex;gap:12px;flex-wrap:wrap}
.campaign-actions .btn{flex:0 1 auto}

/* ---------- rewards pool ---------- */
.campaign-pool{position:relative;overflow:hidden;border:1px solid color-mix(in srgb,var(--accent) 28%,var(--border));border-radius:16px;padding:24px;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 17%,var(--surface)),var(--surface) 72%)}
.campaign-pool-label{display:block;font-size:11px;font-weight:600;letter-spacing:1.4px;text-transform:uppercase;color:var(--accent)}
.campaign-chapter{margin:6px 0 0;font-size:12px;color:var(--muted)}
.campaign-chapter-close{margin:2px 0 0;font-size:12px;color:var(--muted)}
.campaign-pool-amount{display:block;margin:8px 0 6px;font-family:var(--display);font-size:clamp(40px,6vw,60px);font-weight:500;letter-spacing:-2px;line-height:1.05;color:var(--accent);overflow-wrap:anywhere}
.campaign-pool p{font-size:13px;color:#c3ccd3;line-height:1.65;max-width:560px}
.campaign-pool .campaign-pool-note{margin:0 0 14px;color:#c3ccd3}
.campaign-pool .campaign-pool-lor{margin:10px 0 0;color:#b4bec8}
.campaign-pool-token{display:inline-block;margin:2px 0 0;padding:6px 12px;border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);border-radius:999px;background:#cbf68b14;font-family:var(--display);font-size:clamp(15px,2.2vw,19px);font-weight:500;color:var(--text)}
.campaign-pool-actions{margin-top:18px;padding-top:16px;border-top:1px solid #ffffff14}
/* Season 1: two pools side by side (contribution, referral); one column when the card is narrow */
.campaign-pool .campaign-pool-total{margin:10px 0 0;font-size:13px;color:#c3ccd3}
.campaign-pools{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;margin:16px 0 0}
.campaign-pool-part{min-width:0;padding:16px;border:1px solid color-mix(in srgb,var(--accent) 26%,var(--border));border-radius:12px;background:#0d131a99}
.campaign-pool-part.is-referral{border-color:color-mix(in srgb,var(--cyan) 32%,var(--border))}
.campaign-pool-part-label{display:block;font-size:11px;font-weight:600;letter-spacing:1px;line-height:1.4;text-transform:uppercase;color:var(--muted)}
.campaign-pool-part .campaign-pool-amount{margin:8px 0 10px;font-size:clamp(30px,4.2vw,42px);letter-spacing:-1.4px}
.campaign-pool-part .campaign-pool-token{padding:5px 11px;font-size:14px}
.campaign-pool .campaign-pool-desc{margin:10px 0 0;font-size:13px;line-height:1.6;color:#c3ccd3}
.campaign-pools+.campaign-pool-note{margin-top:16px}

/* Project rewards (CONTRACT §12.1): one card per reward, then the delivery and Season Shards lines once */
.campaign-pool-amount.is-tba{margin:8px 0 10px;font-size:clamp(28px,4.4vw,42px);letter-spacing:-1px}
.campaign-reward-list{list-style:none;margin:14px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px}
.campaign-reward{min-width:0;display:flex;flex-direction:column;gap:7px;padding:16px;border:1px solid color-mix(in srgb,var(--accent) 26%,var(--border));border-radius:12px;background:#0d131a99}
.campaign-reward.is-token{border-color:color-mix(in srgb,var(--cyan) 32%,var(--border))}
.campaign-reward.is-nft{border-color:color-mix(in srgb,#c9b7fa 42%,var(--border))}
.campaign-reward.is-whitelist{border-color:color-mix(in srgb,var(--campaign-amber) 40%,var(--border))}
.campaign-reward-type{font-size:11px;font-weight:600;letter-spacing:1px;line-height:1.4;text-transform:uppercase;color:var(--muted)}
.campaign-reward-value{display:block;font-family:var(--display);font-size:clamp(22px,3vw,30px);font-weight:500;letter-spacing:-.8px;line-height:1.15;color:var(--accent);overflow-wrap:anywhere}
.campaign-reward.is-token .campaign-reward-value{color:var(--cyan)}
.campaign-reward.is-nft .campaign-reward-value{color:#c9b7fa}
.campaign-reward.is-whitelist .campaign-reward-value{color:var(--campaign-amber)}
.campaign-pool .campaign-reward-rule,.campaign-pool .campaign-reward-wallet,.campaign-pool .campaign-reward-note{margin:0;font-size:13px;line-height:1.55;color:#c3ccd3;overflow-wrap:anywhere}
.campaign-pool .campaign-reward-wallet{color:var(--muted)}
.campaign-pool .campaign-reward-note{padding-top:7px;border-top:1px dashed #ffffff22;color:var(--campaign-amber)}
.campaign-reward-list+.campaign-pool-note{margin-top:16px}
.campaign-pool .campaign-reward-counts{margin-top:-6px}

/* Season 1: link to the chapter event hub */
.campaign-challenge{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 16px;padding:16px 18px;border:1px solid color-mix(in srgb,var(--accent) 22%,var(--border));border-radius:14px;background:var(--surface)}
.campaign-challenge-copy{flex:1 1 220px;min-width:0;display:grid;gap:3px}
.campaign-challenge-kicker{font-size:11px;font-weight:600;letter-spacing:1.2px;text-transform:uppercase;color:var(--accent)}
.campaign-challenge-line{margin:0;font-size:14px;line-height:1.5;color:var(--text);overflow-wrap:anywhere}
.campaign-challenge .btn{flex:0 1 auto}

/* ---------- stats ---------- */
.campaign-stats-wrap{min-width:0}
.campaign-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0}
.campaign-stat{min-width:0;padding:16px 16px 14px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.campaign-stat dt{font-size:12px;font-weight:600;letter-spacing:.1px;color:var(--muted)}
.campaign-stat dd{margin:6px 0 0}
.campaign-stat strong{display:block;font-family:var(--display);font-size:24px;font-weight:500;letter-spacing:-.6px;line-height:1.2;overflow-wrap:anywhere}
.campaign-stat.is-date strong{font-size:17px;letter-spacing:-.3px}
.campaign-stat small{display:block;margin-top:5px;font-size:12px;line-height:1.45;color:var(--muted)}
.campaign-stat.has-pending small,.campaign-pending-text{color:var(--campaign-amber)}

/* ---------- activity chart ---------- */
.campaign-bars{display:flex;align-items:flex-end;gap:3px;height:128px;border-bottom:1px solid var(--border)}
.campaign-bar{flex:1 1 0;min-width:0;border-radius:3px 3px 0 0;background:#394552}
.campaign-bar.is-recent{background:var(--accent)}
.campaign-axis{display:flex;justify-content:space-between;gap:12px;margin-top:8px;font-size:12px;color:var(--muted)}
.campaign-empty-chart{display:grid;place-items:center;height:128px;padding:12px;border:1px dashed #3b4851;border-radius:10px;text-align:center;color:var(--muted);font-size:12px;line-height:1.6}
.campaign-empty-chart strong{display:block;color:var(--text);font-size:13px;font-weight:600}

/* ---------- reviewed submissions ---------- */
.campaign-mention-list{list-style:none;margin:0;padding:0}
.campaign-mention{display:grid;grid-template-columns:40px minmax(0,1fr) auto;gap:12px;padding:16px 0;border-top:1px solid var(--border)}
.campaign-mention:first-child{border-top:0;padding-top:2px}
.campaign-avatar{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;border:1px solid color-mix(in srgb,var(--creator-color,var(--accent)) 45%,transparent);background:color-mix(in srgb,var(--creator-color,var(--accent)) 18%,#12171e);color:var(--creator-color,var(--accent));font-family:var(--display);font-weight:600}
.campaign-mention-body{min-width:0}
.campaign-mention-who{display:flex;flex-wrap:wrap;gap:0 8px;align-items:baseline;font-size:13px}
.campaign-mention-who strong{font-weight:650}
.campaign-mention-who span{font-size:12px;color:var(--muted)}
.campaign-mention-body p{margin-top:4px;font-size:13px;line-height:1.65;color:#c3ccd3;overflow-wrap:anywhere}
.campaign-platform{display:inline-flex;align-items:center;margin-top:8px;min-height:22px;padding:2px 9px;border:1px solid #ffffff1c;border-radius:5px;font-size:11px;font-weight:600;letter-spacing:.2px;color:var(--muted)}
.campaign-mention-side{display:flex;flex-direction:column;align-items:flex-end;gap:5px}

/* ---------- pills + shared text ---------- */
.campaign-pill{display:inline-flex;align-items:center;min-height:22px;padding:2px 9px;border:1px solid transparent;border-radius:99px;font-size:11px;font-weight:650;line-height:1.3;white-space:nowrap}
.campaign-pill.is-mandatory{color:var(--text);background:#ffffff0d;border-color:#ffffff30}
.campaign-pill.is-shards{color:var(--accent);background:#cbf68b14;border-color:#cbf68b30}
.campaign-pill.is-review{color:var(--campaign-amber);background:#f0c67414;border-color:#f0c67438}
.campaign-pill.is-pending{color:var(--campaign-amber);padding-left:2px;padding-right:2px}
.campaign-pill.is-neutral{color:var(--muted);background:#ffffff08;border-color:#ffffff1c}
.campaign-pill.is-create{color:#c9b7fa;background:#c9b7fa14;border-color:#c9b7fa38}
.campaign-pill.is-verified{color:var(--accent);background:#cbf68b14;border-color:#cbf68b30}
.campaign-pill.is-appeal{color:var(--cyan);background:#86dce412;border-color:#86dce438}
.campaign-pill.is-rejected{color:var(--campaign-coral);background:#ff8b7812;border-color:#ff8b7844}
.campaign-meta-line{margin:0;font-size:12px;line-height:1.5;color:var(--muted)}

/* ---------- tasks panel ---------- */
.campaign-tasks{min-width:0;padding:22px;border:1px solid var(--border);border-radius:16px;background:var(--surface)}
.campaign-tasks-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px 12px}
.campaign-tasks-head h2{font-size:22px;font-weight:500;letter-spacing:-.5px}
.campaign-tasks-head h2:focus{outline:none}
.campaign-tasks-sub{flex:1 0 100%;margin:0;font-size:12px;color:var(--muted)}
.campaign-toggle{display:flex;gap:3px;padding:2px;border:1px solid var(--border);border-radius:9px;background:#0f141a}
.campaign-toggle button{display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:5px 14px;border-radius:7px;font-size:13px;font-weight:600;color:var(--muted)}
.campaign-toggle button:hover{color:var(--text)}
.campaign-toggle button[aria-pressed=true]{background:#2a333b;color:var(--text)}
.campaign-ended-label{display:inline-flex;align-items:center;gap:8px;margin:0;font-size:13px;font-weight:600;color:var(--text)}
.campaign-count{min-width:20px;padding:0 6px;border-radius:99px;background:#ffffff12;font-size:11px;line-height:18px;text-align:center}
.campaign-toggle button[aria-pressed=true] .campaign-count,.campaign-ended-label .campaign-count{background:#ffffff1f;color:var(--text)}

.campaign-gate-banner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 14px;margin:16px 0 0;padding:14px;border:1px solid #86dce430;border-radius:10px;background:#86dce410}
.campaign-gate-banner p{flex:1 1 220px;min-width:0;margin:0;font-size:13px;line-height:1.55;color:var(--text)}
/* Rejected account (CONTRACT §10.1): reason, appeal deadline, Appeal button */
.campaign-gate-banner.is-rejected{align-items:flex-start;border-color:#ff8b7855;background:#ff8b780f}
.campaign-gate-copy{flex:1 1 220px;display:grid;gap:5px;min-width:0}
.campaign-gate-copy strong{font-size:14px;font-weight:650;line-height:1.4;color:var(--campaign-coral)}
.campaign-gate-copy p{flex:none;margin:0;overflow-wrap:anywhere}
.campaign-gate-copy .campaign-gate-reason{font-size:13px;color:var(--text)}
.campaign-gate-copy .campaign-gate-meta{font-size:12px;line-height:1.55;color:var(--muted)}
.campaign-eligibility{margin:14px 0;padding:12px 14px;border:1px solid var(--border);border-radius:10px;background:#ffffff05;color:var(--text);font-size:13px;line-height:1.55}
.campaign-eligibility.is-complete{border-color:#f0c67438;background:#f0c67410}
.campaign-eligibility.is-quiet{color:var(--muted)}
.campaign-progress{display:flex;align-items:center;gap:10px;margin-top:9px;font-size:12px;font-weight:600;color:var(--text)}
.campaign-eligibility.is-quiet .campaign-progress{margin-top:0}
.campaign-meter{display:flex;flex:0 0 72px;gap:4px}
.campaign-meter span{flex:1;height:5px;border-radius:3px;background:#ffffff1f}
.campaign-meter span.is-done{background:var(--campaign-amber)}

.campaign-lock{display:flex;flex-direction:column;gap:2px;margin:16px 0 0;padding:12px 14px;border-radius:10px;font-size:12px;line-height:1.55}
.campaign-lock strong{font-size:13px}
.campaign-lock span{color:var(--muted)}
.campaign-lock.is-alpha{border:1px solid #86dce430;background:#86dce410;color:var(--cyan)}
.campaign-lock.is-ended{border:1px solid #ffffff22;background:#ffffff08;color:var(--text)}
.campaign-lock+.campaign-gate-banner{margin-top:12px}
.campaign-lock+.campaign-eligibility{margin-top:12px}
.campaign-gate-banner+.campaign-eligibility{margin-top:12px}
.campaign-tasks-head+.campaign-eligibility{margin-top:16px}

.campaign-groups{display:grid;gap:6px}
.campaign-group-title{margin:0;font-size:13px;font-weight:650;letter-spacing:.1px;color:var(--text)}
.campaign-group>.campaign-group-title{margin:6px 0 10px}
.campaign-group-summary{display:flex;align-items:center;gap:8px;min-height:44px;padding:0 4px;margin:0 -4px;list-style:none;border-radius:8px;cursor:pointer}
.campaign-group-summary::-webkit-details-marker{display:none}
.campaign-group-summary::before{content:'';flex:0 0 auto;width:7px;height:7px;margin:0 5px 3px 2px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(-45deg);transition:transform .15s}
.campaign-optional[open]>.campaign-group-summary::before{transform:rotate(45deg) translate(-1px,-1px)}
.campaign-optional>.campaign-task-list{margin-top:4px}

.campaign-task-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.campaign-task{min-width:0;padding:14px;border:1px solid var(--border);border-radius:12px;background:var(--surface-2)}
.campaign-task.is-submitted{border-color:#f0c67433}
.campaign-task-top{display:grid;grid-template-columns:24px minmax(0,1fr);column-gap:12px;row-gap:10px;align-items:start}
.campaign-check{display:grid;place-items:center;width:24px;height:24px;margin-top:1px;border:2px solid #4a5662;border-radius:50%;color:var(--campaign-muted)}
.campaign-check svg{width:14px;height:14px;stroke-width:2.6}
.campaign-task.is-submitted .campaign-check{border-color:var(--campaign-amber);color:var(--campaign-amber);background:#f0c67414}
.campaign-task.is-connected .campaign-check,.campaign-task.is-shared .campaign-check{border-color:var(--campaign-muted);color:var(--campaign-muted)}
.campaign-task-main{min-width:0}
.campaign-task-title{margin:0;font-size:15px;font-weight:600;letter-spacing:-.2px;line-height:1.35;overflow-wrap:anywhere}
.campaign-pills{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:7px}
.campaign-task .btn{gap:8px;font-size:13px}
.campaign-task-body{grid-column:2/-1;min-width:0}
.campaign-hint{margin:0;font-size:13px;line-height:1.6;color:var(--muted)}
.campaign-hint-links{display:flex;flex-wrap:wrap;gap:0 16px;margin:2px 0 0}
.campaign-criteria{display:grid;gap:5px;margin:8px 0 8px;padding:0;list-style:none}
.campaign-criteria li{position:relative;padding-left:16px;font-size:13px;line-height:1.55;color:#c3ccd3;overflow-wrap:anywhere}
.campaign-criteria li::before{content:'';position:absolute;left:2px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--accent)}
.campaign-textlink{display:inline-flex;align-items:center;min-height:44px;padding:0;font-size:13px;font-weight:600;color:var(--accent);text-decoration:underline;text-underline-offset:3px}
.campaign-form{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.campaign-label{display:block;font-size:12px;font-weight:600;line-height:1.45;color:var(--text)}
.campaign-field-row{display:flex;flex-wrap:wrap;gap:8px}
.campaign-input{flex:1 1 180px;min-width:0;min-height:44px;padding:10px 12px;border:1px solid #303b47;border-radius:8px;background:#0d131a;color:var(--text);font-size:13px}
.campaign-input::placeholder{color:var(--campaign-muted)}
.campaign-input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px #cbf68b26}
.campaign-input:disabled{opacity:.55;cursor:not-allowed}
/* video format select (Create ladder): same box as the text fields, with its own arrow */
.campaign-format{display:flex;flex-direction:column;gap:6px;margin-bottom:4px}
.campaign-select{flex:none;width:100%;appearance:none;-webkit-appearance:none;padding-right:38px;background-image:linear-gradient(45deg,transparent 50%,#9aa6b2 50%),linear-gradient(135deg,#9aa6b2 50%,transparent 50%);background-position:calc(100% - 19px) 50%,calc(100% - 14px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;text-overflow:ellipsis;cursor:pointer}
.campaign-select:disabled{cursor:not-allowed}
.campaign-select option{background:#0d131a;color:var(--text)}
.campaign-input[aria-invalid=true]{border-color:var(--campaign-coral)}
.campaign-textarea{display:block;flex:none;width:100%;min-height:88px;resize:vertical;line-height:1.55;font-family:inherit}
.campaign-help{margin:0;font-size:12px;line-height:1.5;color:var(--muted)}
.campaign-error{margin:0;font-size:12px;line-height:1.5;color:var(--campaign-coral)}
.campaign-error:empty{display:none}
.campaign-qa{display:flex;flex-direction:column;gap:6px;margin-top:4px}
.campaign-qa-foot{display:flex;justify-content:flex-end}
.campaign-counter{font-size:12px;color:var(--muted)}
.campaign-counter.is-over{color:var(--campaign-coral)}
.campaign-feedback .campaign-field-row{margin-top:6px}
.campaign-answers{list-style:none;margin:0 0 10px;padding:0;display:grid;gap:10px}
.campaign-answers strong{display:block;font-size:12px;font-weight:600;line-height:1.45;color:var(--text)}
.campaign-answers p{margin:3px 0 0;font-size:13px;line-height:1.6;color:#c3ccd3;white-space:pre-wrap;overflow-wrap:anywhere}
.campaign-done-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:10px}
.campaign-submitted{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}
.campaign-link-text{flex:1 1 140px;min-width:0;padding:9px 11px;border:1px solid var(--border);border-radius:8px;background:#0d131a;color:#c3ccd3;font-size:12px;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.campaign-answers+.campaign-submitted{margin-top:2px}
.campaign-submitted+.campaign-meta-line{margin-top:7px}
.campaign-answers+.campaign-meta-line{margin-top:2px}
a.campaign-link-text{display:block;color:var(--accent);text-decoration:underline;text-decoration-color:#cbf68b55;text-underline-offset:3px}
a.campaign-link-text:hover{text-decoration-color:currentColor}

/* Several submissions per repeatable task (CONTRACT §12.3): weekly counter, "Your submissions (n)", one row per piece, "Submit another" */
.campaign-week{margin:10px 0 0;padding:8px 11px;border:1px solid #c9b7fa38;border-radius:8px;background:#c9b7fa10;font-size:12px;font-weight:600;line-height:1.5;color:#c9b7fa}
.campaign-subs-block{margin-top:12px}
.campaign-subs-title{margin:0 0 8px;font-family:var(--font);font-size:13px;font-weight:650;letter-spacing:0;color:var(--text)}
.campaign-subs{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:8px}
.campaign-sub{min-width:0;display:grid;grid-template-columns:minmax(0,1fr);gap:8px;padding:11px 12px;border:1px solid #f0c67433;border-radius:10px;background:#0f141a}
.campaign-sub>*{min-width:0}
.campaign-sub.is-editing{border-color:var(--accent)}
.campaign-sub-top{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px}
.campaign-sub-id{font-family:var(--display);font-size:13px;font-weight:650;letter-spacing:.4px;color:var(--text)}
.campaign-sub-when{font-size:12px;line-height:1.4;color:var(--muted)}
.campaign-sub .campaign-submitted{display:block}
.campaign-sub .campaign-link-text{display:block;flex:none}
.campaign-sub-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px}
.campaign-sub-pills{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;min-width:0}
.campaign-sub .campaign-form{margin-top:0}
.campaign-subs-toggle{margin-top:2px}
.campaign-add-row{margin-top:10px}
.campaign-limit{margin:8px 0 0;padding:9px 11px;border:1px solid #f0c67438;border-radius:8px;background:#f0c67410;font-size:12px;line-height:1.55;color:var(--campaign-amber)}
.campaign-form .campaign-limit{margin:2px 0 0}
.campaign-add-row+.campaign-limit{margin-top:8px}
.campaign-done-row+.campaign-help{margin-top:8px}
.campaign-footnote{margin:16px 0 0;padding-top:14px;border-top:1px solid var(--border);font-size:12px;line-height:1.65;color:var(--muted)}

/* v2.4.2 (CONTRACT §13): Campaign Shards and Season Shards, the status of each submission, revisions, pages of 20, and the notice about submissions saved before accounts were tracked.
   Nothing here is red: a figure that does not count toward the season is information, not a penalty. */
.campaign-stat small .campaign-notcounted,.campaign-stat.has-pending small .campaign-notcounted{display:block;margin-top:4px;color:var(--muted)}
.campaign-pill.is-status{max-width:100%;white-space:normal;text-align:left;line-height:1.35}
.campaign-pill.is-counted{color:var(--accent);background:#cbf68b14;border-color:#cbf68b30}
.campaign-pill.is-held{color:var(--campaign-amber);background:#f0c67414;border-color:#f0c67438}
.campaign-pill.is-over,.campaign-pill.is-outside{color:var(--muted);background:#ffffff08;border-color:#ffffff1c}
.campaign-late-note{margin:0;padding:8px 11px;border:1px solid #f0c67438;border-radius:8px;background:#f0c67410;font-size:12px;line-height:1.55;color:var(--campaign-amber)}
.campaign-form .campaign-late-note{margin:2px 0 0}
.campaign-revisions{min-width:0}
.campaign-rev-summary{display:flex;align-items:center;gap:8px;min-height:44px;list-style:none;border-radius:8px;font-size:12px;font-weight:600;color:var(--muted);cursor:pointer}
.campaign-rev-summary::-webkit-details-marker{display:none}
.campaign-rev-summary::before{content:'';flex:0 0 auto;width:7px;height:7px;margin:0 5px 3px 2px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(-45deg);transition:transform .15s}
.campaign-revisions[open]>.campaign-rev-summary::before{transform:rotate(45deg) translate(-1px,-1px)}
.campaign-rev-list{list-style:none;margin:0 0 4px;padding:0;display:grid;gap:8px}
.campaign-rev-list li{min-width:0;display:grid;gap:4px}
.campaign-rev-head{font-size:12px;line-height:1.45;color:var(--muted)}
.campaign-rev-list .campaign-link-text{display:block;flex:none}
.campaign-subs-actions{display:flex;flex-wrap:wrap;gap:0 18px}
.campaign-legacy{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 14px;margin:16px 0 0;padding:14px;border:1px solid #f0c67438;border-radius:10px;background:#f0c67410}
.campaign-legacy p{flex:1 1 240px;min-width:0;margin:0;font-size:13px;line-height:1.55;color:var(--text)}
.campaign-legacy-actions{display:flex;flex-wrap:wrap;gap:8px}
.campaign-lock+.campaign-legacy,.campaign-legacy+.campaign-gate-banner,.campaign-legacy+.campaign-eligibility{margin-top:12px}
@media(max-width:520px){
  .campaign-legacy-actions{flex:1 1 100%}
  .campaign-legacy .btn{flex:1 1 100%}
}

/* ---------- two-column: sticky tasks (scrolls inside only when taller than the screen; scroll chains to the page at its end) ---------- */
@media(min-width:1000px){
  .campaign-tasks{max-height:calc(100vh - 130px);max-height:calc(100dvh - 130px);overflow-y:auto;overscroll-behavior:auto;scrollbar-width:thin;scrollbar-color:#3b4651 transparent}
}
@media(max-width:1200px) and (min-width:1000px){
  .campaign-layout{column-gap:20px}
  .campaign-tasks,.campaign-card{padding:18px}
  .campaign-stat{padding:14px 13px 12px}
  .campaign-stat strong{font-size:22px}
  .campaign-stat.is-date strong{font-size:15px}
}

/* ---------- single column: tasks follow the stats (same as DOM order, so tab order matches what is shown) ---------- */
@media(max-width:999px){
  .campaign-layout{display:flex;flex-direction:column;align-items:stretch;gap:20px}
  .campaign-side{position:static}
}
@media(max-width:700px){
  .campaign-page{padding-top:17px}
  .campaign-banner-media{aspect-ratio:16/9}
  .campaign-head{padding:0 16px}
  .campaign-desc{padding:14px 16px 18px;font-size:13px}
  .campaign-pool{padding:20px}
  .campaign-card,.campaign-tasks{padding:18px}
  .campaign-stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .campaign-stat{padding:14px 13px 12px}
  .campaign-stat strong{font-size:22px}
  .campaign-stat.is-date strong{font-size:15px}
  .campaign-actions .btn{flex:1 1 150px}
  .campaign-mention{grid-template-columns:40px minmax(0,1fr)}
  .campaign-mention-side{grid-column:2;flex-direction:row;align-items:center;flex-wrap:wrap;gap:6px 10px}
  .campaign-toggle{width:100%}
  .campaign-toggle button{flex:1;justify-content:center}
  .campaign-input{font-size:16px} /* 16px stops iOS Safari from zooming the page when a field is focused */
}
@media(max-width:520px){
  .campaign-task-body{grid-column:1/-1} /* the check mark and title keep the first row; forms and lists use the whole card width */
  .campaign-field-row .campaign-input{flex-basis:100%}
  .campaign-field-row .btn{flex:1 1 100%}
  .campaign-submitted .btn{flex:1 1 100%}
  .campaign-done-row .btn{flex:1 1 100%}
  .campaign-challenge .btn{flex:1 1 100%}
  .campaign-gate-banner .btn{flex:1 1 100%}
  .campaign-gate-banner.is-rejected{align-items:stretch}
}
@media(max-width:420px){
  .campaign-add-row .btn,.campaign-sub-foot .btn{flex:1 1 100%;width:100%}
}
@media(max-width:370px){
  .campaign-page{padding-top:14px}
  .campaign-select{padding-left:10px;padding-right:30px;background-position:calc(100% - 15px) 50%,calc(100% - 10px) 50%}
  .campaign-head{padding:0 14px;margin-top:-26px}
  .campaign-logo{width:54px;height:54px;font-size:26px;border-radius:14px}
  .campaign-card,.campaign-tasks,.campaign-pool{padding:16px}
  .campaign-task{padding:12px}
  .campaign-stat{padding:12px 11px 11px}
  .campaign-stat strong{font-size:20px}
  .campaign-tasks-head h2{font-size:20px}
  .campaign-toggle button{padding:5px 8px}
  .campaign-eligibility{padding:11px 12px}
  .campaign-actions .btn{flex-basis:100%}
}
