/* Katteb Mentions — shared styles (from Claude Design tokens) */
:root{
  --canvas:#E4E4E2; --panel:#F2F2F0; --panel-alt:#E7E7E4;
  --surface-card:#FFFFFF; --surface-inset:#F7F7F5;
  --ink:#1A1A18; --ink-soft:#3A3A38; --text-secondary:#6E6E6A; --text-muted:#8A8A86;
  --border:#E2E2DE; --border-strong:#D6D6D2; --border-hairline:#EDEDE9;
  --accent:#F0E29A; --accent-strong:#E0C95A; --positive:#8FB5A3; --positive-bg:#EAF2EC;
  --illus-blue:#7FA3E0; --illus-sage:#9CC4AC; --illus-sand:#E4DECC; --illus-slate:#6E7A8A; --illus-plum:#A88FB8;
}
*{box-sizing:border-box}
body{margin:0;background:var(--canvas);font-family:'Outfit',system-ui,sans-serif;color:var(--ink);font-weight:400;-webkit-font-smoothing:antialiased}
a{color:var(--ink);text-decoration:none}
a.m-link:hover{color:var(--text-secondary)}
img{max-width:100%}
@keyframes kSpin{to{transform:rotate(360deg)}}
@keyframes kFadeIn{from{opacity:0}to{opacity:1}}
@keyframes kPopIn{from{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes kFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@keyframes kFloat2{0%,100%{transform:translateY(0)}50%{transform:translateY(8px)}}
@keyframes kMention{from{background-color:rgba(232,197,71,0)}to{background-color:rgba(232,197,71,.35)}}
@keyframes kCheck{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}
input::placeholder{color:#A6A6A2}
input[type=range]{accent-color:var(--ink)}

/* buttons */
.m-btn{display:inline-block;border-radius:999px;padding:15px 30px;font-size:15px;font-weight:500;cursor:pointer;font-family:inherit;transition:background .15s,color .15s,border-color .15s;text-align:center}
.m-btn-sm{padding:12px 26px;font-size:14px}
.m-btn-xs{padding:10px;font-size:13px;width:100%}
.m-btn-dark{background:var(--ink);color:#fff;border:1.5px solid var(--ink)}
.m-btn-dark:hover{background:var(--ink-soft);color:#fff}
.m-btn-outline{background:transparent;color:var(--ink);border:1.5px solid var(--ink)}
.m-btn-outline:hover{background:var(--ink);color:#fff}
.m-btn-light{background:#fff;color:var(--ink);border:1.5px solid #fff}
.m-btn-light:hover{background:var(--canvas);color:var(--ink);border-color:var(--canvas)}
.m-btn-outline-light{background:transparent;color:#fff;border:1.5px solid rgba(255,255,255,.4)}
.m-btn-outline-light:hover{border-color:#fff;color:#fff}
.m-btn-danger{background:#fff;color:#C0392B;border:1.5px solid #C0392B}
.m-btn-danger:hover{background:#C0392B;color:#fff}
.m-btn-danger-solid{background:#C0392B;color:#fff;border:1.5px solid #C0392B}
.m-btn-danger-solid:hover{background:#A93226;border-color:#A93226;color:#fff}

/* layout */
.m-wrap{max-width:1360px;margin:0 auto}
.m-section{max-width:1360px;margin:26px auto 0;padding:0 0}
.m-panel{background:var(--panel);border-radius:32px;padding:56px}
.m-panel-dark{background:var(--ink);border-radius:32px;padding:56px;color:#fff}
.m-page-pad{padding:20px}
.m-card{background:#fff;border-radius:24px}
.m-card-lift{transition:transform .2s}
.m-card-lift:hover{transform:translateY(-4px)}
.m-nav{display:flex;align-items:center;gap:36px;margin-bottom:72px;flex-wrap:wrap;position:relative}
.m-nav nav{display:flex;gap:28px;font-size:14.5px;color:var(--ink-soft);flex-wrap:wrap}
.m-nav nav a{color:var(--ink-soft)}
.m-nav nav a:hover{color:var(--ink)}
.m-nav-burger{display:none;margin-left:auto;width:42px;height:42px;border-radius:50%;border:1.5px solid var(--border-strong);background:#fff;color:var(--ink);cursor:pointer;align-items:center;justify-content:center}
@media (max-width: 760px){
  .m-nav-burger{display:inline-flex}
  .m-nav nav{display:none;position:absolute;top:calc(100% + 10px);left:0;right:0;flex-direction:column;gap:2px !important;background:#fff;border-radius:18px;padding:10px;box-shadow:0 18px 50px rgba(26,26,24,.16);border:1px solid var(--border-hairline);z-index:60}
  .m-nav.open nav{display:flex}
  .m-nav nav a{padding:13px 16px;border-radius:12px;font-size:15px !important;font-weight:500}
  .m-nav nav a:hover{background:var(--surface-inset)}
}
.m-h1{font-size:clamp(38px,5vw,62px);line-height:1.08;font-weight:300;letter-spacing:-1.5px;margin:0;text-wrap:pretty}
.m-h2{font-size:clamp(26px,3vw,34px);font-weight:400;letter-spacing:-1px;margin:0}
.m-kicker{font-size:13px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:var(--text-muted)}
.m-body{color:var(--text-secondary);font-size:15px;line-height:1.65}

/* grids */
.m-hero-grid{display:grid;grid-template-columns:1fr 1fr;min-height:700px}
.m-grid-4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px}
.m-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.m-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:26px}
.m-split{display:grid;grid-template-columns:1fr 1.1fr;gap:52px;align-items:center}
.m-faq-grid{display:grid;grid-template-columns:1fr 1.6fr;gap:48px}

/* FAQ accordion */
.m-faq-item{border-bottom:1px solid var(--border)}
.m-faq-q{width:100%;display:flex;align-items:center;justify-content:space-between;gap:20px;background:none;border:none;cursor:pointer;font-family:inherit;text-align:left;padding:22px 4px;font-size:16.5px;font-weight:500;color:var(--ink)}
.m-faq-q .m-plus{flex:none;width:32px;height:32px;border-radius:50%;border:1.5px solid var(--ink);display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:300;transition:transform .3s}
.m-faq-item.open .m-plus{transform:rotate(45deg)}
.m-faq-a{display:none;padding:0 60px 22px 4px;font-size:14.5px;line-height:1.7;color:var(--text-secondary);animation:kFadeIn .3s ease}
.m-faq-item.open .m-faq-a{display:block}

/* steps */
.m-step{display:flex;gap:16px}
.m-step-n{flex:none;width:30px;height:30px;border-radius:50%;border:1.5px solid var(--ink);font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center}
.m-step-n.light{border-color:rgba(255,255,255,.5);color:#fff}
.m-step-t{font-size:15.5px;font-weight:500;margin-bottom:3px}
.m-step-d{font-size:13.5px;line-height:1.6;color:var(--text-secondary)}
.m-step-d.light{color:rgba(255,255,255,.6)}

/* listing cards */
.m-listing-thumb{position:relative;height:140px;border-radius:16px;overflow:hidden;border:1px solid var(--border-hairline)}
.m-verified{position:absolute;top:10px;left:10px;background:#fff;color:var(--ink);font-size:10px;font-weight:600;border-radius:999px;padding:4px 10px}
.m-match{background:var(--accent);color:var(--ink);font-size:10.5px;font-weight:600;border-radius:999px;padding:4px 10px}
.m-price{font-size:19px;font-weight:600}
.m-price small{font-size:11px;font-weight:400;color:var(--text-muted)}
.m-meta{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:11.5px;color:var(--text-muted);margin-top:8px}

/* fake page thumb (CSS placeholder for listing previews) */
.m-thumb-fake{width:100%;height:100%;padding:14px 16px;display:flex;flex-direction:column;gap:7px}
.m-thumb-fake .bar{height:8px;border-radius:4px;background:#E7E7E3}
.m-thumb-fake .bar.w60{width:60%}.m-thumb-fake .bar.w80{width:80%}.m-thumb-fake .bar.w40{width:40%}.m-thumb-fake .bar.w90{width:90%}
.m-thumb-fake .hero-bar{height:26px;border-radius:8px;margin-bottom:2px}

/* modal */
.m-modal-overlay{position:fixed;inset:0;background:rgba(26,26,24,.45);backdrop-filter:blur(6px);z-index:50;display:flex;align-items:center;justify-content:center;padding:24px;animation:kFadeIn .25s ease}
.m-modal{background:#fff;border-radius:28px;width:560px;max-width:100%;padding:34px;
  max-height:calc(100vh - 48px);overflow-y:auto;overscroll-behavior:contain;
  animation:kPopIn .32s cubic-bezier(.2,.9,.3,1.2);box-shadow:0 30px 80px rgba(26,26,24,.3)}

/* Demand modal: the placement preview can be long, so the body scrolls inside a
   centred card and the price CTA stays pinned instead of scrolling out of reach. */
#m-demand-modal .m-modal{display:flex;flex-direction:column;overflow:hidden}
.m-modal-pane{flex:1;min-height:0;flex-direction:column}
.m-modal-scroll{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  margin-right:-10px;padding-right:10px}
.m-modal-foot{flex:none;padding-top:16px}
.m-spinner{width:36px;height:36px;border-radius:50%;border:2.5px solid #E4E4E0;border-top-color:var(--ink);animation:kSpin .8s linear infinite}
.m-spinner.ok{border-top-color:var(--positive)}
.m-progress{display:flex;gap:6px;margin:18px 0 22px}
.m-progress .seg{flex:1;height:3px;border-radius:99px;background:#E4E4E0}

/* forms (onboarding) */
.m-input{width:100%;border:1.5px solid var(--border-strong);border-radius:14px;padding:13px 16px;font-size:15px;font-family:inherit;background:#fff;color:var(--ink)}
.m-input:focus{outline:none;border-color:var(--ink)}
.m-label{display:block;font-size:13.5px;font-weight:500;margin:0 0 6px}
.m-help{font-size:12.5px;color:var(--text-muted);margin-top:5px}
.m-flash{border-radius:14px;padding:13px 18px;font-size:14px;margin-bottom:18px}
.m-flash-err{background:#FBEAEA;color:#8C2B2B;border:1px solid #F0C9C9}
.m-flash-ok{background:var(--positive-bg);color:#2E5D4B;border:1px solid #CBE3D6}

/* rate-card table page links */
.m-page-link{color:var(--ink)}
.m-page-link:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}

/* footer */
.m-footer{display:flex;align-items:center;justify-content:space-between;padding:28px 12px;font-size:13px;color:var(--text-muted);flex-wrap:wrap;gap:14px}
.m-footer a{color:var(--text-secondary)}
.m-footer a:hover{color:var(--ink)}

/* avatar stack */
.m-avstack{display:flex;align-items:center}
.m-avstack img,.m-avstack .m-av{width:34px;height:34px;border-radius:50%;border:2px solid #fff}
.m-avstack img+img,.m-avstack *+*{margin-left:-10px}

/* horizontal scroll shell for wide tables on small screens */
.m-table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}

/* responsive */
@media (max-width: 1020px){
  .m-hero-grid{grid-template-columns:1fr;min-height:0 !important}
  .m-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .m-grid-3{grid-template-columns:1fr}
  .m-grid-2{grid-template-columns:1fr}
  .m-split{grid-template-columns:1fr;gap:32px}
  .m-faq-grid{grid-template-columns:1fr;gap:20px}
  .m-panel,.m-panel-dark{padding:34px 24px}
  .m-nav{margin-bottom:34px}
  /* floating hero nav becomes a normal bar so it can never overlap content */
  .m-nav-overlay{position:static !important;padding:24px 22px 0 !important}
  .m-hero-left{padding:14px 22px 40px !important}
  .m-hero-right{min-height:400px}
}
@media (max-width: 640px){
  .m-grid-4{grid-template-columns:1fr}
  .m-page-pad{padding:8px}
  .m-faq-a{padding-right:10px}
  /* page shells with big inline paddings */
  .m-page-shell{padding:24px 16px 44px !important}
  .m-panel,.m-panel-dark{padding:28px 18px;border-radius:24px}
  .m-wrap{border-radius:24px !important}
  .m-nav{gap:12px !important}
  .m-nav nav{gap:13px !important;font-size:13px !important;row-gap:6px !important}
  .m-nav-overlay{padding:18px 16px 0 !important}
  .m-hero-left{padding:10px 16px 34px !important}
  .m-hero-right{min-height:340px}
  .m-btn{padding:13px 22px;font-size:14px}
  .m-h1{letter-spacing:-1px}
  .m-modal{padding:24px 18px}
  .m-faq-q{font-size:15px;padding:18px 2px}
  .m-footer{padding:22px 6px;justify-content:center;text-align:center}
  /* wide data tables scroll sideways instead of crushing columns */
  .m-ptable{min-width:620px}
  .m-side{gap:14px}
}

/* ---------- Onboarding stepper ---------- */
.m-steps{display:flex;align-items:center;gap:10px;flex-wrap:nowrap;margin:0 0 26px}
.m-step{display:flex;align-items:center;gap:9px;flex:none;min-width:0}
.m-step-dot{flex:none;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;font-size:12.5px;font-weight:600;border:1.5px solid var(--border-strong);
  background:#fff;color:var(--text-muted)}
.m-step-label,.m-step-short{font-size:13px;color:var(--text-muted);white-space:nowrap}
.m-step-short{display:none}
.m-step-now .m-step-dot{background:var(--ink);border-color:var(--ink);color:#fff}
.m-step-now .m-step-label,.m-step-now .m-step-short{color:var(--ink);font-weight:600}
.m-step-done .m-step-dot{background:var(--positive-bg);border-color:var(--positive-bg);color:#2E5D4B}
.m-step-done .m-step-label,.m-step-done .m-step-short{color:var(--text-secondary)}
.m-step-bar{flex:1 1 auto;min-width:14px;height:1.5px;background:var(--border);border-radius:2px}
.m-step-bar-done{background:var(--positive-bg)}

/* Why the AI report matters — benefit rows on step 3 */
.m-why{display:flex;gap:13px;align-items:flex-start;padding:15px 0;border-bottom:1px solid var(--border-hairline)}
.m-why:last-child{border-bottom:none;padding-bottom:0}
.m-why-ico{flex:none;width:32px;height:32px;border-radius:10px;background:var(--surface-inset);
  display:flex;align-items:center;justify-content:center;font-size:15px}
.m-why-t{font-size:14.5px;font-weight:600;margin-bottom:3px}
.m-why-d{font-size:13px;color:var(--text-secondary);line-height:1.6;margin:0}

@media (max-width:640px){
  .m-steps{gap:7px;margin-bottom:20px}
  .m-step-label{display:none}
  .m-step-short{display:inline}
  .m-step-short{font-size:12px}
  .m-step-dot{width:23px;height:23px;font-size:11.5px}
  .m-step-bar{min-width:8px}
}

/* ---------- Whole listing card opens the placement detail ---------- */
/* One real link, stretched over the card: keeps the markup valid (no nested
   interactive elements) and keeps the title keyboard-focusable. Buttons and the
   open-live-page arrow sit above the overlay so they still receive clicks. */
.m-listing-card{position:relative;cursor:pointer}
.m-listing-card .m-card-link::after{content:"";position:absolute;inset:0;z-index:1;border-radius:inherit}
.m-listing-card .m-card-link:hover{text-decoration:underline;text-underline-offset:3px}
.m-listing-card .m-add-link,
.m-listing-card .m-listing-thumb a{position:relative;z-index:2}
.m-listing-card .m-card-link:focus-visible{outline:2px solid var(--ink);outline-offset:3px;border-radius:4px}

/* ---------- Placement detail page ---------- */
/* The card thumb is 140px — right for a grid, far too short here, leaving the
   column empty next to the stats. A tall preview shows the actual article, and
   sticky keeps it in view while the brief below is read. */
.m-detail-media{position:sticky;top:20px}
.m-detail-thumb{height:520px}
@media (max-width:820px){
  .m-detail-media{position:static}
  .m-detail-thumb{height:300px}
}

/* ---------- Brief topic chips on listing cards ---------- */
.m-topics{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.m-topic{background:var(--surface-inset);color:var(--text-secondary);border-radius:999px;
  padding:3px 9px;font-size:10.5px;line-height:1.5;white-space:nowrap;max-width:100%;
  overflow:hidden;text-overflow:ellipsis}

/* ---------- Advertiser matcher ---------- */
.m-spin{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--ink);
  border-radius:50%;display:inline-block;flex:none;animation:m-spin .8s linear infinite}
@keyframes m-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.m-spin{animation-duration:2.4s}}

/* ---------- Skeleton loader (placement preview) ---------- */
.m-skel{height:12px;border-radius:6px;margin:0 0 9px;
  background:linear-gradient(90deg,#EDEDEA 25%,#F6F6F3 37%,#EDEDEA 63%);
  background-size:400% 100%;animation:m-skel 1.4s ease-in-out infinite}
.m-skel:last-child{margin-bottom:0}
/* the last two lines stand in for the highlighted sentence, so the shape is predicted */
.m-skel-hi{background:linear-gradient(90deg,#F3E9B8 25%,#FAF4D8 37%,#F3E9B8 63%);background-size:400% 100%}
@keyframes m-skel{0%{background-position:100% 50%}100%{background-position:0 50%}}
@media (prefers-reduced-motion:reduce){.m-skel{animation:none}}

/* ---------- Advertiser match results ---------- */
.m-match-item{display:flex;flex-direction:column;min-width:0}
.m-match-why{margin-top:9px;padding:9px 13px;background:var(--positive-bg);color:#2E5D4B;
  border-radius:11px;font-size:12px;line-height:1.5}
