/* KidsColorsBook V3: Colour World × Paper Playground
 *
 * Front page and collection-landing decoration only. inc/enqueue.php loads this
 * on seven templates, so nothing that header.php or footer.php emits site-wide
 * may live here. Global chrome (.kcb-header--v3, .kcb-brand-lockup*,
 * .kcb-nav-list a, .kcb-kicker-link, .kcb-button--playful, .kcb-footer--v3 and
 * .kcb-footer__headline) is in main.css. */

.kcb-js [data-kcb-reveal]{opacity:0;transform:translateY(30px);transition:opacity var(--kcb-dur-reveal) var(--kcb-ease),transform var(--kcb-dur-reveal) var(--kcb-ease)}
[data-kcb-reveal].is-visible{opacity:1;transform:none}

.kcb-main--v3{overflow-x:clip}
.kcb-hero-v3{position:relative;min-height:min(940px,calc(100vh - 20px));display:flex;align-items:center;background:radial-gradient(circle at top right, rgba(255,255,255,.85), rgba(255,252,245,.74));isolation:isolate;padding:6.5rem 0 5.4rem}
.kcb-hero-v3__grid{display:grid;grid-template-columns:minmax(0,.96fr) minmax(460px,1.04fr);align-items:center;gap:clamp(2.5rem,6vw,6rem);position:relative;z-index:2}
.kcb-hero-v3__copy{max-width:620px}
.kcb-hero-v3__copy h1{display:flex;flex-direction:column;font-size:clamp(3.5rem,10vw,7.6rem);line-height:.88;letter-spacing:-.08em;margin:0 0 1.2rem}
/* The headline never renders below 56px, so it is large text at every viewport
   and the 3:1 display tints apply. */
.kcb-hero-v3__copy h1 span:nth-child(1){color:var(--kcb-coral-display)}
.kcb-hero-v3__copy h1 span:nth-child(2){color:var(--kcb-ink)}
.kcb-hero-v3__copy h1 span:nth-child(3){color:var(--kcb-sky-display)}
.kcb-hero-v3__copy .kcb-lead{max-width:32ch;font-size:clamp(1.02rem,2vw,1.24rem)}
.kcb-hero-v3__proof{display:flex;flex-wrap:wrap;gap:.75rem 1rem;list-style:none;padding:0;margin:1.35rem 0 0;color:var(--kcb-muted);font-size:.84rem;font-weight:770}
.kcb-hero-v3__proof li{display:flex;align-items:center;gap:.45rem;padding:.4rem .65rem;background:rgba(255,255,255,.6);border:1px solid rgba(32,33,31,.08);border-radius:999px}
.kcb-hero-v3__proof li span{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--kcb-ink);color:#fff;font-size:.65rem}
.kcb-hero-v3__visual{position:relative;min-height:690px;display:grid;place-items:center;transition:transform var(--kcb-dur-fast) ease}
.kcb-webgl-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:-3;pointer-events:none}
.kcb-hero-v3__floaters{position:absolute;inset:0;pointer-events:none;z-index:-1}
.kcb-floater{position:absolute;display:grid;place-items:center;line-height:1;font-weight:900}
.kcb-floater--star{left:8%;top:18%;font-size:2.6rem;color:#FFB200;animation:kcb-float 6s ease-in-out infinite}
.kcb-floater--splash{right:7%;top:22%;font-size:3.6rem;color:#ff4fa3;animation:kcb-spin-soft 18s linear infinite}
.kcb-floater--blob{left:52%;bottom:16%;width:120px;height:120px;border-radius:58% 42% 66% 34%;background:rgba(122,183,210,.18);border:2px solid rgba(32,33,31,.09)}
.kcb-floater--arc{right:14%;bottom:12%;width:180px;height:180px;border:3px solid rgba(32,33,31,.09);border-radius:50%;border-left-color:transparent;border-bottom-color:transparent;transform:rotate(25deg)}
.kcb-hero-v3__ribbon{position:absolute;left:-4%;right:-4%;bottom:-20px;display:flex;justify-content:center;align-items:center;gap:clamp(1rem,4vw,3rem);min-height:52px;background:var(--kcb-ink);color:#fff;font-size:.72rem;font-weight:900;letter-spacing:.16em;transform:rotate(-1.25deg);z-index:3}
.kcb-hero-v3__ribbon i{font-style:normal;color:var(--kcb-yellow)}

.kcb-rainbow-arc{position:absolute;top:15px;left:50%;transform:translateX(-50%);width:min(86%,560px);aspect-ratio:1/1;display:grid;place-items:end center;z-index:0}
.kcb-rainbow-arc span{position:absolute;left:50%;bottom:0;border-radius:999px 999px 0 0;border:10px solid transparent;border-bottom:none;transform:translateX(-50%)}
.kcb-rainbow-arc span:nth-child(1){width:100%;height:70%;border-color:#ff3f9d}
.kcb-rainbow-arc span:nth-child(2){width:84%;height:58%;border-color:#ff9500}
.kcb-rainbow-arc span:nth-child(3){width:68%;height:46%;border-color:#f3c438}
.kcb-rainbow-arc span:nth-child(4){width:52%;height:34%;border-color:#19a4e4}
.kcb-book-stage{position:relative;width:min(100%,700px);height:660px;display:grid;place-items:center}
.kcb-book-stage__backdrop{position:absolute;inset:16% 12% 8%;background:radial-gradient(circle at center, rgba(255,255,255,.95), rgba(255,255,255,.25));border-radius:50%;filter:blur(2px)}
.kcb-book-stage__sheet{position:absolute;border:2px solid var(--kcb-ink);box-shadow:18px 18px 0 rgba(32,33,31,.08)}
.kcb-book-stage__sheet--back{width:360px;height:470px;background:rgba(255,79,163,.16);transform:rotate(-10deg) translate(-100px,18px)}
.kcb-book-stage__sheet--middle{width:350px;height:450px;background:rgba(25,164,228,.16);transform:rotate(8deg) translate(86px,10px)}
.kcb-book-stage__book{position:relative;width:min(84%,600px);height:430px;display:grid;grid-template-columns:1fr 1fr;background:#fff;border:4px solid #143267;border-bottom-width:6px;border-radius:18px;box-shadow:0 26px 60px rgba(20,50,103,.18);transform:rotate(-1.5deg)}
.kcb-book-stage__spine{position:absolute;left:50%;top:0;bottom:0;width:16px;transform:translateX(-50%);background:#143267;border-inline:2px solid #0d2042}
.kcb-book-stage__page{position:relative;padding:2rem 1.5rem;display:flex;justify-content:center;align-items:center;overflow:hidden}
.kcb-book-stage__page--left::after,.kcb-book-stage__page--right::after{content:"";position:absolute;inset:16px;border:2px solid rgba(20,50,103,.82);border-radius:10px}
.kcb-book-stage__page--left{background:linear-gradient(180deg,#ffffff,#f7fbff)}
.kcb-book-stage__page--right{background:linear-gradient(180deg,#ffffff,#fffdfa)}
.kcb-book-stage__logo{position:absolute;left:50%;top:-116px;width:230px;transform:translateX(-50%);filter:drop-shadow(0 14px 22px rgba(0,0,0,.14));z-index:4}
.kcb-drawing-star{position:relative;width:130px;height:130px;border:4px solid #143267;background:#fff;clip-path:polygon(50% 0%,61% 35%,98% 35%,68% 57%,79% 92%,50% 70%,21% 92%,32% 57%,2% 35%,39% 35%)}
.kcb-drawing-star::after{content:"";position:absolute;left:50%;top:50%;width:18px;height:18px;background:#143267;border-radius:50%;transform:translate(-50%,-50%)}
.kcb-drawing-dot{position:absolute;left:42px;bottom:64px;width:24px;height:24px;border-radius:50%;background:#21b2f3;border:3px solid #143267}
.kcb-drawing-flower{position:relative;width:170px;height:170px}
.kcb-drawing-flower::before{content:"";position:absolute;left:50%;bottom:18px;width:8px;height:78px;background:#55b928;transform:translateX(-50%)}
.kcb-drawing-flower::after{content:"";position:absolute;left:50%;top:50px;width:44px;height:44px;border-radius:50%;background:#ffd43f;border:4px solid #143267;transform:translateX(-50%)}
.kcb-drawing-flower.flower--large .flower-petal, .kcb-drawing-flower.flower--small .flower-petal{display:none}
.kcb-drawing-flower span{display:none}
.kcb-drawing-flower{--petal:#fff}
.kcb-drawing-flower{background:
 radial-gradient(circle at 50% 38%, #ffd43f 0 18px, transparent 19px),
 radial-gradient(ellipse at 50% 16%, var(--petal) 0 28px, transparent 29px),
 radial-gradient(ellipse at 27% 32%, var(--petal) 0 28px, transparent 29px),
 radial-gradient(ellipse at 73% 32%, var(--petal) 0 28px, transparent 29px),
 radial-gradient(ellipse at 34% 59%, var(--petal) 0 28px, transparent 29px),
 radial-gradient(ellipse at 66% 59%, var(--petal) 0 28px, transparent 29px);
 background-repeat:no-repeat}
.kcb-drawing-flower.flower--small{width:66px;height:66px;position:absolute;right:48px;bottom:72px;transform:rotate(-15deg)}
.kcb-drawing-flower.flower--small::before{height:26px;width:4px;bottom:4px}
.kcb-drawing-flower.flower--small::after{width:18px;height:18px;top:18px;border-width:3px}
.kcb-pencil-knot{position:absolute;right:8px;bottom:24px;width:160px;height:180px}
.kcb-pencil-3d{position:absolute;display:block;width:22px;height:150px;border:3px solid #143267;border-radius:10px;background:#ffb200;box-shadow:0 10px 20px rgba(0,0,0,.12)}
.kcb-pencil-3d::before{content:"";position:absolute;left:50%;top:-22px;width:0;height:0;border-left:11px solid transparent;border-right:11px solid transparent;border-bottom:22px solid #f7d8ab;transform:translateX(-50%)}
.kcb-pencil-3d::after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:24px;border-top:3px solid #143267;background:#ff4fa3;border-radius:0 0 7px 7px}
.kcb-pencil-3d--yellow{left:24px;bottom:12px;transform:rotate(28deg)}
.kcb-pencil-3d--pink{left:86px;bottom:30px;background:#ff66b7;transform:rotate(6deg)}
.kcb-pencil-3d--blue{left:116px;bottom:6px;background:#19a4e4;transform:rotate(42deg)}

.kcb-portal-band{padding-top:6rem}
.kcb-section-heading--playful h2{font-size:clamp(2.2rem,5vw,4.1rem);max-width:14ch}
.kcb-section-heading--playful p:last-child{max-width:62ch;color:var(--kcb-muted)}
.kcb-portals{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem}
.kcb-portal{position:relative;min-height:290px;padding:1.5rem 1.6rem;border:2px solid var(--kcb-ink);background:#fff;text-decoration:none;overflow:hidden;transform:perspective(900px) rotateX(var(--kcb-tilt-x,0deg)) rotateY(var(--kcb-tilt-y,0deg));transition:transform var(--kcb-dur-fast) ease,box-shadow var(--kcb-dur-fast) ease}
.kcb-portal:hover{box-shadow:10px 10px 0 var(--kcb-ink)}
.kcb-portal strong{position:relative;z-index:1;display:block;font-size:clamp(2.2rem,5vw,4rem);line-height:.95;letter-spacing:-.05em;margin-top:auto}
.kcb-portal p{position:relative;z-index:1;max-width:20ch;color:rgba(32,33,31,.78);margin-top:.8rem}
.kcb-portal__shape{position:absolute;right:-28px;top:-30px;width:210px;height:210px;border:3px solid var(--kcb-ink);opacity:.92}
.kcb-portal--colour{background:linear-gradient(135deg,#fff,rgba(255,79,163,.12))}
.kcb-portal--colour .kcb-portal__shape{border-radius:48% 52% 41% 59%;background:rgba(255,79,163,.18)}
.kcb-portal--play{background:linear-gradient(135deg,#fff,rgba(243,196,56,.13))}
.kcb-portal--play .kcb-portal__shape{border-radius:52% 48% 55% 45%;background:rgba(243,196,56,.24)}
.kcb-portal--learn{background:linear-gradient(135deg,#fff,rgba(25,164,228,.12))}
.kcb-portal--learn .kcb-portal__shape{border-radius:12px;transform:rotate(16deg);background:rgba(25,164,228,.18)}
.kcb-portal--unplug{background:linear-gradient(135deg,#fff,rgba(85,185,40,.12))}
.kcb-portal--unplug .kcb-portal__shape{border-radius:50%;background:rgba(85,185,40,.18)}

/* --- Printable spotlights ---------------------------------------------------
   Cards, not editorial rows. Each one is a single link, so the whole card is one
   hover target and one tab stop, and the hover is a lift rather than a tilt: a
   card that follows the pointer around is hard to aim at, and these are the
   things on the front page a visitor is most likely to be aiming at. */
.kcb-story-showcase{background:linear-gradient(180deg,#fff 0, #fffcf5 100%)}
.kcb-spotlights{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(1rem,2vw,1.5rem)}
/* The newest printable takes the wide slot and reads across, which gives the row
   beneath it something to be a row under. */
.kcb-spotlight--wide{grid-column:1/-1}
.kcb-spotlight__link{display:flex;flex-direction:column;height:100%;overflow:hidden;border:1px solid var(--kcb-border);border-radius:20px;background:#fff;color:inherit;text-decoration:none;transition:transform var(--kcb-dur-base) var(--kcb-ease),box-shadow var(--kcb-dur-base) ease,border-color var(--kcb-dur-base) ease}
.kcb-spotlight__link:hover,.kcb-spotlight__link:focus-visible{text-decoration:none;transform:translateY(-4px);border-color:rgba(32,33,31,.16);box-shadow:0 22px 46px rgba(32,33,31,.13)}
.kcb-spotlight--wide .kcb-spotlight__link{flex-direction:row;align-items:stretch}
/* The wide card's panel takes its height from the copy beside it instead of an
   aspect ratio, which at this width would make it absurdly tall. */
.kcb-spotlight--wide .kcb-spotlight__media{flex:0 0 44%;aspect-ratio:auto;min-height:340px;max-height:none}
.kcb-spotlight--wide .kcb-spotlight__body{justify-content:center;padding:clamp(1.5rem,3vw,2.75rem)}
/* The wide card is a row of its own, so its price has nothing to line up with and
   pinning it to the bottom of a 500px panel just opens a hole under the chips.
   Releasing margin-top lets title, copy, chips and price centre as one block. */
.kcb-spotlight--wide .kcb-spotlight__foot{margin-top:0;padding-top:1.6rem}
.kcb-spotlight--wide .kcb-spotlight__title{font-size:clamp(1.55rem,3vw,2.4rem)}
.kcb-spotlight--wide .kcb-spotlight__excerpt{font-size:1rem}

/* A fixed portrait panel with the cover contained inside it. Every cover keeps
   its own proportions and none of them are cropped, while the cards still line
   up with each other. */
.kcb-spotlight__media{position:relative;display:grid;place-items:center;aspect-ratio:4/5;max-height:360px;padding:clamp(1rem,2vw,1.7rem);background:var(--kcb-surface);overflow:hidden}
.kcb-spotlight__media img{display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 14px 26px rgba(32,33,31,.16));transition:transform var(--kcb-dur-slow) var(--kcb-ease)}
.kcb-spotlight__link:hover .kcb-spotlight__media img,.kcb-spotlight__link:focus-visible .kcb-spotlight__media img{transform:scale(1.03)}

.kcb-spotlight__body{display:flex;flex-direction:column;gap:.5rem;flex:1;padding:clamp(1.1rem,2vw,1.5rem)}
.kcb-spotlight__title{margin:0;font-size:clamp(1.12rem,2vw,1.38rem);line-height:1.2;letter-spacing:-.02em}
.kcb-spotlight__excerpt{margin:0;max-width:46ch;font-size:.92rem;line-height:1.5;color:var(--kcb-muted)}
/* The real product details, in place of the eyebrow that used to say PRINTABLE
   SPOTLIGHT once per card inside a section already titled that. */
.kcb-spotlight__facts{display:flex;flex-wrap:wrap;gap:.4rem;margin:.3rem 0 0;padding:0}
.kcb-spotlight__fact{display:flex;align-items:baseline;gap:.32rem;padding:.28rem .62rem;border:1px solid var(--kcb-border);border-radius:999px;background:var(--kcb-paper);font-size:.76rem;line-height:1.3}
.kcb-spotlight__fact dt{margin:0;font-weight:700;color:var(--kcb-muted)}
.kcb-spotlight__fact dd{margin:0;font-weight:700;color:var(--kcb-ink)}
/* margin-top:auto pins the price row to the bottom edge, so cards with unequal
   copy still line their prices up across the row. */
.kcb-spotlight__foot{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:auto;padding-top:1.1rem}
.kcb-spotlight__price{font-size:1.02rem;font-weight:750;color:var(--kcb-ink)}
.kcb-spotlight__price del{margin-right:.35rem;font-weight:600;opacity:.55}
.kcb-spotlight__price ins{text-decoration:none}
.kcb-spotlight__cta{display:inline-flex;align-items:center;gap:.4rem;flex:none;font-size:.85rem;font-weight:720;color:var(--kcb-coral-text)}
.kcb-spotlight__cta .kcb-arrow{transition:transform var(--kcb-dur-base) var(--kcb-ease)}
.kcb-spotlight__link:hover .kcb-arrow,.kcb-spotlight__link:focus-visible .kcb-arrow{transform:translateX(4px)}

.kcb-spotlights--empty{grid-template-columns:1fr}
.kcb-spotlight--placeholder{display:grid;grid-template-columns:minmax(200px,300px) 1fr;gap:clamp(1.2rem,3vw,2rem);align-items:center;padding:clamp(1.2rem,3vw,2rem);border:1px dashed var(--kcb-border);border-radius:20px;background:#fff}
.kcb-spotlight--placeholder .kcb-spotlight__media{aspect-ratio:auto;padding:0;background:transparent}
.kcb-spotlight--placeholder .kcb-spotlight__body{padding:0}
.kcb-spotlight__mock-cover{width:100%;max-width:240px;aspect-ratio:4/5;display:flex;flex-direction:column;justify-content:space-between;padding:1rem;border-radius:14px;background:linear-gradient(135deg,#ffecf8,#fff);box-shadow:0 18px 30px rgba(32,33,31,.1)}
.kcb-spotlight__mock-cover span{font-size:.72rem;font-weight:800;letter-spacing:.14em;color:var(--kcb-muted)}
.kcb-spotlight__mock-cover strong{font-size:1.22rem;line-height:1.1;letter-spacing:-.02em}

/* This section used to carry a hand-written 4.5rem/5rem, which is where the odd
   80px bottom came from. It has no background of its own, so it is an ordinary
   section: .kcb-section gives it the default beat, and the seam rule in main.css
   tightens its top because the showcase above it shares the same paper. */
.kcb-colour-play-section__grid{display:grid;grid-template-columns:.75fr 1.25fr;align-items:center;gap:clamp(2rem,7vw,6rem)}
.kcb-colour-play-section__grid>div:first-child{max-width:480px}
.kcb-colour-play-section .kcb-react-playground{max-width:100%}

/* A full-bleed dark statement, so it takes the loose beat, the same as the other
   one on this page. .kcb-section supplies the default beat and this overrides it
   on source order, which is why the declaration belongs here beside the
   background it is pacing rather than in main.css. */
.kcb-screenfree-message{padding:var(--kcb-section-y-loose) 0;background:var(--kcb-ink);color:#fff;position:relative;overflow:hidden}
.kcb-screenfree-message::before{content:"";position:absolute;left:-40px;bottom:-60px;width:240px;height:240px;background:rgba(255,79,163,.25);border-radius:50%;filter:blur(10px)}
.kcb-screenfree-message__grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,7vw,6rem);align-items:center}
.kcb-screenfree-message__type{display:grid;gap:.1em;font-size:clamp(3rem,8vw,6.5rem);line-height:.86;letter-spacing:-.08em}
.kcb-screenfree-message__type span:first-child{color:#c2c4be}
.kcb-screenfree-message__type span:nth-child(2){color:#fff}
.kcb-screenfree-message__type em{font-style:normal;color:var(--kcb-yellow)}
.kcb-screenfree-message__type strong{color:var(--kcb-sky)}
.kcb-screenfree-message__copy p:not(.kcb-eyebrow){color:#d4d5d2}

.kcb-how-v3{background:#fff}
.kcb-process-line{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;list-style:none;padding:0;margin:0;counter-reset:none}
.kcb-process-line li{position:relative;padding:1.5rem 1.2rem 1.2rem;border:2px solid var(--kcb-ink);background:var(--kcb-paper);min-height:210px}
.kcb-process-line li span{display:inline-block;margin-bottom:2.2rem;font-size:.74rem;font-weight:900;letter-spacing:.16em;color:var(--kcb-muted)}
.kcb-process-line li strong{display:block;font-size:clamp(1.2rem,3vw,1.85rem);letter-spacing:-.04em;margin-bottom:.55rem}
.kcb-process-line li p{color:var(--kcb-muted);max-width:22ch}
.kcb-process-line li::after{content:"";position:absolute;right:-.62rem;top:50%;width:1.24rem;height:1.24rem;background:var(--kcb-ink);border-radius:50%;transform:translateY(-50%)}
.kcb-process-line li:last-child::after{display:none}

/* The front page's newsletter panel. Like the two dark statements it is
   full-bleed and owns its background, so it takes the loose beat. It carries no
   .kcb-section class, so this declaration is the only thing pacing it and has to
   stay. Its twin on the events page is .kcb-freebie in main.css, set to the same
   token so the two read as one component. */
.kcb-freebie-v3{padding:var(--kcb-section-y-loose) 0;background:linear-gradient(135deg,#f6c739,#ffd84d)}
.kcb-freebie-v3__grid{display:grid;grid-template-columns:.9fr 1.1fr;align-items:center;gap:clamp(2rem,7vw,6rem)}
.kcb-envelope{position:relative;width:min(100%,340px);height:240px;border:3px solid var(--kcb-ink);background:#fff;margin:auto;box-shadow:12px 12px 0 rgba(32,33,31,.12)}
.kcb-envelope__lid{position:absolute;left:-3px;right:-3px;top:-3px;height:0;border-left:173px solid transparent;border-right:173px solid transparent;border-top:0;border-bottom:130px solid #ffe69a}
.kcb-envelope__paper{position:absolute;left:24px;right:24px;top:26px;bottom:24px;background:#fff;border:2px solid var(--kcb-ink);padding:1.1rem;display:flex;flex-direction:column;justify-content:space-between;transform:translateY(-12px)}
.kcb-envelope__paper span{font-size:.78rem;font-weight:900;letter-spacing:.12em}
.kcb-envelope__paper strong{font-size:2.3rem;line-height:.9;letter-spacing:-.05em;color:var(--kcb-coral)}
.kcb-freebie-v3__content{max-width:560px}
.kcb-freebie-v3__action>*{margin-top:1rem}

.kcb-social-wall{background:#fff}
.kcb-social-wall__grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:220px 220px;gap:1rem}
.kcb-social-card{position:relative;padding:1.2rem;border:2px solid var(--kcb-ink);overflow:hidden;background:linear-gradient(135deg,rgba(255,79,163,.14),rgba(255,255,255,.92));min-height:220px}
.kcb-social-card::before{content:"";position:absolute;right:-18px;bottom:-22px;width:150px;height:150px;border:3px solid var(--kcb-ink);border-radius:50%;opacity:.18}
.kcb-social-card span{position:relative;z-index:1;display:inline-block;padding:.32rem .55rem;background:#fff;border:1px solid var(--kcb-ink);font-size:.72rem;font-weight:900;letter-spacing:.1em;text-transform:uppercase}
.kcb-social-card strong{position:relative;z-index:1;display:block;max-width:18ch;font-size:clamp(1.35rem,3vw,2rem);line-height:1.02;letter-spacing:-.04em;margin-top:1rem}
.kcb-social-card:nth-child(2){background:linear-gradient(135deg,rgba(25,164,228,.16),rgba(255,255,255,.92))}
.kcb-social-card:nth-child(3){background:linear-gradient(135deg,rgba(243,196,56,.2),rgba(255,255,255,.92))}
.kcb-social-card:nth-child(4){background:linear-gradient(135deg,rgba(85,185,40,.16),rgba(255,255,255,.92))}
.kcb-social-card--tall{grid-row:1/span 2}
.kcb-social-card--wide{grid-column:2}
.kcb-social-wall .kcb-social-links--large{justify-content:flex-end;gap:.7rem}
.kcb-social-wall .kcb-social-links--large a{border:2px solid var(--kcb-ink);background:var(--kcb-paper);padding:.75rem 1rem;text-decoration:none;min-width:auto}

/* Existing React / motion support retained and visually integrated */
.kcb-react-mount{min-height:100px}
.kcb-playground-fallback{min-height:430px;display:grid;place-items:center;background:#fff;border:2px solid var(--kcb-ink);box-shadow:10px 10px 0 var(--kcb-ink);padding:2rem}
.kcb-playground-fallback__paper{font-size:4rem}
.kcb-react-playground{position:relative;max-width:560px;margin-left:auto;padding:1rem 1rem 1.2rem;background:#fff;border:2px solid var(--kcb-ink);box-shadow:12px 12px 0 var(--kcb-ink);transform:rotate(1deg)}
.kcb-react-playground::before{content:"";position:absolute;inset:-16px 18px 18px -16px;background:var(--kcb-yellow);border:2px solid var(--kcb-ink);z-index:-1;transform:rotate(-3deg)}
.kcb-react-playground__topline{display:flex;justify-content:space-between;gap:1rem;padding:.25rem .25rem .8rem;font-size:.7rem;font-weight:850;letter-spacing:.08em}
.kcb-react-playground__hint{color:var(--kcb-muted);font-weight:700;letter-spacing:0}
.kcb-react-sheet-wrap{position:relative;min-height:410px}
.kcb-react-sheet{position:absolute;inset:0;border:2px solid var(--kcb-ink)}
.kcb-react-sheet--back{background:var(--kcb-sky);transform:rotate(4deg)}
.kcb-react-sheet--mid{background:var(--kcb-coral);transform:rotate(-3deg)}
.kcb-react-sheet--front{position:relative;background:var(--kcb-paper);padding:1rem 1rem .7rem;display:flex;flex-direction:column;min-height:410px}
.kcb-react-sheet__label{font-size:.66rem;font-weight:900;letter-spacing:.12em}
.kcb-react-drawing{display:block;width:100%;height:auto;max-height:315px;overflow:visible}
.kcb-react-fill{transition:fill var(--kcb-dur-base) ease}
.kcb-react-spark{animation:kcb-pop var(--kcb-dur-slow) ease-out}
.kcb-react-sheet__caption{margin:auto 0 0;font-size:.8rem;font-weight:700}
.kcb-react-palette{display:flex;justify-content:center;gap:.65rem;padding-top:1rem}
.kcb-react-swatch{position:relative;width:34px;height:34px;border:2px solid var(--kcb-ink);border-radius:50%;padding:3px;background:white;cursor:pointer;transition:transform var(--kcb-dur-fast) ease}
.kcb-react-swatch span{display:block;width:100%;height:100%;border-radius:50%;background:var(--swatch)}
.kcb-react-swatch:hover,.kcb-react-swatch.is-active{transform:translateY(-4px) scale(1.08)}
.kcb-react-swatch.is-active::after{content:"";position:absolute;inset:-6px;border:2px solid var(--kcb-ink);border-radius:50%}

.kcb-moment-finder-section{padding:var(--kcb-section-y-loose) 0;background:var(--kcb-ink);color:white;position:relative}
.kcb-moment-finder-section::after{content:"✦";position:absolute;right:4%;top:9%;font-size:5rem;color:var(--kcb-yellow);transform:rotate(13deg);opacity:.85}
.kcb-moment-finder__header{display:grid;grid-template-columns:1fr auto;gap:3rem;align-items:end;margin-bottom:3rem}
.kcb-moment-finder__header>div:first-child{max-width:800px}
.kcb-moment-finder__header>div:first-child>p:last-child{color:#c9cac5}
.kcb-moment-finder__scribble{font-size:7rem;color:var(--kcb-coral);transform:rotate(-9deg)}
.kcb-moment-finder__layout{display:grid;grid-template-columns:.72fr 1.28fr;border:2px solid white}
.kcb-moment-tabs{display:flex;flex-direction:column;border-right:2px solid white}
.kcb-moment-tabs button{display:grid;grid-template-columns:44px 1fr;gap:1rem;text-align:left;align-items:center;min-height:82px;border:0;border-bottom:1px solid rgba(255,255,255,.35);background:transparent;color:white;padding:1rem 1.25rem;cursor:pointer}
.kcb-moment-tabs button:last-child{border-bottom:0}
.kcb-moment-tabs button span{font-size:.68rem;color:#b9bab5;font-weight:800}
.kcb-moment-tabs button strong{font-size:1rem}
.kcb-moment-tabs button[aria-selected="true"]{background:var(--kcb-yellow);color:var(--kcb-ink)}
.kcb-moment-tabs button[aria-selected="true"] span{color:var(--kcb-ink)}
.kcb-moment-panel{min-height:420px;display:grid;grid-template-columns:.9fr 1.1fr;background:var(--kcb-paper);color:var(--kcb-ink)}
.kcb-moment-panel__art{position:relative;overflow:hidden;min-height:320px;background:var(--kcb-coral)}
.kcb-moment-panel__shape{position:absolute;display:block;border:3px solid var(--kcb-ink)}
.kcb-moment-panel__shape--one{width:180px;height:180px;border-radius:50%;left:15%;top:18%;background:var(--kcb-yellow);animation:kcb-float 5s ease-in-out infinite}
.kcb-moment-panel__shape--two{width:130px;height:230px;border-radius:60% 60% 35% 35%;right:7%;bottom:-35px;background:var(--kcb-sky);transform:rotate(18deg)}
.kcb-moment-panel__shape--three{width:90px;height:90px;left:58%;top:13%;background:white;transform:rotate(15deg)}
.kcb-moment-panel--rainy .kcb-moment-panel__art{background:var(--kcb-sky)}
.kcb-moment-panel--rainy .kcb-moment-panel__shape--one{background:white}
.kcb-moment-panel--travel .kcb-moment-panel__art{background:var(--kcb-green)}
.kcb-moment-panel--travel .kcb-moment-panel__shape--two{background:var(--kcb-yellow)}
.kcb-moment-panel--preschool .kcb-moment-panel__art{background:var(--kcb-yellow)}
.kcb-moment-panel--preschool .kcb-moment-panel__shape--one{background:var(--kcb-coral)}
.kcb-moment-panel__copy{align-self:center;padding:clamp(2rem,5vw,4rem)}
.kcb-moment-panel__copy h3{font-size:clamp(2rem,4vw,3rem)}
.kcb-moment-panel__copy>p:not(.kcb-eyebrow){color:var(--kcb-muted)}

@keyframes kcb-float{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-12px) rotate(3deg)}}
@keyframes kcb-spin-soft{from{transform:rotate(0)}to{transform:rotate(360deg)}}
@keyframes kcb-pop{0%{opacity:0;transform:scale(.4)}70%{opacity:1;transform:scale(1.3)}100%{opacity:1;transform:scale(1)}}

@media(max-width:1180px){
	.kcb-hero-v3__visual{min-height:620px}
	.kcb-book-stage{height:600px}
	.kcb-spotlight--wide .kcb-spotlight__media{flex-basis:40%}
}
/* .98 to match the header's drawer edge in main.css. */
@media(max-width:959.98px){
	.kcb-hero-v3{padding-top:5rem;padding-bottom:4.8rem;min-height:auto}
	.kcb-hero-v3__grid,.kcb-colour-play-section__grid,.kcb-screenfree-message__grid,.kcb-freebie-v3__grid{grid-template-columns:1fr}
	.kcb-hero-v3__copy{max-width:720px}
	.kcb-hero-v3__copy h1{font-size:clamp(3rem,14vw,5.6rem)}
	.kcb-hero-v3__visual{min-height:560px}
	.kcb-book-stage{height:540px}
	.kcb-book-stage__logo{width:180px;top:-95px}
	.kcb-portals,.kcb-process-line,.kcb-social-wall__grid{grid-template-columns:1fr 1fr}
	.kcb-process-line li::after{display:none}
	/* The wide card stops being wide and joins the row, so all four read the same.
	   A full-width card with a 4/5 panel would be most of a screen tall. */
	.kcb-spotlight--wide{grid-column:auto}
	.kcb-spotlight--wide .kcb-spotlight__link{flex-direction:column}
	.kcb-spotlight--wide .kcb-spotlight__media{flex:none;aspect-ratio:4/5;min-height:0;max-height:360px}
	.kcb-spotlight--wide .kcb-spotlight__body{justify-content:flex-start;padding:clamp(1.1rem,2vw,1.5rem)}
	/* Back in the grid, so it lines its price up with the card beside it again. */
	.kcb-spotlight--wide .kcb-spotlight__foot{margin-top:auto;padding-top:1.1rem}
	.kcb-spotlight--wide .kcb-spotlight__title{font-size:clamp(1.12rem,2vw,1.38rem)}
	.kcb-spotlight--wide .kcb-spotlight__excerpt{font-size:.92rem}
	.kcb-spotlight--placeholder{grid-template-columns:1fr}
	.kcb-moment-finder__layout{grid-template-columns:1fr}
	.kcb-moment-tabs{display:grid;grid-template-columns:repeat(4,1fr);border-right:0;border-bottom:2px solid white}
	.kcb-moment-tabs button{grid-template-columns:1fr;gap:.3rem;border-bottom:0;border-right:1px solid rgba(255,255,255,.35)}
	.kcb-moment-tabs button:last-child{border-right:0}
}
@media(max-width:680px){
	.kcb-hero-v3__proof{display:grid}
	/* One card per row. The panel turns landscape here, because a portrait one at
	   full phone width would push the price and the title off the screen. */
	.kcb-spotlights{grid-template-columns:1fr}
	.kcb-spotlight__media,.kcb-spotlight--wide .kcb-spotlight__media{aspect-ratio:5/4}
	.kcb-hero-v3__visual{min-height:440px}
	.kcb-book-stage{height:430px}
	.kcb-book-stage__book{height:280px;border-width:3px}
	.kcb-book-stage__spine{width:12px}
	.kcb-book-stage__logo{width:130px;top:-66px}
	.kcb-book-stage__sheet--back{width:240px;height:320px;transform:rotate(-10deg) translate(-66px,16px)}
	.kcb-book-stage__sheet--middle{width:228px;height:300px;transform:rotate(8deg) translate(56px,9px)}
	.kcb-pencil-knot{width:110px;height:110px;right:2px;bottom:2px}
	.kcb-pencil-3d{width:16px;height:90px;border-width:2px}
	.kcb-pencil-3d::before{top:-16px;border-left-width:8px;border-right-width:8px;border-bottom-width:16px}
	.kcb-pencil-3d::after{height:16px;border-top-width:2px}
	.kcb-portal-band{padding-top:4rem}
	.kcb-portals,.kcb-process-line,.kcb-social-wall__grid{grid-template-columns:1fr}
	.kcb-portal{min-height:210px}
	.kcb-social-card--tall{grid-row:auto}
	.kcb-social-card--wide{grid-column:auto}
	.kcb-social-wall .kcb-social-links--large{justify-content:flex-start}
	.kcb-moment-finder__header{grid-template-columns:1fr}
	.kcb-moment-finder__scribble{display:none}
	.kcb-moment-tabs{grid-template-columns:repeat(2,1fr)}
	.kcb-moment-tabs button{min-height:72px}
	.kcb-moment-tabs button:nth-child(2){border-right:0}
	.kcb-moment-tabs button:nth-child(-n+2){border-bottom:1px solid rgba(255,255,255,.35)}
	.kcb-moment-panel{grid-template-columns:1fr}
	.kcb-moment-panel__art{min-height:230px}
}
@media(prefers-reduced-motion:reduce){
	[data-kcb-reveal]{opacity:1;transform:none;transition:none}
	.kcb-floater,.kcb-moment-panel__shape--one{animation:none!important}
	.kcb-portal{transform:none!important;transition:none!important}
	/* The card keeps its shadow and its colour change on hover, which is still a
	   clear answer to "am I pointing at this". Only the movement goes. */
	.kcb-spotlight__link,.kcb-spotlight__media img,.kcb-spotlight__cta .kcb-arrow{transform:none!important;transition:box-shadow var(--kcb-dur-fast) ease,border-color var(--kcb-dur-fast) ease!important}
}
