<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800&family=Source+Serif+4:ital,opsz,wght@0,8..60,300;0,8..60,400;0,8..60,600;0,8..60,700;1,8..60,400&display=swap" rel="stylesheet">
<style>
/* Coffee Break Languages: shared site styles (October 2026 rebuild, "D3" direction)
 *
 * One stylesheet for the homepage, language hubs, level pages, landing pages and
 * post templates. The style guide at styleguide.html shows every piece in use.
 *
 * House rules (Mark, 12 Oct 2026), enforced here:
 *  - Structure is square. Panels, bands, buttons, inputs, tags and tabs have no
 *    rounded corners. Pictures get 4px. Circles are for portraits and the round
 *    language logos only.
 *  - No borders or accent stripes on boxes. Separate things with space, a fill,
 *    or a plain rule between rows.
 *  - Montserrat ExtraBold for headings and interface text, Source Serif 4 for
 *    reading text. Never Inter.
 *  - One action colour per page, used for buttons only. CBL pages use lime;
 *    a language page uses that language's own accent (set with data-lang).
 *  - No pulsing dots, glows, gradient washes, chip rows, or stacked caps-and-
 *    letterspaced labels. Labels are sentence case.
 */

/* ------------------------------------------------------------------ tokens */
:root{
  /* type */
  --sans:'Montserrat',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --serif:'Source Serif 4',Georgia,'Times New Roman',serif;

  /* ink and paper */
  --ink:#14262e;        /* body text, headings */
  --ink-2:#2b3f46;      /* lede and secondary reading text */
  --muted:#4a5f66;      /* meta lines, captions (passes 4.5:1 on all papers) */
  --rule:#cdd8dc;       /* rules between rows */
  --paper:#ffffff;
  --paper-2:#f5f7f6;    /* default page ground */
  --paper-3:#eef3f2;    /* filled buttons, inputs, quiet panels */

  /* the brand band (dark sections, header, footer) */
  --band:#1c343e;
  --band-deep:#14262e;
  --on-band:#ffffff;
  --on-band-2:#c3d2d8;
  --band-rule:#2b4a57;

  /* the one action colour */
  --action:#91b21a;
  --action-hover:#a3c61e;
  --action-ink:#10201a;

  /* secondary colour for labels and kickers on light grounds */
  --accent:#37687c;

  /* shape and rhythm */
  --pic:4px;            /* picture corners. Everything else is 0. */
  --wrap:1280px;
  --gutter:40px;
  --section:80px;       /* vertical padding of a section */
}

/* Language palettes, from the handout configs in .claude/skills/<lang>-video-handout.
 * Put data-lang on <body> (or any wrapper). band = primary, accent = secondary,
 * action = the language's accent colour, deepened where needed for 4.5:1 with white. */
[data-lang="fr"]{--band:#1b2057;--band-deep:#12163d;--band-rule:#2d3470;--on-band-2:#d5d7e9;--accent:#2d6391;--action:#d41920;--action-hover:#eb2129;--action-ink:#fff;--paper-3:#eceef6}
[data-lang="es"]{--band:#761115;--band-deep:#560c0f;--band-rule:#8f2227;--on-band-2:#fbd9da;--accent:#a3161c;--action:#c8161d;--action-hover:#eb2229;--action-ink:#fff;--paper-3:#fbefef}
[data-lang="it"]{--band:#026430;--band-deep:#014a23;--band-rule:#187a45;--on-band-2:#cdeedb;--accent:#037a3b;--action:#be1e2e;--action-hover:#d22b3c;--action-ink:#fff;--paper-3:#ecf6f0}
[data-lang="de"]{--band:#292929;--band-deep:#1c1c1c;--band-rule:#3d3d3d;--on-band-2:#fde7cb;--accent:#8a5a12;--action:#c23941;--action-hover:#d4454d;--action-ink:#fff;--paper-3:#fdf4e8}
[data-lang="en"]{--band:#123268;--band-deep:#0c2249;--band-rule:#24467f;--on-band-2:#d1daea;--accent:#1a4794;--action:#c9141a;--action-hover:#e1171a;--action-ink:#fff;--paper-3:#edf1f8}

/* The five smaller languages, sampled from their own course cards (header colour, number box). */
[data-lang="sv"]{--band:#0a568f;--band-deep:#073e68;--band-rule:#1f6aa3;--on-band-2:#d3e6f4;--accent:#0864a7;--action:#fdcf00;--action-hover:#ffdb3d;--action-ink:#10223a;--paper-3:#edf4fa}
[data-lang="pt"]{--band:#212c64;--band-deep:#161e47;--band-rule:#343f7a;--on-band-2:#d6dcf0;--accent:#087a38;--action:#087a38;--action-hover:#0b9947;--action-ink:#fff;--paper-3:#eef0f6}
[data-lang="zh"]{--band:#a31114;--band-deep:#7a0c0f;--band-rule:#b8272a;--on-band-2:#fde3cf;--accent:#c4161a;--action:#f8b236;--action-hover:#ffc45a;--action-ink:#3a1500;--paper-3:#fcf0ee}
[data-lang="ja"]{--band:#8f0311;--band-deep:#68020c;--band-rule:#a61a27;--on-band-2:#f6dcdc;--accent:#b20314;--action:#febcbd;--action-hover:#ffd2d3;--action-ink:#5a0109;--paper-3:#fdf1f1}
[data-lang="gd"]{--band:#0b3a66;--band-deep:#072a4b;--band-rule:#1d5288;--on-band-2:#d4e3f2;--accent:#146cb4;--action:#2b86d6;--action-hover:#4a9be2;--action-ink:#ffffff;--paper-3:#edf3f9}

/* ------------------------------------------------------------------ base */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:var(--serif);font-size:18px;line-height:1.55;color:var(--ink);background:var(--paper-2)}
img,video{max-width:100%;display:block}
a{color:inherit}
h1,h2,h3,h4,.h{font-family:var(--sans);font-weight:800;letter-spacing:-0.025em;line-height:1.1;margin:0}
h1{font-size:60px;line-height:1.04}
h2{font-size:34px}
h3{font-size:22px;line-height:1.2}
p{margin:0}
:focus-visible{outline:3px solid var(--action);outline-offset:3px}
[hidden]{display:none !important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-9999px;top:0;background:var(--action);color:var(--action-ink);padding:12px 16px;font-family:var(--sans);font-weight:700;z-index:100}
.skip:focus{left:16px}

.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--gutter)}

/* sections: white, pale (default ground) or the dark band */
.section{padding:var(--section) 0}
.section--white{background:var(--paper)}
.section--band{background:var(--band);color:var(--on-band)}
.section--tight{padding:56px 0}
.section-head{display:flex;justify-content:space-between;align-items:end;gap:16px 32px;flex-wrap:wrap;margin-bottom:28px}
.section-head h2{flex:1 1 auto}
.section-head .lede{margin-top:10px;max-width:60ch}

/* reading text */
.lede{font-size:21px;line-height:1.5;color:var(--ink-2)}
.section--band .lede{color:var(--on-band-2)}
.kicker{font-family:var(--sans);font-weight:700;font-size:15px;color:var(--accent);margin:0 0 10px}
.section--band .kicker{color:var(--on-band-2)}
.meta{font-family:var(--sans);font-size:13px;font-weight:600;color:var(--muted)}
.section--band .meta{color:var(--on-band-2)}

/* ------------------------------------------------------------------ actions */
.btn{display:inline-flex;align-items:center;gap:10px;font-family:var(--sans);font-weight:700;font-size:16px;line-height:1;padding:16px 22px;background:var(--action);color:var(--action-ink);text-decoration:none;border:0;cursor:pointer}
.btn:hover{background:var(--action-hover)}
.btn--band{background:var(--band);color:var(--on-band)}
.btn--band:hover{background:var(--band-deep)}
.btn--quiet{background:var(--paper-3);color:var(--ink)}
.btn--quiet:hover{background:var(--rule)}
.btn--small{font-size:15px;padding:12px 16px}
/* secondary action: a plain link, never a second button style */
.link{font-family:var(--sans);font-weight:600;font-size:15px;color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}
.link:hover{text-decoration-thickness:2px}
.actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px 24px}

/* square tags: one word or two, on a picture or before a title */
.tag{display:inline-block;font-family:var(--sans);font-size:12px;font-weight:700;line-height:1;padding:6px 9px;background:var(--action);color:var(--action-ink)}
.tag--band{background:var(--band);color:var(--on-band)}
.tag--paper{background:var(--paper);color:var(--ink)}

/* ------------------------------------------------------------------ promo bar */
/* One line above the header, site-wide, for a time-limited offer. Remove the
 * element to switch it off. Colour comes from the offer, not the page. */
.promo-bar{background:var(--promo-bg,#91b21a);color:var(--promo-ink,#10201a);font-family:var(--sans);font-size:15px;font-weight:600;text-align:center;padding:11px 16px}
.promo-bar a{font-weight:800;text-underline-offset:3px}
/* The 20th birthday bar, added by js/site.js 2.5s after load. Bright lime, slides open, and a
 * single sweep of light crosses it as it arrives. Nothing repeats. */
.bday-bar{position:relative;display:grid;grid-template-rows:1fr;background:#c3e03a;color:#10201a;overflow:hidden;transition:grid-template-rows .55s cubic-bezier(.2,.7,.2,1)}
.bday-bar.is-arriving{grid-template-rows:0fr}
.bday-bar__inner{min-height:0;display:flex;align-items:center;justify-content:center}
.bday-bar__text{flex:0 1 auto;padding:13px 8px 13px 48px;font-family:var(--sans);font-size:16px;font-weight:800;color:inherit;text-decoration:none;text-align:center}
.bday-bar__text span{margin-left:10px;font-weight:700;text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
.bday-bar__text span::after{content:" \2192"}
.bday-bar__text:hover span{text-decoration-thickness:2px}
.bday-bar__close{flex:0 0 auto;width:40px;height:40px;border:0;background:none;color:inherit;font-size:26px;line-height:1;cursor:pointer;opacity:.7}
.bday-bar__close:hover,.bday-bar__close:focus-visible{opacity:1}
.bday-bar::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(100deg,transparent 30%,rgba(255,255,255,.75) 50%,transparent 70%);transform:translateX(-100%);animation:bday-sweep 1.4s .45s ease-out 1 forwards}
@keyframes bday-sweep{to{transform:translateX(100%)}}
@media (prefers-reduced-motion:reduce){.bday-bar{transition:none}.bday-bar::after{display:none}}
@media (max-width:600px){.bday-bar__text{padding:11px 4px 11px 16px;font-size:15px}}

/* ------------------------------------------------------------------ header */
.site-header{background:var(--band);color:var(--on-band);position:sticky;top:0;z-index:40;transition:background-color .2s}
/* Over a hero: a dark-to-clear fade behind the nav, pulled over the hero by its own height.
 * js/site.js adds .is-solid once the page scrolls, and the band colour takes over. */
.site-header--over{background-color:transparent;background-image:linear-gradient(180deg,rgba(0,0,0,.5) 0%,rgba(0,0,0,.28) 55%,rgba(0,0,0,0) 100%);margin-bottom:-84px}
.site-header--over.is-solid,.site-header--over:has(.site-nav.open){background-color:var(--band);background-image:none}
/* over a hero with no picture there's nothing to protect the nav from: no fade */
.site-header--over.is-clear{background-image:none}
/* Safari 26 tints its toolbar from a solid fixed or sticky colour at the top edge, and ignores
 * theme-color. Over a picture there is none, so it fell back to grey. A strip of the band colour
 * gives it one; 12px is the least Safari picks up (tested 18 Oct 2026, 4px wasn't). Not when the
 * promo bar is showing: that sits above the header and the strip would cut into it. */
body:has(.site-header--over):not(:has(.promo-bar:not([hidden]))):not(.has-bday-bar)::before{content:"";position:fixed;top:0;left:0;right:0;height:12px;background:var(--band);z-index:41;pointer-events:none}
.site-header .wrap{display:flex;align-items:center;gap:24px;height:84px}
.site-header .logo img{height:40px;width:auto}
.site-nav{display:flex;align-items:center;gap:6px;margin-left:auto;font-family:var(--sans);font-size:15px;font-weight:600}
.site-nav > a,.site-nav > .navdrop > button{color:var(--on-band);text-decoration:none;padding:10px 12px;background:none;border:0;font:inherit;cursor:pointer;display:flex;align-items:center;gap:8px}
.site-nav > a:hover,.site-nav > .navdrop > button:hover{text-decoration:underline;text-underline-offset:5px}
.site-nav .btn{margin-left:10px}
/* the nav's own link reset (background:none, no padding change) must not flatten the button */
.site-nav > a.btn{background:var(--action);color:var(--action-ink);padding:12px 16px}
.site-nav > a.btn:hover{background:var(--action-hover);text-decoration:none}
.site-nav .login{color:var(--on-band-2)}
.site-header--over:not(.is-solid) .site-nav .login{color:#fff;opacity:.85}
.navdrop{position:relative}
.navdrop svg{transition:transform .15s}
.navdrop.open svg{transform:rotate(180deg)}
.navmenu{display:none;position:absolute;top:calc(100% + 8px);left:0;background:var(--paper);color:var(--ink);padding:10px;min-width:440px;grid-template-columns:1fr 1fr;gap:2px;box-shadow:0 18px 40px rgba(10,20,26,.25)}
.navdrop.open .navmenu{display:grid}
.navmenu a{display:flex;align-items:center;gap:12px;padding:10px 12px;text-decoration:none;font-weight:600}
.navmenu a:hover{background:var(--paper-3)}
.navmenu img{width:30px;height:30px;border-radius:50%}
.menu-toggle{display:none;margin-left:auto;background:none;border:0;color:var(--on-band);padding:10px;cursor:pointer}
.search-btn{display:flex}

/* ------------------------------------------------------------------ hero (cover slot) */
/* The hero is a slot. Its palette belongs to whatever it features (a series,
 * a promo, an anniversary); the rest of the page keeps the site palette.
 * Three fills: photo, moving (muted loop + pause), or type only. */
.hero{position:relative;color:#fff;background:var(--hero-bg,var(--band-deep));display:flex;flex-direction:column;justify-content:flex-end;min-height:var(--hero-h,700px)}
.hero__media{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:var(--hero-focus,50% 45%)}
/* when the face line drops the picture down (a few px at most), its top edge melts into the ground */
.hero__media.dropped{-webkit-mask-image:linear-gradient(180deg,rgba(0,0,0,.35) 0,#000 72px);mask-image:linear-gradient(180deg,rgba(0,0,0,.35) 0,#000 72px)}
.hero__shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(14,24,30,0) 0%,rgba(14,24,30,0) 18%,rgba(14,24,30,0) 45%,rgba(14,24,30,.85) 100%)}
/* Face line: data-face-top="0.07" on .hero__media = where the tops of the heads are (share of
 * the frame's height). js/site.js crops, or drops the picture down, so heads sit just below
 * the nav on any screen shape. The strip it opens up is the hero's dark ground, under the fade. */
.hero .wrap{position:relative;width:100%;padding-top:120px;padding-bottom:56px}
.hero__kicker{font-family:var(--sans);font-weight:700;font-size:15px;color:var(--hero-accent,#fff);margin:0 0 14px}
.hero__title{font-family:var(--sans);font-weight:800;letter-spacing:-0.025em;font-size:60px;line-height:1.04;max-width:17ch;margin:0 0 16px}
.hero__text{font-size:21px;line-height:1.5;max-width:46ch;color:#eef1f3;margin:0 0 26px}
.hero .btn{background:var(--hero-accent,var(--action));color:var(--hero-accent-ink,var(--action-ink))}
.hero .link{color:#fff}
.hero__pause{position:absolute;right:28px;bottom:28px;width:48px;height:48px;border:0;background:rgba(14,24,30,.7);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}
/* photo fill: keep the words in the left part, clear of a face in the middle or right */
.hero--photo .hero__shade{background:linear-gradient(90deg,rgba(14,24,30,.62) 0%,rgba(14,24,30,.38) 34%,rgba(14,24,30,0) 58%),linear-gradient(180deg,rgba(14,24,30,0) 50%,rgba(14,24,30,.7) 100%)}
.hero--photo .hero__title{max-width:12ch}
.hero--photo .hero__text{max-width:34ch}
/* type fill: no main picture. A gradient in the band colours (darker left, lighter right, as
 * on the teacher discs) under a fine grain, so it never reads as a flat block. data-lang on the
 * section switches it to that language's colours. data-texture="rings" swaps the grain for
 * faint interlocking rings (promos). An optional thumbnail sits on the right (.hero__thumb). */
.hero--type{--hero-h:560px;justify-content:center;background:linear-gradient(100deg,var(--hero-bg-a,var(--band-deep)) 0%,var(--hero-bg-b,var(--band)) 55%,var(--hero-bg-c,color-mix(in srgb,var(--band) 74%,#fff)) 100%)}
.hero--type::before{content:"";position:absolute;inset:0;pointer-events:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .9 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");opacity:.13;mix-blend-mode:overlay}
.hero--type[data-texture="none"]::before{display:none}
.hero--type[data-texture="rings"]::before{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='320' height='320' viewBox='0 0 320 320' fill='none' stroke='%2314262e' stroke-width='1.6'><circle cx='0' cy='0' r='18'/><circle cx='0' cy='0' r='40'/><circle cx='0' cy='0' r='62'/><circle cx='0' cy='0' r='84'/><circle cx='0' cy='0' r='106'/><circle cx='0' cy='0' r='128'/><circle cx='0' cy='0' r='150'/><circle cx='320' cy='0' r='18'/><circle cx='320' cy='0' r='40'/><circle cx='320' cy='0' r='62'/><circle cx='320' cy='0' r='84'/><circle cx='320' cy='0' r='106'/><circle cx='320' cy='0' r='128'/><circle cx='320' cy='0' r='150'/><circle cx='0' cy='320' r='18'/><circle cx='0' cy='320' r='40'/><circle cx='0' cy='320' r='62'/><circle cx='0' cy='320' r='84'/><circle cx='0' cy='320' r='106'/><circle cx='0' cy='320' r='128'/><circle cx='0' cy='320' r='150'/><circle cx='320' cy='320' r='18'/><circle cx='320' cy='320' r='40'/><circle cx='320' cy='320' r='62'/><circle cx='320' cy='320' r='84'/><circle cx='320' cy='320' r='106'/><circle cx='320' cy='320' r='128'/><circle cx='320' cy='320' r='150'/><circle cx='160' cy='160' r='18'/><circle cx='160' cy='160' r='40'/><circle cx='160' cy='160' r='62'/><circle cx='160' cy='160' r='84'/><circle cx='160' cy='160' r='106'/><circle cx='160' cy='160' r='128'/><circle cx='160' cy='160' r='150'/></svg>");background-size:320px;opacity:.1;mix-blend-mode:normal}
.hero--type .wrap{padding-top:132px;padding-bottom:72px}
.hero--type .hero__title{font-size:68px;max-width:15ch}
.hero__cols{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:64px;align-items:center}
.hero__thumb{margin:0}
.hero__thumb img,.hero__thumb .ph{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--pic);box-shadow:0 24px 48px rgba(0,0,0,.32)}
/* split fill: colour panel left, picture right (language hubs) */
.hero--split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:600px;background:linear-gradient(100deg,var(--band-deep) 0%,var(--band) 60%,color-mix(in srgb,var(--band) 80%,#fff) 100%)}
/* the same grain as the type hero, over the colour side */
.hero--split::before{content:"";position:absolute;inset:0;pointer-events:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .9 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");opacity:.13;mix-blend-mode:overlay}
.hero--split .hero__panel{position:relative;background:linear-gradient(110deg,var(--band-deep) 0%,var(--band) 45%,color-mix(in srgb,var(--band) 70%,#fff) 100%)}
/* the menu sits on the gradient; a soft fade across the top of the picture keeps its right-hand links readable */
.hero--split .hero__pic::after{content:"";position:absolute;left:0;right:0;top:0;height:150px;background:linear-gradient(180deg,rgba(0,0,0,.5),rgba(0,0,0,0));pointer-events:none}
.hero__panel > img,.hero__cols img.logo{align-self:flex-start}
.hero--split .hero__panel{padding:132px 56px 64px max(var(--gutter),calc((100vw - var(--wrap))/2 + var(--gutter)));display:flex;flex-direction:column;justify-content:center}
.hero--split .actions .link{color:var(--on-band-2);font-size:17px}
.hero--split .hero__pic{position:relative;min-height:360px}
.hero--split .hero__pic img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero--split .hero__title{font-size:52px}

/* preview only: hero switcher (never published) */
.hero-switch{position:fixed;left:16px;bottom:16px;z-index:90;display:flex;align-items:center;gap:2px;background:#14262e;color:#fff;font-family:var(--sans);font-size:13px;font-weight:700;padding:6px;box-shadow:0 8px 24px rgba(0,0,0,.3)}
.hero-switch span{padding:0 10px 0 6px;color:#c3d2d8}
.hero-switch button{font:inherit;background:none;color:#fff;border:0;padding:8px 10px;cursor:pointer}
.hero-switch button[aria-pressed="true"]{background:#91b21a;color:#10201a}

/* ------------------------------------------------------------------ language hub parts */
/* CBTV on a hub: a textured gradient from the deep band into the language's brighter blue, so
 * it stands apart from thumbnails that use the band colour itself (French navy). */
.section--tv{position:relative;overflow:hidden;background:linear-gradient(100deg,var(--band-deep) 0%,var(--accent) 100%)}
.section--tv::before{content:"";position:absolute;inset:0;pointer-events:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .9 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");opacity:.12;mix-blend-mode:overlay}
.section--tv > .wrap{position:relative}
/* hub hero: the language's photo backgrounds under a fade in the language's own band colour */
.hero--hub{--hero-h:620px}
.hero--hub .hero__shade{background:linear-gradient(90deg,color-mix(in srgb,var(--band-deep) 92%,transparent) 0%,color-mix(in srgb,var(--band) 70%,transparent) 38%,transparent 72%),linear-gradient(180deg,rgba(0,0,0,0) 55%,rgba(0,0,0,.45) 100%)}
.hero--hub .hero__title{max-width:14ch}
.hero__badge{width:72px;height:72px;margin-bottom:18px}
.hero--hub .btn{background:var(--action);color:var(--action-ink)}
/* on-page menu under a hub hero */
.subnav{background:var(--paper);border-bottom:1px solid var(--rule);font-family:var(--sans);font-size:15px;font-weight:600}
.subnav .wrap{display:flex;gap:4px 28px;flex-wrap:wrap;padding-top:16px;padding-bottom:16px}
.subnav a{text-decoration:none;color:var(--ink)}
.subnav a:hover{text-decoration:underline;text-underline-offset:5px}
/* level rows: number, the free route, the course */
.levels{border-bottom:1px solid var(--rule)}
.level{display:grid;grid-template-columns:90px minmax(0,1fr) 420px;gap:36px;align-items:center;padding:28px 0;border-top:1px solid var(--rule)}
.level__n{font-family:var(--sans);font-weight:800;font-size:64px;line-height:1;color:var(--band)}
.level__n--soon{font-size:14px;line-height:1.3;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}
.level h3{font-size:24px;margin:0 0 6px}
.level h3 .meta{font-size:14px;margin-left:8px;color:var(--accent)}
.level p{margin:0 0 10px;font-size:18px}
.level__course{display:grid;grid-template-columns:170px minmax(0,1fr);gap:16px;align-items:center;text-decoration:none;color:inherit;background:var(--paper-3);padding:12px}
.level__course img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--pic)}
.level__course .h{display:block;font-size:17px;margin-bottom:4px}
.level__course:hover .h{text-decoration:underline}
/* the team, small circles in a wrapping row (hubs) */
.newhere__mark.newhere__team{grid-template-columns:minmax(0,1fr);align-content:center}
.team--small{grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:20px 12px;margin-top:22px}
.team--small .teacher img{width:80px;height:80px}
.team--small .teacher .h{font-size:14px}
.team--small .teacher .meta{display:none}
/* practise pair */
.practise__item{display:grid;grid-template-columns:200px minmax(0,1fr);gap:28px;align-items:center;background:var(--paper-3);padding:28px}
.practise__item img{width:100%;border-radius:var(--pic)}
.practise__item h3{font-size:26px;margin:0 0 10px}
.practise__item p{font-size:17px;margin:0 0 16px}

/* ------------------------------------------------------------------ chatbot pages */
/* the example: a plain text-message thread. Rounded bubbles here only, because that is what a
 * text message looks like; solid fills, no borders, no badges or icons. */
.example{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:56px;align-items:center}
.thread{display:flex;flex-direction:column;gap:16px;max-width:520px;width:100%;justify-self:center;font-size:17px;line-height:1.4}
.thread__group{display:flex;flex-direction:column;gap:4px;align-items:flex-start}
.thread__group--you{align-items:flex-end}
.thread__who{font-family:var(--sans);font-size:12px;font-weight:600;color:var(--muted);margin:0 12px 2px}
.thread__msg{margin:0;max-width:82%;padding:9px 14px;border-radius:18px;background:#e6e9eb;color:var(--ink)}
.thread__group--you .thread__msg{background:var(--band);color:var(--on-band)}
.thread__group--them .thread__msg:not(:last-child){border-bottom-left-radius:6px}
.thread__group--you .thread__msg:not(:last-child){border-bottom-right-radius:6px}
.points h3{font-size:20px;margin:0 0 8px}
.points p{font-size:17px;margin:0;color:var(--ink-2)}
/* where do you start: white panels on a tinted ground, square, a solid language-colour head */
.section--doors{background:var(--paper-3)}
.doors{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;align-items:stretch}
.door{background:var(--paper);display:flex;flex-direction:column;padding:0 28px 26px;box-shadow:0 1px 2px rgba(10,20,26,.06),0 8px 24px rgba(10,20,26,.06)}
.door > .door__k{margin:0 -28px 22px;padding:12px 28px;background:var(--band);color:var(--on-band);font-family:var(--sans);font-weight:700;font-size:14px}
.door h3{font-size:22px;margin:0 0 10px}
.door > p{font-size:17px;margin:0 0 16px;color:var(--ink-2)}
.door .ticks{color:var(--ink-2);font-size:17px;margin-bottom:24px}
.door__btn{margin-top:auto;justify-content:center}
.door__more{margin-top:14px;text-align:center;min-height:22px}
/* how it works: words left, three steps right */
.how{display:grid;grid-template-columns:minmax(0,6fr) minmax(0,5fr);gap:64px;align-items:start}
.how__steps{display:flex;flex-direction:column}
.step{padding:20px 0;border-top:1px solid var(--rule)}
.step:last-child{border-bottom:1px solid var(--rule)}
.step__k{font-family:var(--sans);font-weight:700;font-size:14px;color:var(--accent);margin:0 0 4px}
.step h3{font-size:21px;margin:0 0 6px}
.step p{margin:0;font-size:17px;color:var(--ink-2)}
/* the other tutors: portrait, language, link; each card in its own language's colours */
.tutor{display:grid;grid-template-columns:96px minmax(0,1fr);gap:18px;align-items:center;background:var(--paper-3);padding:14px;text-decoration:none;color:var(--ink)}
.tutor img{width:96px;aspect-ratio:404/620;object-fit:cover;border-radius:var(--pic)}
.tutor .meta{display:block;color:var(--accent);font-weight:700;margin-bottom:4px}
.tutor .h{font-size:19px;line-height:1.2}
.tutor:hover .h{text-decoration:underline;text-underline-offset:4px}
/* questions: plain pairs in two columns, nothing to click */
.qas{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 56px}
.qa h3{font-size:20px;margin:0 0 8px}
.qa p{margin:0;font-size:17px;color:var(--ink-2)}

/* ------------------------------------------------------------------ campaign landing pages */
/* One ask per page: a focused header (brand, language switch, one button), no site menu. */
.site-header--lp .wrap{gap:28px}
.lp-brand{display:flex;align-items:center;gap:12px;color:var(--on-band);text-decoration:none;font-family:var(--sans);font-weight:800;font-size:18px;letter-spacing:-0.01em}
.lp-langs{display:flex;gap:4px 18px;flex-wrap:wrap;margin-left:auto;font-family:var(--sans);font-size:14px;font-weight:600;color:var(--on-band-2)}
.lp-langs a{color:var(--on-band-2);text-decoration:none}
.lp-langs a:hover{color:var(--on-band);text-decoration:underline}
.lp-langs [aria-current]{color:var(--on-band)}
/* heading left, reading column right */
.lp-two{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:56px;align-items:start}
.lp-two h2{font-size:34px}
.lp-copy p{margin:0 0 16px;max-width:62ch}
.lp-fig{margin:28px 0 0}
.lp-fig img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:var(--pic)}
.lp-fig figcaption{font-family:var(--sans);font-size:13px;color:var(--muted);margin-top:8px}
.lp-copy .lede{margin-bottom:18px}
.lp-pull{font-family:var(--sans);font-weight:800;font-size:28px;line-height:1.2;letter-spacing:-0.02em;color:var(--band);margin:30px 0 !important;max-width:24ch !important}
.lp-expect{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.lp-card{background:var(--paper);padding:0 26px 26px;box-shadow:0 1px 2px rgba(10,20,26,.06),0 8px 24px rgba(10,20,26,.06)}
.lp-card > .door__k{margin:0 -26px 20px;padding:11px 26px;background:var(--band);color:var(--on-band);font-family:var(--sans);font-weight:700;font-size:14px}
.lp-card h3{font-size:21px;margin:0 0 10px}
.lp-card p{font-size:17px;margin:0;color:var(--ink-2)}
.lp-signup__cols{display:grid;grid-template-columns:minmax(0,6fr) minmax(0,5fr);gap:56px;align-items:center}
.lp-signup .lede{margin:0 0 14px}
.lp-form{background:var(--paper);color:var(--ink);padding:30px}
.lp-form form{display:grid;gap:10px;font-family:var(--sans)}
.lp-form__label{font-family:var(--sans);font-weight:700;font-size:15px}
.lp-form .field{width:100%}
.lp-form .btn{justify-content:center}
.lp-form__after{font-size:15px;color:var(--muted);margin:14px 0 0}
.site-footer--lp{padding:32px 0}
.site-footer--lp a{display:inline;color:var(--on-band-2)}

/* ------------------------------------------------------------------ book shelf row (homepage) */
.shelf-row{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:24px;align-items:end}
.shelf-row__book img{width:100%;aspect-ratio:404/620;object-fit:cover;border-radius:var(--pic);box-shadow:0 2px 4px rgba(10,20,26,.08),0 12px 24px rgba(10,20,26,.14);transition:transform .15s}
.shelf-row__book:hover img{transform:translateY(-4px)}

/* ------------------------------------------------------------------ level / season pages */
.hero--level{--hero-h:600px}
.level-facts{display:flex;flex-wrap:wrap;gap:6px 20px;font-family:var(--sans);font-weight:700;font-size:14px;color:var(--on-band-2);margin:0 0 24px}
.level-facts span+span::before{content:"·";margin-right:20px;opacity:.6}
.subnav--parts .wrap{gap:4px 26px}
.subnav--parts span{font-weight:500;color:var(--muted)}
.subnav--parts{position:sticky;top:0;z-index:30}
.subnav--parts a[aria-current="true"]{color:var(--band);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:6px}
.levelpage{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:64px;align-items:start}
.part{scroll-margin-top:70px}
.part + .part{margin-top:64px}
.part__k{font-family:var(--sans);font-weight:700;font-size:14px;color:var(--accent);margin:0 0 6px}
.part__head h2{font-size:30px;margin:0 0 8px}
.part__line{font-size:18px;color:var(--ink-2);margin:0;max-width:60ch}
.lessons{list-style:none;margin:22px 0 0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:36px;border-top:1px solid var(--rule)} /* reads across: 1 2, 3 4 (Mark, 14 Oct) */
.lessons li{border-bottom:1px solid var(--rule)}
.lessons a{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:12px;align-items:baseline;padding:13px 0;text-decoration:none;color:var(--ink)}
.lesson__n{font-family:var(--sans);font-weight:800;font-size:20px;color:var(--band);letter-spacing:-0.02em}
.lesson__t{font-size:17px;line-height:1.35}
.lessons a:hover .lesson__t{text-decoration:underline;text-underline-offset:3px}
.lesson__tag{outline:1px solid var(--rule);font-size:11px;align-self:center}
.level__side{position:sticky;top:76px;display:flex;flex-direction:column;gap:18px}
.course-panel{background:var(--band);color:var(--on-band);padding:24px;display:flex;flex-direction:column;gap:10px}
.course-panel img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--pic);margin-bottom:6px}
.course-panel .part__k{color:var(--on-band-2)}
.course-panel h3{font-size:22px;margin:0}
.course-panel .ticks{color:var(--on-band-2);font-size:16px;margin:4px 0 8px}
.course-panel .ticks li::before{border-color:var(--action)}
.course-panel .btn{justify-content:center}
.course-panel .link{color:var(--on-band);text-align:center}
.next-panel{display:flex;flex-direction:column;gap:4px;background:var(--paper-3);padding:20px 24px;text-decoration:none;color:var(--ink);font-size:16px}
.next-panel .h{font-size:20px}
.next-panel:hover .h{text-decoration:underline}

/* ------------------------------------------------------------------ posts (single post template) */
/* head band: the language colours as a gradient under grain, like the type hero */
.posthead{position:relative;color:var(--on-band);padding:30px 0 44px;background:linear-gradient(100deg,var(--band-deep) 0%,var(--band) 55%,color-mix(in srgb,var(--band) 78%,#fff) 100%);overflow:hidden}
.posthead::before{content:"";position:absolute;inset:0;pointer-events:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .9 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");opacity:.13;mix-blend-mode:overlay}
.posthead .wrap{position:relative}
.posthead h1{font-size:46px;line-height:1.08;max-width:22ch;margin:6px 0 14px}
.posthead__stand{font-size:21px;line-height:1.5;color:var(--on-band-2);max-width:56ch;margin:0 0 14px}
.posthead__by{font-family:var(--sans);font-weight:600;font-size:14px;color:var(--on-band-2);margin:0}
.crumbs--band,.crumbs--band a{color:var(--on-band-2) !important;padding:0 0 10px}
.crumbs--band a:hover{color:var(--on-band) !important}
.crumbs--band span[aria-hidden]{margin:0 8px}
.post-wrap{padding-top:48px}
.postgrid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:64px;align-items:start}
.postmain{min-width:0}
.postside{position:sticky;top:20px;display:flex;flex-direction:column;gap:18px}
/* media slots */
.player{background:var(--paper-3);padding:18px 18px 14px;margin-bottom:36px}
.player__frame iframe{width:100%;height:190px;border:0;display:block}
.player__also{font-family:var(--sans);font-size:14px;color:var(--muted);margin:12px 0 0;display:flex;flex-wrap:wrap;gap:6px 16px;align-items:baseline}
.embed{position:relative;aspect-ratio:16/9;margin:28px 0;background:var(--band-deep);border-radius:var(--pic);overflow:hidden}
.embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.embed--main{margin:0 0 36px}
.postimg{margin:0 0 36px}
.postimg img{width:100%;border-radius:var(--pic)}
/* reading text: whatever WordPress sends, made calm */
.prose{font-size:19px;line-height:1.65;max-width:68ch}
.prose > *{margin:0 0 20px}
.prose h2{font-size:28px;margin:44px 0 14px}
.prose h3{font-size:21px;margin:30px 0 10px}
.prose a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
.prose ul,.prose ol{padding-left:22px}
.prose li{margin:0 0 8px}
.prose li::marker{color:var(--accent)}
.prose img{height:auto;border-radius:var(--pic);margin:8px 0}
.prose blockquote{margin:28px 0;padding:0 0 0 22px;font-style:italic;color:var(--ink-2);border-left:2px solid var(--rule)}
.prose table{width:100%;border-collapse:collapse;font-size:17px}
.prose th,.prose td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--rule)}
.prose .lede{font-size:21px}
/* side panels */
.stepper,.sidebox{background:var(--paper-3);padding:22px 24px;display:flex;flex-direction:column;gap:10px}
.stepper__pos{font-family:var(--sans);font-weight:800;font-size:19px;margin:0}
.stepper__bar{height:6px;background:var(--rule)}
.stepper__bar span{display:block;height:100%;background:var(--band)}
.stepper__link{display:block;text-decoration:none;color:var(--ink);font-size:16px;line-height:1.35;padding:10px 0;border-top:1px solid var(--rule)}
.stepper__link span{display:block;font-family:var(--sans);font-weight:700;font-size:13px;color:var(--accent);margin-bottom:2px}
.stepper__link:hover{text-decoration:underline}
.sidelink{display:block;padding:10px 0;border-top:1px solid var(--rule);text-decoration:none;color:var(--ink);font-size:17px}
.sidelink:hover{text-decoration:underline}
.sidebox__list{display:grid;gap:16px}
.sidebox__list .media__title{font-size:16px}
/* previous / next under the post */
.postnav__row{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.postnav__row a{display:flex;flex-direction:column;gap:4px;background:var(--paper);padding:20px 24px;text-decoration:none;color:var(--ink)}
.postnav__row .h{font-size:19px}
.postnav__next{text-align:right}
.postnav__row a:hover .h{text-decoration:underline}

/* ------------------------------------------------------------------ breadcrumbs */
.crumbs{font-family:var(--sans);font-size:14px;font-weight:600;color:var(--muted);padding:18px 0}
.crumbs a{color:inherit;text-decoration:none}
.crumbs a:hover{text-decoration:underline}
.crumbs span[aria-hidden]{margin:0 8px}

/* ------------------------------------------------------------------ welcome (who we are) */
.welcome{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:56px;align-items:center}
.welcome h1,.welcome h2{font-size:38px;margin:0 0 14px}
.welcome .lede{margin-bottom:28px}
.hello{display:grid;grid-template-columns:96px minmax(0,1fr);gap:20px;align-items:start;background:var(--paper-2);padding:24px}
.hello img{width:96px;height:96px;object-fit:cover;object-position:45% 30%;border-radius:50%}
.hello .h{font-size:20px;margin:0 0 8px}
.hello p{font-size:17px;line-height:1.55;margin:0 0 10px}

/* the free signup beside the welcome (homepage v2) */
.start-free{background:var(--paper-3);padding:28px}
.start-free .h{font-size:22px;margin:0 0 8px}
.start-free p{font-size:17px;line-height:1.5;margin:0 0 18px}
.start-free form{display:grid;gap:10px;font-family:var(--sans)}
.start-free .field{width:100%;background:var(--paper)}
.start-free .btn{justify-content:center}
/* "New here?" row: Mark's note left, free signup right */
.newhere{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:24px;align-items:stretch}
.newhere__mark{display:grid;grid-template-columns:200px minmax(0,1fr);gap:36px;align-items:center;background:var(--paper);padding:44px}
.newhere__mark img{width:200px;height:200px;border-radius:50%}
.newhere__mark .h{font-size:34px;margin:0 0 12px}
.newhere__mark p{font-size:20px;line-height:1.55;margin:0 0 16px;color:var(--ink-2)}
.start-free--band{background:var(--band);color:var(--on-band);padding:40px;display:flex;flex-direction:column;justify-content:center}
.start-free--band .h{font-size:28px}
.start-free--band p{color:var(--on-band-2)}
.start-free--band .field{background:var(--paper)}
/* teachers: heading and Mark's note side by side, then the drift row */
.teachers-intro{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:56px;align-items:center;margin-bottom:40px}

/* language buttons: pale square fill, round logo */
.langs{display:flex;flex-wrap:wrap;gap:10px;font-family:var(--sans);font-size:16px;font-weight:600}
.langs a{display:flex;gap:10px;align-items:center;background:var(--paper-3);padding:10px 16px 10px 10px;text-decoration:none}
.langs a:hover{background:var(--rule)}
.langs a.plain{background:none;padding:10px 6px;text-decoration:underline;text-underline-offset:4px}
.langs img{width:32px;height:32px}
/* welcome buttons: five to a row across the full width, a little larger */
.langs--grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;font-size:18px}
.langs--grid a{padding:14px 18px 14px 14px;gap:14px}
.langs--grid img{width:40px;height:40px}

/* ------------------------------------------------------------------ media cards */
.grid{display:grid;gap:36px 24px}
.grid--6{grid-template-columns:repeat(6,minmax(0,1fr));gap:24px 18px}
.grid--5{grid-template-columns:repeat(5,minmax(0,1fr));gap:28px 22px}
.grid--4{grid-template-columns:repeat(4,minmax(0,1fr));gap:28px 18px}
.grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid--2{grid-template-columns:repeat(2,minmax(0,1fr));gap:48px 64px}

.media{display:flex;flex-direction:column;gap:9px;text-decoration:none;color:inherit}
.media__pic{position:relative;display:block}
.media__pic img,.media__pic .ph{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--pic);background:var(--paper-3)}
.media__pic .tag{position:absolute;left:0;top:0;border-top-left-radius:var(--pic)}
.media__title{font-family:var(--serif);font-size:18px;font-weight:600;line-height:1.3}
.media__text{font-size:16px;line-height:1.45;color:var(--ink-2)}
.section--band .media__text{color:var(--on-band-2)}
.media:hover .media__title{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
.grid--6 .media__title{font-size:16px}
.media--course .media__title{font-family:var(--sans);font-weight:800;letter-spacing:-0.02em;font-size:18px;line-height:1.25}
.media--course .meta{color:var(--accent);font-weight:700}

/* ------------------------------------------------------------------ row list (series, levels) */
.rows{border-bottom:1px solid var(--rule)}
.row{display:grid;grid-template-columns:280px minmax(0,1fr) 220px;gap:36px;align-items:center;padding:28px 0;border-top:1px solid var(--rule);text-decoration:none;color:inherit}
.row img,.row .ph{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--pic)}
.row .h{display:block;font-size:28px;margin-bottom:8px}
.row__text{font-size:19px;line-height:1.5}
.row__when{font-family:var(--sans);font-size:15px;font-weight:600;color:var(--accent)}
.row:hover .h{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:5px}

/* ------------------------------------------------------------------ tabs */
.tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-bottom:1px solid var(--rule);margin-bottom:32px;font-family:var(--sans)}
.tabs button{font:inherit;font-size:15px;font-weight:600;color:var(--muted);background:none;border:0;border-bottom:3px solid transparent;margin-bottom:-1px;padding:12px 14px 12px 2px;display:flex;gap:8px;align-items:center;cursor:pointer}
.tabs button[aria-selected="true"]{color:var(--ink);font-weight:700;border-bottom-color:var(--ink)}
.tabs img{width:24px;height:24px}

/* ------------------------------------------------------------------ price block (on the band) */
.price{display:flex;flex-direction:column;gap:12px;align-items:flex-start;border-left:1px solid var(--band-rule);padding-left:28px;font-family:var(--sans);font-size:15px;line-height:1.6;color:var(--on-band-2)}
.price strong{color:var(--on-band)}
.price .big{font-size:24px}

/* ------------------------------------------------------------------ quotes */
/* <figure class="quote"><blockquote><p>…</p></blockquote><figcaption>…</figcaption></figure>
 * (figcaption, not <footer>: tools/apply-footer.mjs owns every <footer> on a page) */
.quote{margin:0;border-top:2px solid var(--ink);padding-top:24px}
.quote blockquote{margin:0}
.quote p{font-size:27px;line-height:1.4;font-style:italic;margin:0 0 14px}
.quote figcaption{font-family:var(--sans);font-size:14px;color:var(--muted)}

/* ------------------------------------------------------------------ people */
.person img,.person .ph{width:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--pic);margin-bottom:10px;background:var(--paper-3)}
.person .h{font-size:22px}
.person .meta{display:block;margin-top:2px;font-weight:500;font-size:14px}
.team{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:28px 20px}
.teacher{text-align:center;font-family:var(--sans)}
.teacher img{width:112px;height:112px;border-radius:50%;margin:0 auto 10px}
.teacher__ph{display:flex;align-items:center;justify-content:center;width:112px;height:112px;border-radius:50%;margin:0 auto 10px;background:var(--paper-3);color:var(--muted);font-size:34px;font-weight:800}
.teacher .h{display:block;font-size:16px;letter-spacing:-0.01em}
.teacher .meta{display:block;margin-top:2px;font-weight:500}
.ph{display:flex;align-items:center;justify-content:center;font-family:var(--sans);font-size:13px;color:var(--muted);background:var(--paper-3)}

/* ------------------------------------------------------------------ drift (slow sideways row) */
/* <div class="drift" data-drift><div class="drift__track">…items…</div><button class="drift__pause" data-drift-pause>…</button></div>
 * Full width, no fades. js/site.js duplicates the items so the loop is seamless and sets
 * the speed from the item count. Stops on hover and focus; the button stops it for good.
 * Reduced motion: no drift, a plain row you can scroll. */
.drift{position:relative;overflow:hidden;padding:4px 0 60px}
.drift__track{display:flex;gap:24px;width:max-content;padding-left:var(--gutter);animation:drift var(--drift-s,80s) linear infinite}
.drift__track > *{flex:0 0 132px}
.drift:hover .drift__track,.drift:focus-within .drift__track,.drift.paused .drift__track{animation-play-state:paused}
@keyframes drift{to{transform:translateX(-50%)}}
.drift__pause{position:absolute;right:var(--gutter);bottom:0;width:40px;height:40px;border:0;background:var(--paper-3);color:var(--ink);display:flex;align-items:center;justify-content:center;cursor:pointer}
.drift + *{margin-top:0}
@media (prefers-reduced-motion:reduce){
  .drift{overflow-x:auto}
  .drift__track{animation:none}
  .drift__pause{display:none}
}

/* ------------------------------------------------------------------ anniversary / statement band */
.statement{display:flex;flex-wrap:wrap;align-items:center;gap:48px}
.statement .big{font-family:var(--sans);font-weight:800;font-size:260px;line-height:.8;letter-spacing:-0.04em;color:var(--action)}
.statement > div{flex:1 1 480px}
.statement h2{font-size:32px;line-height:1.15;margin:0 0 14px}
.statement .lede{margin:0 0 22px}

/* ------------------------------------------------------------------ feature band (second editable area) */
/* Like a type hero, smaller: band-colour gradient under grain, a big number or pictures on the
 * left, words and one button on the right. data-lang switches the colours. */
.feature{position:relative;color:var(--on-band);padding:64px 0;overflow:hidden;background:linear-gradient(100deg,var(--band-deep) 0%,var(--band) 55%,color-mix(in srgb,var(--band) 74%,#fff) 100%)}
.feature::before{content:"";position:absolute;inset:0;pointer-events:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .9 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");opacity:.13;mix-blend-mode:overlay}
.feature .wrap{position:relative}
.feature__cols{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:56px;align-items:center}
.feature__big{font-family:var(--sans);font-weight:800;font-size:260px;line-height:.8;letter-spacing:-0.04em;color:var(--action);margin:0}
.feature__pics{display:flex;gap:18px;justify-content:center}
.feature__pics img{width:44%;border-radius:var(--pic);box-shadow:0 20px 40px rgba(0,0,0,.35)}
.feature h2{font-size:32px;line-height:1.15;margin:0 0 14px}
.feature .kicker{color:var(--on-band-2)}
.feature .lede{font-size:19px;color:var(--on-band-2);margin:0 0 22px}

/* ------------------------------------------------------------------ signup, end of page */
.signup-end__cols{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:56px;align-items:center}
.signup-end h2{font-size:36px;margin:18px 0 10px}
.signup-end .lede{font-size:19px;margin-bottom:18px}
.faces{display:flex}
.faces img{width:56px;height:56px;border-radius:50%;margin-right:-10px;box-shadow:0 0 0 3px var(--paper)}
.ticks{list-style:none;margin:0;padding:0;font-size:18px;color:var(--ink-2)}
.ticks li{padding-left:28px;position:relative;margin-bottom:8px}
.ticks li::before{content:"";position:absolute;left:2px;top:.45em;width:12px;height:7px;border-left:2px solid var(--accent);border-bottom:2px solid var(--accent);transform:rotate(-45deg)}
.signup-end form{display:grid;gap:10px;font-family:var(--sans)}
.signup-end .field{width:100%;background:var(--paper-3)}
.signup-end form .meta{color:var(--muted)}
.signup-end .btn{justify-content:center}

/* ------------------------------------------------------------------ signup */
.signup{display:flex;flex-wrap:wrap;gap:32px;align-items:end;justify-content:space-between}
.signup > div{flex:1 1 400px}
.signup h2{font-size:30px;margin:0 0 8px}
.signup form{flex:1 1 460px;display:flex;flex-wrap:wrap;font-family:var(--sans)}
.field{height:54px;font:inherit;font-size:16px;padding:0 14px;border:0;background:var(--paper-3);color:var(--ink);border-radius:0}
select.field{flex:1 1 140px;padding:0 12px;background:#e4ebec}
input.field{flex:2 1 220px}
/* what people type reads in Source Serif light; labels and buttons stay Montserrat */
input.field,textarea.field{font-family:var(--serif);font-weight:300;font-size:17px}
input.field::placeholder{color:var(--muted);opacity:1}
.signup .btn{height:54px;padding:0 22px;background:var(--band);color:var(--on-band)}
.signup .btn:hover{background:var(--band-deep)}
.signup .done{font-family:var(--sans);font-weight:600}

/* ------------------------------------------------------------------ footer */
.site-footer{background:var(--band-deep);color:var(--on-band-2);padding:56px 0 36px;font-family:var(--sans);font-size:14px}
.site-footer .cols{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:32px;margin-bottom:40px;line-height:2}
.site-footer strong{color:var(--on-band);display:block}
.site-footer a{color:var(--on-band-2);text-decoration:none;display:block}
.site-footer a:hover{color:var(--on-band);text-decoration:underline}
.site-footer .legal{border-top:1px solid var(--band-rule);padding-top:20px;display:flex;flex-wrap:wrap;gap:8px 24px;justify-content:space-between}
.site-footer .legal nav{display:flex;flex-wrap:wrap;gap:8px 20px}
.site-footer .legal a{display:inline}

/* ------------------------------------------------------------------ motion */
@media (prefers-reduced-motion:reduce){
  *{transition:none !important;animation:none !important}
}

/* ------------------------------------------------------------------ phone */
@media (max-width:1060px){
  .site-nav{display:none}
  .site-nav.open{display:flex;position:absolute;top:84px;left:0;right:0;flex-direction:column;align-items:stretch;background:var(--band);padding:8px 16px 20px;gap:0;z-index:50}
  .site-nav.open > a,.site-nav.open > .navdrop > button{padding:14px 4px;border-bottom:1px solid var(--band-rule);width:100%}
  .site-nav.open .btn{margin:16px 0 0;justify-content:center}
  .site-nav.open .navmenu{position:static;min-width:0;box-shadow:none;grid-template-columns:1fr 1fr}
  .menu-toggle{display:block}
}
@media (max-width:900px){
  :root{--gutter:16px;--section:56px}
  body{font-size:17px}
  h1,.hero__title{font-size:40px}
  h2{font-size:28px}
  .hero--type .hero__title{font-size:44px}
  .hero__cols{grid-template-columns:minmax(0,1fr);gap:32px}
  .hero--type .wrap{padding-top:112px;padding-bottom:48px}
  .hero{--hero-h:620px}
  .hero--split{grid-template-columns:minmax(0,1fr)}
  .hero--split .hero__panel{padding:40px var(--gutter)}
  .hero--split .hero__pic{min-height:240px;order:-1}
  .welcome,.teachers-intro,.newhere{grid-template-columns:minmax(0,1fr);gap:28px}
  .newhere__mark{grid-template-columns:minmax(0,1fr);gap:20px;padding:28px}
  .newhere__mark img{width:132px;height:132px}
  .newhere__mark .h{font-size:28px}
  .newhere__mark p{font-size:18px}
  .start-free--band{padding:28px}
  .welcome h1,.welcome h2{font-size:30px}
  .row{grid-template-columns:minmax(0,1fr);gap:12px}
  .row .h{font-size:24px}
  .grid--6,.grid--5,.grid--4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .langs--grid{grid-template-columns:repeat(2,minmax(0,1fr));font-size:16px}
  .tabs{grid-template-columns:repeat(2,minmax(0,1fr))}
  .grid--3,.grid--2{grid-template-columns:minmax(0,1fr);gap:36px}
  .price{border-left:0;padding-left:0}
  .quote p{font-size:22px}
  .team{grid-template-columns:repeat(3,minmax(0,1fr));gap:22px 12px}
  .teacher img,.teacher__ph{width:88px;height:88px}
  .feature__cols,.signup-end__cols{grid-template-columns:minmax(0,1fr);gap:28px}
  .feature__big{font-size:150px}
  .level{grid-template-columns:minmax(0,1fr);gap:14px}
  .level__n{font-size:44px}
  .level__course{grid-template-columns:120px minmax(0,1fr)}
  .practise__item{grid-template-columns:110px minmax(0,1fr);gap:18px;padding:20px}
  .example,.how,.doors,.qas{grid-template-columns:minmax(0,1fr);gap:28px}
  .lp-two,.lp-signup__cols{grid-template-columns:minmax(0,1fr);gap:20px}
  .lp-expect{grid-template-columns:minmax(0,1fr)}
  .lp-langs{display:none}
  .lp-pull{font-size:23px}
  .shelf-row{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
  .levelpage{grid-template-columns:minmax(0,1fr);gap:40px}
  .level__side{position:static}
  .lessons{grid-template-columns:minmax(0,1fr);grid-template-rows:none;grid-auto-flow:row}
  .subnav--parts span{display:none}
  .part__head h2{font-size:24px}
  .postgrid{grid-template-columns:minmax(0,1fr);gap:36px}
  .postside{position:static}
  .posthead h1{font-size:32px}
  .posthead__stand{font-size:18px}
  .prose{font-size:18px}
  .postnav__row{grid-template-columns:minmax(0,1fr)}
  .postnav__next{text-align:left}
  .statement{gap:24px}
  .statement .big{font-size:150px}
  .site-footer .cols{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* Signups (js/site.js): honeypot, errors, thank-you, level question, notice, overlay */
.signup-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.signup-error{margin:4px 0 0;font-size:15px;font-family:var(--sans);font-weight:600;background:var(--paper);color:#a3161c;padding:10px 12px}
.signup-done{font-family:var(--serif)}
.signup-done__h,.start-free .signup-done__h{font-family:var(--serif);font-weight:600;font-size:24px;line-height:1.25;margin:0 0 6px}
.start-free .signup-done__line,.signup-done__line{font-family:var(--serif);font-size:18px;line-height:1.5;margin:0 0 14px}
/* Level question: a quiet list in the body serif, thin rules, no boxes */
.signup-levels{margin-top:6px}
.signup-levels__q,.start-free .signup-levels__q{font-family:var(--serif);font-size:19px;line-height:1.4;margin:0 0 6px}
.signup-level{display:flex;align-items:baseline;gap:10px;width:100%;text-align:left;border:0;border-top:1px solid var(--rule);margin:0;padding:11px 4px;cursor:pointer;background:transparent;color:inherit;font-family:var(--serif)}
.signup-level:last-child{border-bottom:1px solid var(--rule)}
.start-free--band .signup-level{border-color:rgba(255,255,255,.22)}
.signup-level__name{font-size:18px;font-weight:600;white-space:nowrap}
.signup-level__hint{font-size:16px;font-style:italic;opacity:.8}
.signup-level::after{content:'\2192';margin-left:auto;opacity:0;transition:opacity .15s}
.signup-level:hover,.signup-level:focus-visible{background:var(--paper-3);outline:none}
.start-free--band .signup-level:hover,.start-free--band .signup-level:focus-visible{background:rgba(255,255,255,.08)}
.signup-level:hover::after,.signup-level:focus-visible::after{opacity:1}
.signup-level:disabled{opacity:.5;cursor:default}
.signup-notice{background:var(--action);color:var(--action-ink);font-family:var(--sans);font-weight:600;margin:0;padding:14px 20px;text-align:center}
.signup-notice--soft{background:var(--paper-3);color:var(--ink)}
/* Overlay: a postcard. Photo left, note and form right; stacks on phones. */
.signup-overlay{position:fixed;inset:0;z-index:1000;background:rgba(10,20,26,.62);display:flex;align-items:center;justify-content:center;padding:16px}
.signup-overlay__card{position:relative;display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);background:var(--paper);color:var(--ink);max-width:880px;width:100%;max-height:calc(100vh - 32px);overflow:auto;box-shadow:0 24px 60px rgba(0,0,0,.35);border:10px solid var(--paper)}
.signup-overlay__pic{position:relative;min-height:100%;background:var(--paper-3)}
.signup-overlay__pic img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:48% 30%}
.signup-overlay__note{padding:34px 34px 26px;border-left:1px solid var(--rule);margin-left:24px;padding-left:28px;overflow:auto;min-height:0}
.signup-overlay__close{position:absolute;top:2px;right:4px;z-index:1;width:40px;height:40px;border:0;background:transparent;font-size:28px;line-height:1;cursor:pointer;color:var(--ink)}
.signup-overlay__h{font-family:var(--serif);font-weight:600;font-size:28px;line-height:1.2;margin:0 0 12px}
.signup-overlay__p{font-family:var(--serif);font-size:18px;line-height:1.55;margin:0 0 20px}
.signup-overlay form{display:grid;gap:10px;font-family:var(--sans)}
.signup-overlay .field{width:100%;background:var(--paper-3)}
.signup-overlay .btn{justify-content:center}
.signup-overlay .meta{font-size:14px;margin:4px 0 0;opacity:.75}
.signup-overlay__note.is-done{display:flex;flex-direction:column;justify-content:center}
.signup-overlay .signup-level__hint{display:none}
.signup-overlay .signup-level{padding:8px 4px}
.signup-overlay .signup-done__h{font-size:22px;margin-bottom:4px}
.signup-overlay .signup-done__line{font-size:16px;margin-bottom:10px}
.signup-overlay .signup-levels__q{font-size:17px;margin-bottom:4px}
@media (max-width:720px){
  .signup-overlay{align-items:flex-end;padding:0}
  .signup-overlay__card{grid-template-columns:1fr;max-height:92vh;border-width:0}
  .signup-overlay__pic{height:170px;min-height:0}
  .signup-overlay__note{border-left:0;margin-left:0;padding:22px 20px 20px}
  .signup-overlay__close{background:var(--paper);top:8px;right:8px}
  .signup-overlay__h{font-size:24px}
}

/* Course pages ----------------------------------------------------------------
 * Course sales pages (course-*.html, tools/build-course-page.py). Everything else on those pages
 * reuses existing classes: hero--type + hero__cols/hero__thumb, subnav, points, team/teacher, how +
 * step, levelpage + part + lessons + course-panel, practise__item, quote, qas, media--course, feature. */
.hero--course{--hero-h:auto}
.hero--course .hero__title{font-size:56px;max-width:16ch}
.hero--course .hero__thumb img{box-shadow:0 24px 48px rgba(0,0,0,.32)}
/* the price: dollars as text, pounds in data-gbp (js/site.js swaps for UK visitors) */
.course-price{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;font-family:var(--sans);font-size:14px;font-weight:600;color:var(--on-band-2);margin:0 0 22px}
.course-price strong{font-size:30px;font-weight:800;letter-spacing:-0.02em;color:var(--on-band)}
.course-price--panel{margin:2px 0 4px}
.course-price--panel strong{font-size:26px}
/* who teaches you: words left, portraits right */
.course-teachers{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:56px;align-items:center}
.course-team{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:28px 16px}
.course-team .teacher img{width:132px;height:132px}
.course-team .teacher .meta{font-size:13px}
/* what's included, under "inside every lesson" */
.course-inc__h{font-size:22px;margin:36px 0 6px}
.course-inc{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 32px;font-size:16px}
.course-inc b{display:block;font-family:var(--sans);font-weight:700;font-size:15px;color:var(--ink)}
/* lesson lists that aren't links */
.part__h3{font-size:30px;margin:0 0 8px}
.lessons--plain li{display:grid;grid-template-columns:44px minmax(0,1fr);gap:12px;align-items:baseline;padding:13px 0}
/* three testimonials side by side */
.course-quotes{gap:40px 40px;align-items:start}
.course-quote p{font-size:19px;line-height:1.5}
@media (max-width:900px){
  .hero--course .hero__title{font-size:40px}
  .course-teachers{grid-template-columns:minmax(0,1fr);gap:28px}
  .course-team{grid-template-columns:repeat(3,minmax(0,1fr))}
  .course-team .teacher img{width:96px;height:96px}
  .course-inc{grid-template-columns:minmax(0,1fr)}
  .part__h3{font-size:24px}
  .course-quote p{font-size:18px}
}

/* CBTV, LA and About */
/* founder cards on About (#team): a smaller portrait on phones so the words get the width */
@media (max-width:600px){
  .hello{grid-template-columns:64px minmax(0,1fr);gap:16px;padding:20px}
  .hello img,.hello .teacher__ph{width:64px !important;height:64px !important}
  .hello .teacher__ph{font-size:10px !important;padding:4px !important}
}

/* Flagship course pages --------------------------------------------------------
 * The advanced story courses (LVET, LPV): <body data-flagship="lvet|lpv">, set by tools/build-course-page.py from a course's "flagship" entry. A calm dark ground carried
 * through the page, the original sales pages' textures behind the hero, the buy panel and the
 * closing band, finer and larger hero type, more air, fewer boxes. Same header, menu, signup and
 * footer as every other page; still square. Contrast: body text on these grounds is over 10:1,
 * muted text over 6:1, buttons over 6:1. */
[data-flagship="lvet"]{
  --ink:#ece9e3;--ink-2:#cfccd4;--muted:#a6a2ad;--rule:#2c2c37;
  --paper:#0c0c10;--paper-2:#111117;--paper-3:#16161d;
  --band:#0c0c10;--band-deep:#08080b;--band-rule:#2c2c37;--on-band:#ece9e3;--on-band-2:#bdb9c4;
  --accent:#a9c6ff;--fs-accent-2:#cfe0ff;--action:#4f8cf0;--action-hover:#6d9ff4;--action-ink:#08080b;
  --fs-shade:8,8,11;--fs-o1:.6;--fs-o2:.82;--fs-o3:.5;--fs-bg:url("../img/lvet-bg.jpg");
}
[data-flagship="lpv"]{
  --ink:#f3ebe4;--ink-2:#ddd0c8;--muted:#bba79f;--rule:#3d1d19;
  --paper:#1c0706;--paper-2:#230a08;--paper-3:#2e100d;
  --band:#1c0706;--band-deep:#120403;--band-rule:#3d1d19;--on-band:#f3ebe4;--on-band-2:#dac8be;
  --accent:#e6c49a;--fs-accent-2:#f2dcc0;--action:#e3b98a;--action-hover:#eccaa2;--action-ink:#1c0806;
  --fs-shade:14,4,3;--fs-o1:.15;--fs-o2:.5;--fs-o3:.45;--fs-bg:url("../img/lpv-bg.jpg");
}
[data-flagship]{--section:112px;background:var(--paper)}
[data-flagship] .fs-tex,
[data-flagship] .hero--flagship,
[data-flagship] .feature--flagship,
[data-flagship] .course-panel{
  background:linear-gradient(180deg,rgba(var(--fs-shade),var(--fs-o1)),rgba(var(--fs-shade),var(--fs-o2))),linear-gradient(100deg,rgba(var(--fs-shade),var(--fs-o3)),rgba(var(--fs-shade),.1)),var(--fs-bg) center/cover no-repeat,var(--band-deep);
}
[data-flagship] .hero--flagship::before,[data-flagship] .feature--flagship::before{display:none}
/* hero: finer, larger title; the book cover given room */
.hero--flagship .wrap{padding-top:176px;padding-bottom:120px}
.hero--flagship .hero__cols{grid-template-columns:minmax(0,8fr) minmax(0,4fr);gap:96px}
.hero--flagship .hero__kicker,.hero--flagship .hero__kicker a{color:var(--accent) !important;font-weight:600;font-size:15px;margin-bottom:26px}
/* Flagship hero titles match the other course pages (Mark, 15 Oct): same weight and size from .hero--course */
.hero--flagship .hero__text{font-size:22px;line-height:1.6;max-width:42ch;color:var(--ink-2);margin-bottom:34px}
.hero--flagship .level-facts{color:var(--fs-accent-2);font-weight:600;margin-bottom:38px}
.hero--flagship .course-price strong{color:var(--accent);font-weight:700}
.hero__cover{margin:0;justify-self:end;width:100%;max-width:340px}
.hero__cover img{width:100%;height:auto;border-radius:var(--pic);box-shadow:0 40px 80px rgba(0,0,0,.6),0 8px 20px rgba(0,0,0,.4)}
/* the page: dark ground, accent kickers, links and ticks, a hairline over each section title */
[data-flagship] .subnav{background:var(--paper);border-bottom-color:var(--rule)}
[data-flagship] .subnav a{color:var(--ink-2)}
[data-flagship] .subnav a:hover{color:var(--accent)}
[data-flagship] main h2{font-weight:700;font-size:44px;letter-spacing:-0.025em}
[data-flagship] main .section-head h2::before,[data-flagship] .course-teachers h2::before,[data-flagship] .how h2::before{content:"";display:block;width:56px;height:1px;background:var(--accent);margin-bottom:26px}
[data-flagship] main .section-head{margin-bottom:48px}
[data-flagship] main .link{color:var(--accent)}
[data-flagship] .points{gap:48px}
[data-flagship] .points h3,[data-flagship] .qa h3,[data-flagship] .step h3{font-weight:700}
[data-flagship] .step__k,[data-flagship] .part__k{color:var(--accent);font-weight:600}
[data-flagship] .lesson__n{color:var(--accent);font-weight:600}
[data-flagship] .course-inc b{color:var(--ink)}
[data-flagship] .course-team .teacher img{box-shadow:0 0 0 1px var(--rule)}
[data-flagship] .quote{border-top:1px solid var(--accent)}
[data-flagship] .quote p{color:var(--ink)}
[data-flagship] .qas{gap:44px 72px}
[data-flagship] select.field{background:var(--paper-3);color:var(--ink)}
/* the buy panel, on the texture */
[data-flagship] .course-panel{padding:32px}
[data-flagship] .course-panel .course-price strong{color:var(--accent)}
[data-flagship] .course-panel .link{color:var(--on-band)}
/* the book: no box, the cover larger */
[data-flagship] .practise__item{background:none;padding:0;grid-template-columns:240px minmax(0,1fr);gap:56px}
[data-flagship] .practise__item img{box-shadow:0 30px 60px rgba(0,0,0,.55)}
[data-flagship] .practise__item h3{font-weight:700;font-size:32px}
/* closing band, on the texture, with the cover */
.feature--flagship{padding:120px 0}
.feature--flagship .feature__cols{grid-template-columns:minmax(0,4fr) minmax(0,8fr);gap:96px}
.feature--flagship .feature__pics{justify-content:flex-start}
.feature--flagship .feature__cover{width:100%;max-width:280px;height:auto;box-shadow:0 40px 80px rgba(0,0,0,.6)}
.feature--flagship h2{font-weight:600;font-size:52px;letter-spacing:-0.03em;margin-bottom:20px}
.feature--flagship .kicker{color:var(--accent)}
.feature--flagship .lede{font-size:21px;line-height:1.6;max-width:44ch}
.feature--flagship .course-price strong{color:var(--accent)}
[data-flagship] .start-free--band{background:var(--paper-3)}
@media (max-width:900px){
  [data-flagship]{--section:72px}
  .hero--flagship .wrap{padding-top:120px;padding-bottom:64px}
  .hero--flagship .hero__cols{grid-template-columns:minmax(0,1fr);gap:44px}

  .hero--flagship .hero__text{font-size:19px}
  .hero__cover{justify-self:start;max-width:200px}
  [data-flagship] main h2{font-size:32px}
  [data-flagship] .points{gap:32px 20px}
  [data-flagship] .practise__item{grid-template-columns:120px minmax(0,1fr);gap:24px}
  [data-flagship] .practise__item h3{font-size:24px}
  .feature--flagship{padding:72px 0}
  .feature--flagship .feature__cols{grid-template-columns:minmax(0,1fr);gap:36px}
  .feature--flagship .feature__cover{max-width:180px}
  .feature--flagship h2{font-size:36px}
  .feature--flagship .lede{font-size:19px}
}
@media (max-width:600px){
  [data-flagship] .points{grid-template-columns:minmax(0,1fr);gap:28px}
}
/* Flagship course pages: the course artwork (16:9) in the hero and closing band */
.hero__art img,.feature--flagship .feature__art{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;border-radius:var(--pic);box-shadow:0 40px 80px rgba(0,0,0,.6),0 8px 20px rgba(0,0,0,.4)}
.hero--flagship .hero__cols:has(.hero__art){grid-template-columns:minmax(0,6fr) minmax(0,5fr);gap:64px}
@media (max-width:900px){.hero--flagship .hero__cols:has(.hero__art){grid-template-columns:minmax(0,1fr);gap:40px}}
/* No Montserrat italic anywhere (house rule): titles marked <i> in headings stay upright */
h1 i,h2 i,h3 i,h4 i,h1 em,h2 em,h3 em,h4 em{font-style:normal}
/* Floating rivers fade out at both edges, so a wide screen doesn't show the whole row at once (Mark, 15 Oct) */
.drift{-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 18%,#000 82%,transparent 100%);mask-image:linear-gradient(90deg,transparent 0,#000 18%,#000 82%,transparent 100%)}
@media (min-width:1600px){.drift{-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 26%,#000 74%,transparent 100%);mask-image:linear-gradient(90deg,transparent 0,#000 26%,#000 74%,transparent 100%)}}
@media (max-width:640px){.drift{-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 10%,#000 90%,transparent 100%);mask-image:linear-gradient(90deg,transparent 0,#000 10%,#000 90%,transparent 100%)}}
/* Text-only dropdowns in the main menu (Learn with us, Log in) */
.navmenu--text{min-width:250px;grid-template-columns:1fr}
.site-nav .navdrop:last-of-type .navmenu--text{left:auto;right:0}
.navdrop[data-nav="login"] .navmenu--text{left:auto;right:0}
@media (max-width:900px){.site-nav.open .navmenu--text{grid-template-columns:1fr}}

/* VIP coaching band: foot of the five FIGSE hubs (Mark, 15 Oct 2026). Silver, quiet, square. Register interest only. */
.vip{position:relative;overflow:hidden;padding:104px 0 96px;color:#23282d;
  background:linear-gradient(115deg,#a7adb3 0%,#d9dde1 16%,#f8f9fa 30%,#c4c9ce 47%,#eceef0 61%,#b0b6bc 80%,#dde0e3 100%);
  border-top:1px solid #b6bcc2;border-bottom:1px solid #b6bcc2}
.vip::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(100deg,transparent 22%,rgba(255,255,255,.7) 38%,transparent 52%),linear-gradient(100deg,transparent 60%,rgba(255,255,255,.35) 72%,transparent 84%)}
.vip > .wrap{position:relative}
.vip__inner{max-width:720px;text-align:center}
.vip__k{font-family:var(--sans);font-weight:600;font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:#5d646b;margin:0 0 22px}
.vip__k::after{content:"";display:block;width:56px;height:1px;background:#9aa1a8;margin:22px auto 0}
.vip h2{font-family:var(--sans);font-weight:800;letter-spacing:-0.015em;font-size:34px;line-height:1.2;color:#1f2428;margin:0 0 20px;text-wrap:balance}
.vip__text{font-family:var(--serif);font-size:19px;line-height:1.6;color:#3b4248;margin:0 auto 14px;max-width:60ch}
.vip__form{display:flex;gap:10px;max-width:520px;margin:30px auto 0;font-family:var(--sans)}
.vip__form .field{flex:1 1 auto;min-width:0;background:#fff;color:#1f2428;box-shadow:inset 0 -1px 0 #9aa1a8}
.vip__form .btn{flex:0 0 auto;background:#2a2f34;color:#f4f5f6}
.vip__form .btn:hover,.vip__form .btn:focus-visible{background:#41474d;color:#fff}
.vip__small{font-family:var(--serif);font-size:15px;line-height:1.5;color:#5d646b;margin:16px auto 0;max-width:52ch}
@media (max-width:600px){
  .vip{padding:72px 0 68px}
  .vip h2{font-size:27px}
  .vip__text{font-size:17px}
  .vip__form{flex-direction:column}
  .vip__form .btn{justify-content:center}
}
/* Five ways to learn (homepage third, hubs second): words only, on the language's light tint */
.ways{background:var(--paper-3)}
.ways__lede{font-size:19px;max-width:62ch}
.ways__row{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-top:2px solid var(--band);margin-top:28px}
.ways__item{display:flex;flex-direction:column;gap:8px;padding:22px 22px 24px 0;border-right:1px solid var(--rule);text-decoration:none;color:inherit}
.ways__item + .ways__item{padding-left:22px}
.ways__item:last-child{border-right:0}
.ways__k{font-family:var(--sans);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}
.ways__h{font-family:var(--sans);font-weight:800;font-size:20px;line-height:1.15;color:var(--ink)}
.ways__p{font-size:16px;line-height:1.5;color:var(--ink-2)}
.ways__f{font-family:var(--sans);font-size:12px;font-weight:600;color:var(--muted);margin-top:auto;padding-top:6px}
.ways__item:hover .ways__h{text-decoration:underline;text-underline-offset:4px}
.ways__note{font-family:var(--sans);font-weight:600;font-size:15px;color:var(--muted);margin:22px 0 0}
@media (max-width:1000px){.ways__row{grid-template-columns:repeat(2,minmax(0,1fr))}.ways__item,.ways__item + .ways__item{padding:18px 18px 18px 0;border-right:0;border-bottom:1px solid var(--rule)}}
@media (max-width:600px){.ways__row{grid-template-columns:minmax(0,1fr)}.ways__item,.ways__item + .ways__item{padding:16px 0}}
/* Level pages: English description under a lesson title that's only in the language being learned */
.lesson__d{display:block;font-size:14px;line-height:1.35;color:var(--muted);margin-top:3px}

/* ------------------------------------------------------------------ memory wall (20 years hero) */
/* A wide strip of photos and logos (tools/memory-wall.py -> img/20years/wall.webp) drifting right
 * to left behind a hero. Two copies of the strip side by side, translateX(-50%) loops seamlessly.
 * <div class="memwall" data-wall aria-hidden="true"><div class="memwall__track"><img class="no-lazyload skip-lazy"><img class="no-lazyload skip-lazy"></div></div>
 * Pace set by js/site.js from the strip's width. Reduced motion: a still wall. */
.memwall{position:absolute;inset:0;overflow:hidden;background:var(--band-deep)}
.memwall__track{display:flex;height:100%;width:max-content;animation:drift var(--wall-s,200s) linear infinite;opacity:0;transition:opacity .8s ease}
.memwall.ready .memwall__track{opacity:1}
.memwall__copy{position:relative;display:block;height:100%}
.memwall__track picture{display:block;height:100%}
.memwall__track img{height:100%;width:auto;max-width:none;display:block}
.memwall::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(14,24,30,.92) 0%,rgba(14,24,30,.82) 38%,rgba(14,24,30,.45) 72%,rgba(14,24,30,.3) 100%)}
.memwall.paused .memwall__track{animation-play-state:paused}
.hero--wall::before{display:none}
.hero--wall .hero__pause{z-index:2}
.memwall__more{position:absolute;right:84px;bottom:28px;z-index:2;height:48px;padding:0 18px;border:0;background:rgba(14,24,30,.7);color:#fff;font-family:var(--sans);font-weight:700;font-size:14px;cursor:pointer;display:flex;align-items:center;gap:8px}
.memwall__more:hover,.hero__pause:hover{background:rgba(14,24,30,.9)}
.memwall__track{transition:opacity .25s ease}
@media (max-width:640px){.hero--wall .wrap{padding-bottom:92px}.memwall__more{right:72px;bottom:16px;height:44px;padding:0 14px;font-size:13px}.hero--wall .hero__pause{right:16px;bottom:16px;width:44px;height:44px}}
@media (max-width:900px){.memwall::after{background:rgba(14,24,30,.8)}}
@media (prefers-reduced-motion:reduce){.memwall__track{animation:none}.hero--wall .hero__pause{display:none}.memwall__more{right:28px}}
/* Homepage books row: ten covers (Portuguese and Japanese added, Mark 17 Oct) */
.shelf-row{grid-template-columns:repeat(10,minmax(0,1fr));gap:18px}
@media (max-width:1100px){.shelf-row{grid-template-columns:repeat(5,minmax(0,1fr))}}
/* Signup forms: "I'm learning" language picker after name and email (Mark, 17 Oct) */
.signup-learning{display:flex;align-items:center;gap:12px;margin:0;font-family:var(--sans);font-size:14px;font-weight:600}
.signup-learning span{flex:0 0 auto}
.signup-learning select{flex:1 1 auto;min-width:0;margin:0}
/* Footer column headings in capitals (Mark, 17 Oct) */
.site-footer .cols strong{text-transform:uppercase;letter-spacing:.08em;font-size:13px}
/* YouTube page: channel logos beside the two panel titles */
.yt-channel__h{display:flex;align-items:center;gap:12px}
.yt-channel__h img{width:48px;height:48px;border-radius:50%;flex:0 0 auto}
/* YouTube page hero: a still wall of video thumbnails at a slight angle, behind the words */
.hero--ytwall{position:relative;overflow:hidden;isolation:isolate}
.hero--ytwall .wrap{position:relative;z-index:2}
.ytwall{position:absolute;inset:-35% -10%;z-index:0;pointer-events:none}
.ytwall__grid{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:10px;transform:rotate(-7deg)}
.ytwall__grid img{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;display:block;border-radius:var(--pic)}
.hero--ytwall::after{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(90deg,var(--band) 0%,color-mix(in srgb,var(--band) 88%,transparent) 42%,color-mix(in srgb,var(--band) 45%,transparent) 100%)}
@media (max-width:760px){.ytwall__grid{grid-template-columns:repeat(5,minmax(0,1fr))}.hero--ytwall::after{background:color-mix(in srgb,var(--band) 82%,transparent)}}
/* Footer links in regular weight; the capitalised headings stay bold (Mark, 17 Oct) */
.site-footer .cols a{font-weight:400}
/* VIP band: the language's round logo in a shiny silver ring (Mark, 17 Oct) */
.vip__logo{display:inline-block;width:84px;height:84px;padding:5px;border-radius:50%;margin:0 auto 18px;
  background:conic-gradient(from 210deg,#f4f5f7,#9aa1a8,#ffffff,#8b9299,#e6e8eb,#a6adb4,#f4f5f7);
  box-shadow:0 6px 18px rgba(35,40,45,.18),inset 0 0 0 1px rgba(255,255,255,.6)}
.vip__logo img{width:100%;height:100%;border-radius:50%;display:block;background:#fff}
/* Team-row portraits link to the person on the Meet the team page */
a.teacher{color:inherit;text-decoration:none}
a.teacher:hover .h{text-decoration:underline;text-underline-offset:3px}
a.teacher:focus-visible{outline:2px solid var(--action);outline-offset:4px}
/* Header logo: the C7 lock-up (Source Serif italic "Coffee Break", Montserrat 800 LANGUAGES), Mark 17 Oct */
.site-header .logo img{height:48px;width:auto}
@media (max-width:640px){.site-header .logo img{height:40px}}

/* menu "All languages" jumps here: keep the whole grid below the sticky header (Mark, 17 Oct 2026) */
#languages{scroll-margin-top:110px}

/* faces link to the person on Meet the team (Mark, 17 Oct 2026) */
.face-link{display:inline-block;flex:0 0 auto;line-height:0;border-radius:50%}
.faces .face-link img{max-width:none;flex:none}
.faces .face-link:hover img,.faces .face-link:focus-visible img{transform:translateY(-2px)}
.faces img{transition:transform .15s}

/* four ways (Japanese, 17 Oct 2026) */
@media (min-width:1001px){.ways__row--4{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* a busy hero picture (the Coffee Break TV wall): a stronger fade under the menu */
.hero--split .hero__pic--busy::after{height:200px;background:linear-gradient(180deg,rgba(14,24,30,.88),rgba(14,24,30,0))}

/* Rivers on the Coffee Break TV page (17 Oct 2026): two rows of lesson thumbnails and two of member quotes,
   moving in opposite directions; hover (or a tap) pauses. Square corners, the site's type. */
.river-wrap{display:grid;gap:14px}
.river{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent);mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent)}
.river__track{display:flex;gap:14px;width:max-content;animation:river 90s linear infinite}
.river--rev .river__track{animation-direction:reverse}
.river:hover .river__track,.river.is-paused .river__track{animation-play-state:paused}
.river__track a{display:block;flex:0 0 auto;line-height:0}
.river__track img{height:160px;width:auto;aspect-ratio:16/9;object-fit:cover;background:var(--paper-3);transition:transform .18s}
.river__track a:hover img,.river__track a:focus-visible img{transform:scale(1.04)}
.river--quotes .river__track{gap:18px;animation-duration:140s}
.river-quote{flex:0 0 auto;width:340px;margin:0;padding:22px 24px 20px;background:var(--paper);border-top:3px solid var(--band,#95b31d);display:flex;flex-direction:column;gap:12px}
.section--white .river-quote{background:var(--paper-2,#f2f5f4)}
.river-quote p{margin:0;font-family:var(--serif);font-size:18px;line-height:1.5;color:var(--ink)}
.river-quote cite{margin-top:auto;font-family:var(--sans);font-style:normal;font-weight:700;font-size:14px;color:var(--muted)}
@keyframes river{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){.river__track{animation:none}.river{overflow-x:auto}}
@media (max-width:600px){.river__track img{height:120px}.river-quote{width:280px}}

/* Site search (18 Oct 2026). The header field opens under the header from the menu's Search link
   (js/site.js); the results page is search.html. Square, no borders, the band colour behind. */
.header-search{position:absolute;left:0;right:0;top:100%;background:var(--band);box-shadow:0 18px 40px rgba(10,20,26,.25)}
.site-header--over.has-search{background-color:var(--band);background-image:none}
.header-search .wrap{display:block;height:auto}
.header-search form{display:flex;align-items:center;gap:10px;padding:14px 0 18px}
.header-search .field{flex:1 1 auto;min-width:0;background:var(--paper)}
.header-search .btn{height:54px;flex:0 0 auto}
.header-search__close{flex:0 0 auto;width:54px;height:54px;display:flex;align-items:center;justify-content:center;background:none;border:0;color:var(--on-band);cursor:pointer}
.header-search__close:hover{background:var(--band-rule)}
@media (max-width:600px){.header-search .btn{padding:0 14px}.header-search__close{width:44px}}

.search-form{display:flex;gap:10px;max-width:760px}
.search-form .field{flex:1 1 auto;min-width:0;background:var(--paper-3)}
.search-form .btn{height:54px;flex:0 0 auto}
.search-status{font-family:var(--sans);font-weight:600;font-size:16px;color:var(--muted);margin:28px 0 0;min-height:1.5em}
.search-results{list-style:none;margin:18px 0 0;padding:0;max-width:860px;border-top:1px solid var(--rule)}
.search-results li{border-bottom:1px solid var(--rule)}
.search-results a{display:block;padding:18px 0;text-decoration:none;color:var(--ink)}
.search-results .search-type{display:block;font-family:var(--sans);font-weight:700;font-size:13px;color:var(--accent);margin:0 0 4px}
.search-results .search-title{display:block;font-family:var(--sans);font-weight:700;font-size:19px;line-height:1.3;letter-spacing:-0.01em}
.search-results a:hover .search-title{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}
.search-results .search-url{display:block;font-family:var(--sans);font-size:13px;color:var(--muted);margin-top:4px;overflow-wrap:anywhere}
.search-more{margin-top:28px}
.search-empty{max-width:640px;margin-top:28px}
.search-empty p{color:var(--ink-2);margin:0 0 16px}
.search-empty .langs{margin-top:8px}
@media (max-width:600px){.search-form .btn{padding:0 16px}.search-results .search-title{font-size:17px}}

/* On Track presenter photo + caption: stack on phones */
@media (max-width:600px){.ot-presenter-fig{grid-template-columns:minmax(0,1fr)!important}.ot-presenter-fig img{max-width:260px}}

/* faces row: smaller on phones so nine faces fit in 390px (18 Oct 2026) */
@media (max-width:520px){.faces img{width:40px;height:40px;margin-right:-8px}}

/* preview hero picker hidden from launch day (18 Oct 2026); it never reaches WordPress anyway */
.hero-switch{display:none !important}

/* WordPress swaps emoji for <img class="no-lazyload skip-lazy emoji">: keep them text-sized wherever page styles size images (the /20years/ stories showed them full width, 18 Oct 2026) */
img.emoji,img.wp-smiley{display:inline!important;width:1em!important;height:1em!important;max-width:1em!important;margin:0 .07em!important;padding:0!important;border:0!important;border-radius:0!important;box-shadow:none!important;background:none!important;vertical-align:-0.1em!important;aspect-ratio:auto!important;object-fit:contain!important}

</style>
<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
<script defer data-domain="coffeebreaklanguages.com" event-design="coded" src="https://plausible.io/js/script.tagged-events.outbound-links.pageview-props.js"></script>
<script>window.plausible=window.plausible||function(){(window.plausible.q=window.plausible.q||[]).push(arguments)}</script>
<meta name="viewport" content="width=device-width, initial-scale=1">
	<!-- This site is optimized with the Yoast SEO Premium plugin v28.7 (Yoast SEO v28.7) - https://yoast.com/product/yoast-seo-premium-wordpress/ -->
	<title>Coffee Break Spanish - Coffee Break Languages</title>
	<meta name="description" content="Do you want to improve your Spanish skills? Coffee Break Spanish is the way to go to learn where and when it suits you." />
	<link rel="canonical" href="https://coffeebreaklanguages.com/coffeebreakspanish/" />
	<meta property="og:locale" content="en_US" />
	<meta property="og:type" content="article" />
	<meta property="og:title" content="Coffee Break Spanish" />
	<meta property="og:description" content="Do you want to improve your Spanish skills? Coffee Break Spanish is the way to go to learn where and when it suits you." />
	<meta property="og:url" content="https://coffeebreaklanguages.com/coffeebreakspanish/" />
	<meta property="og:site_name" content="Coffee Break Languages" />
	<meta property="article:publisher" content="https://facebook.com/coffeebreaklanguages" />
	<meta property="article:modified_time" content="2025-02-12T14:28:25+00:00" />
	<meta property="og:image" content="http://dev2.radiolingua.com/wp-content/uploads/2014/06/Logo_CBS-1400-300x300.jpg" />
	<meta name="twitter:card" content="summary_large_image" />
	<meta name="twitter:site" content="@coffeebreaklang" />
	<meta name="twitter:label1" content="Est. reading time" />
	<meta name="twitter:data1" content="32 minutes" />
	<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/coffeebreaklanguages.com\/coffeebreakspanish\/","url":"https:\/\/coffeebreaklanguages.com\/coffeebreakspanish\/","name":"Coffee Break Spanish - Coffee Break Languages","isPartOf":{"@id":"https:\/\/coffeebreaklanguages.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/coffeebreaklanguages.com\/coffeebreakspanish\/#primaryimage"},"image":{"@id":"https:\/\/coffeebreaklanguages.com\/coffeebreakspanish\/#primaryimage"},"thumbnailUrl":"http:\/\/dev2.radiolingua.com\/wp-content\/uploads\/2014\/06\/Logo_CBS-1400-300x300.jpg","datePublished":"2014-04-07T20:20:29+00:00","dateModified":"2025-02-12T14:28:25+00:00","description":"Do you want to improve your Spanish skills? Coffee Break Spanish is the way to go to learn where and when it suits you.","breadcrumb":{"@id":"https:\/\/coffeebreaklanguages.com\/coffeebreakspanish\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/coffeebreaklanguages.com\/coffeebreakspanish\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/coffeebreaklanguages.com\/coffeebreakspanish\/#primaryimage","url":"http:\/\/dev2.radiolingua.com\/wp-content\/uploads\/2014\/06\/Logo_CBS-1400-300x300.jpg","contentUrl":"http:\/\/dev2.radiolingua.com\/wp-content\/uploads\/2014\/06\/Logo_CBS-1400-300x300.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/coffeebreaklanguages.com\/coffeebreakspanish\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/coffeebreaklanguages.com\/"},{"@type":"ListItem","position":2,"name":"Coffee Break Spanish"}]},{"@type":"WebSite","@id":"https:\/\/coffeebreaklanguages.com\/#website","url":"https:\/\/coffeebreaklanguages.com\/","name":"Coffee Break Languages","description":"Learn a language on your coffee break","publisher":{"@id":"https:\/\/coffeebreaklanguages.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/coffeebreaklanguages.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/coffeebreaklanguages.com\/#organization","name":"Radio Lingua Ltd","url":"https:\/\/coffeebreaklanguages.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/coffeebreaklanguages.com\/#\/schema\/logo\/image\/","url":"https:\/\/coffeebreaklanguages.com\/wp-content\/uploads\/2019\/05\/circular-logo-alpha-cblangs.png","contentUrl":"https:\/\/coffeebreaklanguages.com\/wp-content\/uploads\/2019\/05\/circular-logo-alpha-cblangs.png","width":1000,"height":1000,"caption":"Radio Lingua Ltd"},"image":{"@id":"https:\/\/coffeebreaklanguages.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/coffeebreaklanguages","https:\/\/x.com\/coffeebreaklang","https:\/\/instagram.com\/coffeebreaklanguages","http:\/\/linkedin.com\/company\/radiolingua\/","https:\/\/youtube.com\/coffeebreaklanguages\/"]}]}</script>
	<!-- / Yoast SEO Premium plugin. -->


<link rel="alternate" type="application/rss+xml" title="Coffee Break Languages &raquo; Feed" href="https://coffeebreaklanguages.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="Coffee Break Languages &raquo; Comments Feed" href="https://coffeebreaklanguages.com/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="Coffee Break Languages &raquo; Coffee Break Spanish Comments Feed" href="https://coffeebreaklanguages.com/coffeebreakspanish/feed/" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://coffeebreaklanguages.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcoffeebreaklanguages.com%2Fcoffeebreakspanish%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://coffeebreaklanguages.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcoffeebreaklanguages.com%2Fcoffeebreakspanish%2F&#038;format=xml" />
<link rel="https://api.w.org/" href="https://coffeebreaklanguages.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://coffeebreaklanguages.com/wp-json/wp/v2/pages/10022" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://coffeebreaklanguages.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.1.3" />
<link rel='shortlink' href='https://coffeebreaklanguages.com/?p=10022' />
		<script type="text/javascript">
			(function(c, l, a, r, i, t, y) {
				c[a] = c[a] || function() {
					(c[a].q = c[a].q || []).push(arguments)
				};
				t = l.createElement(r);
				t.async = 1;
				t.src = "https://www.clarity.ms/tag/" + i + "?ref=wordpress";
				y = l.getElementsByTagName(r)[0];
				y.parentNode.insertBefore(t, y);
			})(window, document, "clarity", "script", "rt4wt39ohp");
		</script>
	<script src="https://458fafb00c4a403a8e1c46d176f3a286.js.ubembed.com" async></script>
<!-- TrustBox script -->
<script type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async></script>
<!-- End TrustBox script -->
<script src="https://analytics.ahrefs.com/analytics.js" data-key="dyJNBzQ4UqeQ/Yk/TZoAow" async></script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-PN9HXGG6');</script>
<!-- End Google Tag Manager --><meta name="generator" content="Elementor 4.3.5; features: additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-auto">
<style>.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style>			<style>
				.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload),
				.e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) * {
					background-image: none !important;
				}
				@media screen and (max-height: 1024px) {
					.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload),
					.e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload) * {
						background-image: none !important;
					}
				}
				@media screen and (max-height: 640px) {
					.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload),
					.e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload) * {
						background-image: none !important;
					}
				}
			</style>
			<script>
  !function(g,s,q,r,d){r=g[r]=g[r]||function(){(r.q=r.q||[]).push(arguments)};
  d=s.createElement(q);d.src='//d1l6p2sc9645hc.cloudfront.net/gosquared.js';q=
  s.getElementsByTagName(q)[0];q.parentNode.insertBefore(d,q)}(window,document
  ,'script','_gs');

  _gs('GSN-276942-W');
  _gs('set', 'anonymizeIP', true);
</script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="https://load.fomo.com/api/v1/oKmWIiRJEV6JqX4RBGzzZA/load.js" async></script>

<!-- Facebook Pixel Code -->
<script>
  !function(f,b,e,v,n,t,s)
  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];
  s.parentNode.insertBefore(t,s)}(window, document,'script',
  'https://connect.facebook.net/en_US/fbevents.js');
  fbq('init', '490638531118067');
  fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
  src="https://www.facebook.com/tr?id=490638531118067&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->

<!-- Start of Async ProveSource Code --><script>!function(o,i){window.provesrc&&window.console&&console.error&&console.error("ProveSource is included twice in this page."),provesrc=window.provesrc={dq:[],display:function(o,i){this.dq.push({n:o,g:i})}},o._provesrcAsyncInit=function(){provesrc.init({apiKey:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50SWQiOiI1ZDg0YmU1ZDMwOWM2ODMxNDAyNTcxYTAiLCJpYXQiOjE1Njg5ODA1NzN9.NMKp7QpqHrUGghZ_AiqkJk-UbzXfBUxfu8a1TAqZiFY",v:"0.0.3"})};var r=i.createElement("script");r.type="text/javascript",r.async=!0,r["ch"+"ar"+"set"]="UTF-8",r.src="https://cdn.provesrc.com/provesrc.js";var e=i.getElementsByTagName("script")[0];e.parentNode.insertBefore(r,e)}(window,document);</script><!-- End of Async ProveSource Code -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-1YY145SWSH"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-1YY145SWSH');
</script><link rel="icon" href="https://coffeebreaklanguages.com/wp-content/uploads/2018/08/cblanguages-favicon-150x150.png" sizes="32x32" />
<link rel="icon" href="https://coffeebreaklanguages.com/wp-content/uploads/2018/08/cblanguages-favicon-300x300.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://coffeebreaklanguages.com/wp-content/uploads/2018/08/cblanguages-favicon-300x300.png" />
<meta name="msapplication-TileImage" content="https://coffeebreaklanguages.com/wp-content/uploads/2018/08/cblanguages-favicon-300x300.png" />
<style id="wp-custom-css">
.textbox {padding:2px 6px 4px 6px; color: #555555; background-color: #eeeeee; border: #dddddd 2px solid}
/* Coffee Break Immersion Landing Page */
/* Paste into: Appearance → Customise → Additional CSS */

@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@300;400;500;600&family=Source+Serif+4:ital,wght@0,300;0,400;0,500;1,300;1,400&display=swap');

.cb-immersion {
  background: #0a0a0a;
  color: #e8e4df;
  font-family: 'Source Serif 4', serif;
  font-weight: 300;
  line-height: 1.7;
	font-size: 1.5rem !important;
  -webkit-font-smoothing: antialiased;
  margin: 0;
  padding: 0;
}

.cb-immersion *, .cb-immersion *::before, .cb-immersion *::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

/* Hero */
.cb-immersion .hero {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 4rem 0 0;
}

.cb-immersion .brand-line {
  font-size: 0.75rem;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: #6a6259;
  margin-bottom: 2rem;
}

.cb-immersion .hero-image {
  width: 100%;
  max-width: 1000px;
  margin: 0 auto;
  padding: 0 2rem;
}

.cb-immersion .hero-image img {
  width: 100%;
  height: auto;
  display: block;
}

.cb-immersion .hero-text {
  padding: 3rem 2rem 0;
}

.cb-immersion .hero-text h1 {
  font-family: 'Cinzel', serif;
  font-weight: 300;
  font-size: clamp(2.2rem, 5vw, 4rem);
  letter-spacing: 0.15em;
  text-transform: uppercase;
  margin-bottom: 0.5rem;
  color: #e8e4df;
}

.cb-immersion .hero-text .subtitle {
  font-family: 'Source Serif 4', serif;
  font-weight: 300;
  font-style: italic;
  font-size: clamp(1rem, 2.5vw, 1.3rem);
  color: #a09888;
  letter-spacing: 0.05em;
}

.cb-immersion .divider {
  width: 60px;
  height: 1px;
  background: #3a3530;
  margin: 0 auto;
}

/* Sections */
.cb-immersion section {
  max-width: 680px;
  margin: 0 auto;
  padding: 5rem 2rem;
}

.cb-immersion section h2 {
  font-family: 'Cinzel', serif;
  font-weight: 400;
  font-size: clamp(1.5rem, 3vw, 2.2rem);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-align: center;
  margin-bottom: 2.5rem;
  color: #e8e4df;
}

.cb-immersion section p {
  font-size: 1rem;
  color: #b8b0a5;
  margin-bottom: 1.5rem;
  text-align: center;
}

/* Scent Notes */
.cb-immersion .notes-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2.5rem;
  margin-top: 3rem;
}

.cb-immersion .note-group {
  text-align: center;
}

.cb-immersion .note-group h3 {
  font-family: 'Cinzel', serif;
  font-weight: 400;
  font-size: 0.85rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: #a09888;
  margin-bottom: 1rem;
}

.cb-immersion .note-group p {
  font-family: 'Source Serif 4', serif;
  font-style: italic;
  font-size: 1.05rem;
  color: #d4cec5;
  line-height: 2;
  text-align: center;
  margin-bottom: 0;
}

/* The Range list */
.cb-immersion .range-list {
  list-style: none;
  text-align: center;
  margin-top: 2rem;
  padding-left: 0;
}

.cb-immersion .range-list li {
  font-family: 'Cinzel', serif;
  font-size: 1.15rem;
  letter-spacing: 0.06em;
  color: #d4cec5;
  padding: 0.5rem 0;
}

.cb-immersion .range-list li span {
  color: #6a6259;
  font-family: 'Source Serif 4', serif;
  font-size: 0.75rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  margin-left: 0.8rem;
}

/* Quote */
.cb-immersion blockquote {
  font-family: 'Source Serif 4', serif;
  font-style: italic;
  font-weight: 300;
  font-size: clamp(1.2rem, 2.8vw, 1.7rem);
  color: #d4cec5;
  line-height: 1.8;
  margin-bottom: 1.5rem;
  text-align: center;
  border: none;
  padding: 0;
}

.cb-immersion .attribution {
  font-size: 0.8rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #6a6259;
  text-align: center;
}

/* CTA */
.cb-immersion .cta-section {
  text-align: center;
  padding: 5rem 2rem 6rem;
}

.cb-immersion .cta-section .tagline {
  font-family: 'Cinzel', serif;
  font-weight: 300;
  font-size: clamp(1.6rem, 3.5vw, 2.4rem);
  letter-spacing: 0.08em;
  margin-bottom: 1rem;
}

.cb-immersion .cta-section .available {
  font-size: 0.8rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: #6a6259;
  margin-bottom: 2.5rem;
}

.cb-immersion .cta-button {
  display: inline-block;
  font-family: 'Source Serif 4', serif;
  font-size: 0.78rem;
  font-weight: 400;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: #e8e4df;
  border: 1px solid #3a3530;
  padding: 1rem 3rem;
  text-decoration: none;
  transition: all 0.3s ease;
}

.cb-immersion .cta-button:hover {
  background: #e8e4df;
  color: #0a0a0a;
  border-color: #e8e4df;
}

/* Footer */
.cb-immersion .page-footer {
  text-align: center;
  padding: 3rem 2rem;
  border-top: 1px solid #1a1815;
}

.cb-immersion .page-footer p {
  font-size: 0.7rem;
  color: #3a3530;
  letter-spacing: 0.1em;
}

/* Responsive */
@media (max-width: 600px) {
  .cb-immersion .notes-grid {
    grid-template-columns: 1fr;
    gap: 2rem;
  }
  .cb-immersion section { padding: 4rem 1.5rem; }
  .cb-immersion .hero { padding-top: 3rem; }
}
.page .featured-image.page-header-image { display: none; }

</style>

</head>
<body data-lang="es">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PN9HXGG6"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<a class="skip" href="#main">Skip to content</a>

<header class="site-header site-header--over" data-header>
  <div class="wrap">
    <a class="logo" href="/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/logo-c7.png" alt="Coffee Break Languages"></a>
    <button class="menu-toggle" aria-expanded="false" aria-controls="site-nav" aria-label="Menu"><svg width="26" height="26" viewBox="0 0 26 26" fill="none" stroke="currentColor" stroke-width="2.4" aria-hidden="true"><path d="M3 7h20M3 13h20M3 19h20"/></svg></button>
    <nav class="site-nav" id="site-nav" aria-label="Main">
      <div class="navdrop">
        <button aria-expanded="false">Languages <svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M2 4l4 4 4-4"/></svg></button>
        <div class="navmenu">
          <a href="/english/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbe.png" alt="">English</a>
          <a href="/coffeebreakfrench/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbf.png" alt="">French</a>
          <a href="/coffeebreakgerman/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbg.png" alt="">German</a>
          <a href="/coffeebreakitalian/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbi.png" alt="">Italian</a>
          <a href="/coffeebreakjapanese/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbj.png" alt="">Japanese</a>
          <a href="/coffeebreakchinese/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbc.png" alt="">Mandarin Chinese</a>
          <a href="/coffeebreakportuguese/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbp.png" alt="">Portuguese</a>
          <a href="/coffeebreakgaelic/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbga.png" alt="">Scottish Gaelic</a>
          <a href="/coffeebreakspanish/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbs.png" alt="">Spanish</a>
          <a href="/coffeebreakswedish/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbsw.png" alt="">Swedish</a>
        </div>
      </div>
      <div class="navdrop" data-nav="learn">
        <button aria-expanded="false">Learn with us <svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M2 4l4 4 4-4"/></svg></button>
        <div class="navmenu navmenu--text">
          <a href="/coffeebreakspanish/#levels">Online courses</a>
          <a href="/coffeebreakspanish/#tv">On-demand video library</a>
          <a href="/coffeebreakspanish/#levels">Podcasts</a>
          <a href="/coffeebreakspanish/#free">YouTube</a>
          <a href="/coffeebreakspanish/#practise">Books</a>
        </div>
      </div>
      <a href="/about/">About</a>
      <div class="navdrop" data-nav="login">
        <button aria-expanded="false" class="login">Log in <svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M2 4l4 4 4-4"/></svg></button>
        <div class="navmenu navmenu--text">
          <a href="https://coffeebreakacademy.com/sign_in">Coffee Break Academy</a>
          <a href="https://coffeebreaktv.com/sign_in">Coffee Break TV</a>
        </div>
      </div>
      <a href="https://coffeebreaklanguages.com/?s=" aria-label="Search"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="7.5" cy="7.5" r="5.5"/><path d="M12 12l4.5 4.5"/></svg><span class="sr-only">Search</span></a>
      <a class="btn btn--small" href="#signup">Free Spanish lessons</a>
    </nav>
  </div>
</header>

<!-- HERO: language hub. One of the three Spanish backgrounds at random, under a navy fade. -->
<section class="hero hero--photo hero--hub" aria-label="Coffee Break Spanish">
  <img class="no-lazyload skip-lazy hero__media" src="/wp-content/uploads/cbl-coded/img/hero-images/hero-gradient-cbs1.jpg" alt="" data-random="/wp-content/uploads/cbl-coded/img/hero-images/hero-gradient-cbs1.jpg,/wp-content/uploads/cbl-coded/img/hero-images/hero-gradient-cbs2.jpg,/wp-content/uploads/cbl-coded/img/hero-images/hero-gradient-cbs3.jpg">
  <script>(function(i){var l=i.getAttribute('data-random').split(','),k='cbl-hero-seen',s=[];try{s=JSON.parse(localStorage.getItem(k)||'[]');}catch(e){}var c=l.filter(function(x){return s.indexOf(x)<0;});if(!c.length)c=l.filter(function(x){return x!==s[0];});if(!c.length)c=l;var p=c[Math.floor(Math.random()*c.length)];i.src=p;try{localStorage.setItem(k,JSON.stringify([p].concat(s).slice(0,2)));}catch(e){}})(document.currentScript.previousElementSibling);</script>
  <div class="hero__shade"></div>
  <div class="wrap">
    <img class="no-lazyload skip-lazy hero__badge" src="/wp-content/uploads/cbl-coded/img/cbs.png" alt="">
    <h1 class="hero__title">Coffee Break Spanish</h1>
    <p class="hero__text">Learn Spanish a little at a time, with teachers who explain how the language works as they go.</p>
    <div class="actions"><a class="btn" href="/tag/cbs-season-1/">Start Level 1, free</a></div>
  </div>
</section>


<main id="main">

<!-- ways:start -->
<section class="section ways" aria-labelledby="ways-h">
  <div class="wrap">
    <h2 id="ways-h">Five ways to learn with Coffee Break Spanish</h2>
    <p class="lede ways__lede">Spanish lessons made by experienced teachers and native speakers, ready whenever you are. Choose the format that fits your life.</p>
    <div class="ways__row">
      <a class="ways__item" href="#levels"><span class="ways__k">One-time purchase</span><span class="ways__h">Online courses</span><span class="ways__p">Step-by-step, progressive Spanish courses with full notes and exercises. Work through at your own pace.</span><span class="ways__f">Beginner to advanced</span></a>
      <a class="ways__item" href="#tv"><span class="ways__k">Subscription</span><span class="ways__h">Coffee Break Spanish TV</span><span class="ways__p">Short Spanish video lessons, new every week, on your computer, phone, tablet or TV.</span><span class="ways__f">Cancel any time</span></a>
      <a class="ways__item" href="/tag/cbs-season-1/"><span class="ways__k">Free</span><span class="ways__h">Podcasts</span><span class="ways__p">Every level starts with a free podcast: audio lessons to listen to anywhere.</span><span class="ways__f">On every major podcast app</span></a>
      <a class="ways__item" href="#free"><span class="ways__k">Free</span><span class="ways__h">YouTube</span><span class="ways__p">New Spanish videos regularly: grammar, vocabulary, idioms and more.</span><span class="ways__f">Free to watch</span></a>
      <a class="ways__item" href="#practise"><span class="ways__k">In print</span><span class="ways__h">The book</span><span class="ways__p">50 Spanish Coffee Breaks: short activities to dip into, one coffee break at a time.</span><span class="ways__f">Paperback and ebook</span></a>
    </div>
    <p class="ways__note">Learn at your own pace, wherever you are and whatever your learning style.</p>
  </div>
</section>
<!-- ways:end -->


<!-- THE SPANISH TEAM + START FREE -->
<section class="section section--tight">
  <div class="wrap newhere">
    <div class="newhere__mark newhere__team">
      <div>
        <p class="h">The team behind the lessons</p>
        <p>Native speakers and experienced teachers who make every lesson, from your first <i>hola</i> onwards.</p>
        <div class="team team--small">
<!-- team:es:start -->
<a class="teacher" href="/meet-the-team/#mark"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/teachers/mark-es.webp" alt="" loading="lazy" width="112" height="112"><span class="h">Mark</span><span class="meta">Spanish</span></a>
<a class="teacher" href="/meet-the-team/#anabel"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/teachers/anabel.webp" alt="" loading="lazy" width="112" height="112"><span class="h">Anabel</span><span class="meta">Spanish</span></a>
<a class="teacher" href="/meet-the-team/#pablo"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/teachers/pablo.webp" alt="" loading="lazy" width="112" height="112"><span class="h">Pablo</span><span class="meta">Spanish</span></a>
<a class="teacher" href="/meet-the-team/#concha"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/teachers/concha.webp" alt="" loading="lazy" width="112" height="112"><span class="h">Concha</span><span class="meta">Spanish</span></a>
<a class="teacher" href="/meet-the-team/#marina"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/teachers/marina.webp" alt="" loading="lazy" width="112" height="112"><span class="h">Marina</span><span class="meta">Spanish</span></a>
<a class="teacher" href="/meet-the-team/#kara"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/teachers/kara.webp" alt="" loading="lazy" width="112" height="112"><span class="h">Kara</span><span class="meta">Spanish</span></a>
<a class="teacher" href="/meet-the-team/#carmen"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/teachers/carmen.webp" alt="" loading="lazy" width="112" height="112"><span class="h">Carmen</span><span class="meta">Spanish</span></a>
<a class="teacher" href="/meet-the-team/#alba"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/teachers/alba.webp" alt="" loading="lazy" width="112" height="112"><span class="h">Alba</span><span class="meta">Spanish</span></a>
<!-- team:es:end -->
        </div>
      </div>
    </div>
    <div class="start-free start-free--band" id="signup">
      <p class="h">Free Spanish lessons by email</p>
      <p>Free lessons, tips and news from the Spanish team, straight to your inbox.</p>
      <form action="https://app.kit.com/forms/8666850/subscriptions" method="post">
        <input type="hidden" name="tags[]" value="7455967">
        <label class="sr-only" for="es-email">Email address</label>
        <input class="field" id="es-email" type="email" name="email_address" placeholder="Your email address" required autocomplete="email">
        <button class="btn" type="submit">Send me Spanish lessons</button>
      </form>
    </div>
  </div>
</section>

<!-- LEVELS: free podcast, then the course for that level -->
<section class="section section--white" id="levels">
  <div class="wrap">
    <div class="section-head">
      <div style="flex:1 1 600px">
        <h2>The five levels of Coffee Break Spanish</h2>
        <p class="lede" style="font-size:19px">Every level starts with a free podcast. The course for each level adds a whole range of additional materials, including lesson notes, videos and exercises. Once you buy it, it’s yours for life.</p>
      </div>
    </div>
    <div class="levels">
      <div class="level">
        <span class="level__n">1</span>
        <div><h3>Absolute beginner <span class="meta">A1–A2</span></h3><p>Start from zero with Mark, while Kara takes on the role of the learner.</p><p class="actions" style="gap:8px 20px"><a class="link" href="/tag/cbs-season-1/">Listen to Level 1 free</a> <a class="link" href="https://coffeebreakacademy.com/l/pdp/coffee-break-spanish-firststeps">or try First Steps, free</a></p></div>
        <a class="level__course" href="/courses/coffee-break-spanish-level-1/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/home/courses/spanish1.jpg" alt="" loading="lazy"><span><span class="h">The Level 1 course</span><span class="media__text">40 lessons for absolute beginners, with video lessons, notes and exercises</span></span></a>
      </div>
      <div class="level">
        <span class="level__n">2</span>
        <div><h3>Beginner plus <span class="meta">A2–B1</span></h3><p>Build on Level 1, learn to talk about the past and the future, and find out when to use <i>ser</i> or <i>estar</i>, and <i>por</i> or <i>para</i>.</p><p class="actions" style="gap:8px 20px"><a class="link" href="/tag/cbs-season-2/">Listen to Level 2 free</a></p></div>
        <a class="level__course" href="/courses/coffee-break-spanish-level-2/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/home/courses/spanish2.jpg" alt="" loading="lazy"><span><span class="h">The Level 2 course</span><span class="media__text">Move beyond the basics and learn the grammar you need to go further</span></span></a>
      </div>
      <div class="level">
        <span class="level__n">3</span>
        <div><h3>Intermediate <span class="meta">B1–B2</span></h3><p>Follow conversations with a native speaker, and hear how Spanish changes across Latin America.</p><p class="actions" style="gap:8px 20px"><a class="link" href="/tag/cbs-season-3/">Listen to Level 3 free</a></p></div>
        <a class="level__course" href="/courses/coffee-break-spanish-level-3/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/home/courses/spanish3.jpg" alt="" loading="lazy"><span><span class="h">The Level 3 course</span><span class="media__text">Take your Spanish further with 40 lessons of conversation and grammar</span></span></a>
      </div>
      <div class="level">
        <span class="level__n">4</span>
        <div><h3>Upper intermediate <span class="meta">B2–C1</span></h3><p>Refine your Spanish through a story told in emails, letters and phone calls over a summer in Mallorca.</p><p class="actions" style="gap:8px 20px"><a class="link" href="/tag/cbs-season-4/">Listen to Level 4 free</a></p></div>
        <a class="level__course" href="/courses/coffee-break-spanish-level-4/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/home/courses/spanish4.jpg" alt="" loading="lazy"><span><span class="h">The Level 4 course</span><span class="media__text">Follow María and Rory through a summer in Mallorca, in 40 lessons</span></span></a>
      </div>
      <div class="level">
        <span class="level__n">5</span>
        <div><h3>Advanced <span class="meta">C1–C2</span></h3><p>Read a story written in Spanish for advanced learners, with a language study for every chapter.</p><p class="actions" style="gap:8px 20px"></p></div>
        <a class="level__course" href="/courses/la-penultima-voluntad/"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/home/courses/spanish5.jpg" alt="" loading="lazy"><span><span class="h"><i>La penúltima voluntad</i></span><span class="media__text">Challenge yourself with a story written for advanced learners</span></span></a>
      </div>
    </div>
  </div>
</section>

<!-- COFFEE BREAK TV, Spanish -->
<section class="section section--band section--tv" id="tv">
  <div class="wrap">
    <div class="section-head" style="margin-bottom:32px">
      <div style="flex:1 1 560px">
        <img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbtv-logo.png" alt="Coffee Break TV" style="height:48px;width:auto;margin-bottom:18px">
        <h2 style="font-size:32px;margin-bottom:10px">Coffee Break Spanish TV,<br>our on-demand video library</h2>
        <p class="lede" style="font-size:19px;max-width:56ch">Coffee Break Spanish TV has hundreds of video lessons for intermediate learners, from grammar and expressions to translation challenges and live streams from the team. You can watch them on your phone, computer, tablet or TV.</p>
      </div>
      <div class="price">
        <p><strong class="big" data-cbtv-price>From $24.99 a month</strong></p>
        <a class="btn" href="https://coffeebreaktv.com/join">Join Coffee Break Spanish TV</a>
      </div>
    </div>
    <p class="kicker" style="font-size:14px">On Coffee Break Spanish TV this week</p>
    <div class="grid grid--4" data-feed="featured" data-feed-lang="es" data-feed-limit="4">
<!-- feed:fallback:featured:start -->
<a class="media" href="https://coffeebreaktv.com/programs/02429-spa-con-wtl-final-f87a92" target="_blank" rel="noopener"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://alpha.uscreencdn.com/images/programs/2918766/horizontal/67aa7392-714b-4ec4-8da7-951d9649bac1.png" alt="" loading="lazy"><span class="tag">Members</span></span><span class="meta">Tue 13th Oct · Spanish</span><span class="media__title">Walk, talk and learn: Es posible que sea el mejor momento del día</span></a>
<a class="media" href="https://coffeebreaktv.com/programs/02811-spa-con-sip-final-ea5bbd" target="_blank" rel="noopener"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://alpha.uscreencdn.com/images/programs/2925437/horizontal/e960816c-1ea3-4653-a852-8871ca4f9a0a.jpg" alt="" loading="lazy"><span class="tag">Members</span></span><span class="meta">Mon 12th Oct · Spanish</span><span class="media__title">SIP: The present subjunctive</span></a>
<a class="media" href="https://coffeebreaktv.com/programs/03141-spa-abc-verb-lab-final-ed178a" target="_blank" rel="noopener"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://alpha.uscreencdn.com/images/programs/3415527/horizontal/38af9235-7e57-4ab8-9e94-4ede787c5fb0.png" alt="" loading="lazy"><span class="tag">Members</span></span><span class="meta">Sun 11th Oct · Spanish</span><span class="media__title">Verb Lab: estar</span></a>
<a class="media" href="https://coffeebreaktv.com/programs/02828-spa-pab-5min-final-f88b6b" target="_blank" rel="noopener"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://alpha.uscreencdn.com/images/programs/2993711/horizontal/e9407339-b86b-44d8-9f4b-96b873827a0e.png" alt="" loading="lazy"><span class="tag">Members</span></span><span class="meta">Sat 10th Oct · Spanish</span><span class="media__title">Dictation #010</span></a>
<!-- feed:fallback:featured:end -->
</div>
  </div>
</section>

<!-- SPANISH LEARNER -->
<section class="section section--tight">
  <div class="wrap" style="max-width:980px">
    <figure class="quote">
      <blockquote><p>“The lessons are well constructed and easy to follow. I have listened to series 1 and 2 and just finished the Masterclass. All are well paced and full of useful information, in addition to teaching the language. I have bought season 3 which I am just about to start.”</p></blockquote>
      <figcaption>Lesley C., Spanish learner</figcaption>
    </figure>
  </div>
</section>

<!-- FREE SPANISH RESOURCES: YouTube lessons (live when there are four long-form) and popular lesson posts -->
<section class="section section--white" id="free">
  <div class="wrap">
    <div class="section-head">
      <div style="flex:1 1 560px"><h2>Free Spanish resources</h2><p class="lede" style="font-size:19px">Watch our free Spanish video lessons on YouTube, or start with some of the most popular lessons on our site.</p></div>
    </div>
    <div class="section-head" style="margin-bottom:18px"><h3>On YouTube</h3><a class="link" href="https://www.youtube.com/@coffeebreakspanish">Coffee Break Spanish on YouTube</a></div>
    <div class="grid grid--4" data-feed="river" data-feed-card="media" data-feed-lang="es" data-feed-source="youtube" data-feed-per="10" data-feed-shuffle="false" data-feed-limit="4" data-feed-min="4" data-feed-exclude="Treasure Hunt">
<!-- feed:fallback:river:start -->
<a class="media" href="https://www.youtube.com/watch?v=_UHOYqWeeKs" target="_blank" rel="noopener"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://i.ytimg.com/vi/_UHOYqWeeKs/hqdefault.jpg" alt="" loading="lazy"></span><span class="meta">Coffee Break Spanish</span><span class="media__title">10 Spanish Phrases That Use a Different Verb From English</span></a>
<a class="media" href="https://www.youtube.com/watch?v=Uv8024UlOwo" target="_blank" rel="noopener"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://i.ytimg.com/vi/Uv8024UlOwo/hqdefault.jpg" alt="" loading="lazy"></span><span class="meta">Coffee Break Spanish</span><span class="media__title">5 Spanish Idioms Anyone Can Start Using Today</span></a>
<a class="media" href="https://www.youtube.com/watch?v=B-JfFeDJ8aY" target="_blank" rel="noopener"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://i.ytimg.com/vi/B-JfFeDJ8aY/hqdefault.jpg" alt="" loading="lazy"></span><span class="meta">Coffee Break Spanish</span><span class="media__title">3 Ways to Say “Maybe” in Spanish (Without the Subjunctive)</span></a>
<a class="media" href="https://www.youtube.com/watch?v=1-eKXKH4nWU" target="_blank" rel="noopener"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://i.ytimg.com/vi/1-eKXKH4nWU/hqdefault.jpg" alt="" loading="lazy"></span><span class="meta">Coffee Break Spanish</span><span class="media__title">Football in Spanish: The Vocabulary You Need to Follow the Game</span></a>
<!-- feed:fallback:river:end -->
</div>
    <div class="section-head" style="margin:56px 0 18px"><h3>Popular Spanish lessons</h3><a class="link" href="https://coffeebreaklanguages.com/category/spanish/">All Spanish lessons</a></div>
    <div class="grid grid--4">
      <a class="media" href="https://coffeebreaklanguages.com/2023/11/when-to-use-ser-and-estar-in-spanish/"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://coffeebreaklanguages.com/wp-content/uploads/2023/11/cbs-show-107-featured.png" alt="" loading="lazy"></span><span class="meta">Grammar</span><span class="media__title">When to use <i>ser</i> and <i>estar</i></span></a>
      <a class="media" href="https://coffeebreaklanguages.com/2024/06/por-vs-para-in-spanish-how-to-translate-for/"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://coffeebreaklanguages.com/wp-content/uploads/2024/06/cbs-show-204-featured.png" alt="" loading="lazy"></span><span class="meta">Grammar</span><span class="media__title"><i>Por</i> vs <i>para</i>: how to translate “for”</span></a>
      <a class="media" href="https://coffeebreaklanguages.com/2024/07/the-subjunctive-in-spanish-all-you-need-to-know-to-start-using-it/"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://coffeebreaklanguages.com/wp-content/uploads/2024/07/cbs-show-208-featured.png" alt="" loading="lazy"></span><span class="meta">Grammar</span><span class="media__title">The subjunctive in Spanish: where to start</span></a>
      <a class="media" href="https://coffeebreaklanguages.com/2024/06/how-to-pronounce-the-letter-j-in-spanish/"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://coffeebreaklanguages.com/wp-content/uploads/2024/06/cbs-show-205-featured-1.png" alt="" loading="lazy"></span><span class="meta">Pronunciation</span><span class="media__title">How to pronounce the letter “j”</span></a>
      <a class="media" href="https://coffeebreaklanguages.com/2023/11/how-to-use-me-gusta-in-spanish/"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://coffeebreaklanguages.com/wp-content/uploads/2023/11/cbs-show-103-featured.png" alt="" loading="lazy"></span><span class="meta">Grammar</span><span class="media__title">How to use <i>me gusta</i></span></a>
      <a class="media" href="https://coffeebreaklanguages.com/2024/06/essential-spanish-expressions-with-tener/"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://coffeebreaklanguages.com/wp-content/uploads/2024/06/cbs-show-202-featured-1.png" alt="" loading="lazy"></span><span class="meta">Vocabulary</span><span class="media__title">Essential expressions with <i>tener</i></span></a>
      <a class="media" href="https://coffeebreaklanguages.com/2024/06/ways-to-express-obligation-in-spanish-deber-tener-que-and-hay-que/"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://coffeebreaklanguages.com/wp-content/uploads/2024/06/cbs-show-203-featured-1.png" alt="" loading="lazy"></span><span class="meta">Grammar</span><span class="media__title">Obligation: <i>deber</i>, <i>tener que</i> and <i>hay que</i></span></a>
      <a class="media" href="https://coffeebreaklanguages.com/2024/07/how-to-order-a-coffee-in-spanish-the-basics/"><span class="media__pic"><img class="no-lazyload skip-lazy" src="https://coffeebreaklanguages.com/wp-content/uploads/2024/07/cbs-show-207-featured-1.png" alt="" loading="lazy"></span><span class="meta">Culture</span><span class="media__title">How to order a coffee in Spanish</span></a>
    </div>

  </div>
</section>

<!-- SPANISH LEARNER: onwards through the levels -->
<section class="section section--tight">
  <div class="wrap" style="max-width:980px">
    <figure class="quote">
      <blockquote><p>“Thank you, I couldn't have been happier with this course and I have already bought Season 2 and Season 3 and look forward to each.”</p></blockquote>
      <figcaption>Scotty M., Spanish learner</figcaption>
    </figure>
  </div>
</section>

<!-- PRACTISE: Marta and the book -->
<section class="section section--white" id="practise">
  <div class="wrap grid grid--2 practise">
    <div class="practise__item">
      <img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/chat-marta.jpg" alt="Marta, our AI conversation partner" loading="lazy">
      <div>
        <p class="kicker">Practise between lessons</p>
        <h3>Chat in Spanish with Marta</h3>
        <p>Marta is our AI chatbot, built on the way we teach at Coffee Break. She’s available 24/7 to help you with your Spanish, answer questions about the language, and correct your mistakes as you go.</p>
        <a class="btn" href="/aitutors/marta/">Chat with Marta</a>
      </div>
    </div>
    <div class="practise__item">
      <img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/book-es.jpg" alt="50 Spanish Coffee Breaks book cover" loading="lazy">
      <div>
        <p class="kicker">The book</p>
        <h3>50 Spanish Coffee Breaks</h3>
        <p>The book has 50 short Spanish activities that fit around your day, 5, 10 or 15 minutes at a time. It’s for learners at A2 to B1 level, in paperback and ebook.</p>
        <a class="btn btn--band" href="https://coffeebreaklanguages.com/books/">Get the book</a>
      </div>
    </div>
  </div>
</section>

<!-- VIP COACHING: register interest only (Mark, 15 Oct 2026). Copy from the VIP brochure; no price, no presenter names. -->
<section class="vip" id="vip-coaching" aria-labelledby="vip-h">
  <div class="wrap vip__inner">
    <span class="vip__logo"><img class="no-lazyload skip-lazy" src="/wp-content/uploads/cbl-coded/img/cbs.png" alt="" width="72" height="72"></span>
    <p class="vip__k">VIP Coaching · Limited places</p>
    <h2 id="vip-h">Work through a Coffee Break Spanish course with your own personal coach</h2>
    <p class="vip__text">Our coaching programme gives you 12 weeks of private lessons with an experienced Coffee Break coach, matched to your goals and timezone. You’ll have two 45-minute sessions each week.</p>
    <p class="vip__text">Your coach keeps you on track and adjusts the pace to suit you, so each lesson turns into Spanish you can use.</p>
    <form class="vip__form" action="https://app.kit.com/forms/8666850/subscriptions" method="post" data-nosignup>
      <!-- Kit tag: VIP Spanish Interest WEB-26Q4. Change the quarter each January/April/July/October (e.g. WEB-27Q1). -->
      <input type="hidden" name="tags[]" value="24734548">
      <label class="sr-only" for="vip-email">Email address</label>
      <input class="field" id="vip-email" type="email" name="email_address" placeholder="Your email address" required autocomplete="email">
      <button class="btn" type="submit">Tell me about the next intake</button>
    </form>
    <p class="vip__small">VIP Coaching runs in intakes, with a small number of places each time. Leave your email and we’ll let you know when the next one opens. There’s no commitment.</p>
  </div>
</section>

</main>

<footer class="site-footer">
  <div class="wrap">
    <div class="cols">
      <div><strong>Languages</strong><a href="/coffeebreakfrench/">French</a><a href="/coffeebreakspanish/">Spanish</a><a href="/coffeebreakitalian/">Italian</a><a href="/coffeebreakgerman/">German</a><a href="/english/">English</a><a href="/#languages">All languages</a></div>
      <div><strong>Free series</strong><a href="/ontrack/">On Track</a><a href="https://www.youtube.com/@languageadventurescb">Language Adventures</a><a href="/youtube/">Coffee Break on YouTube</a><a href="/#languages">The podcasts</a></div>
      <div><strong>Learn with us</strong><a href="/#courses">Courses</a><a href="/coffee-break-tv/">Coffee Break TV</a><a href="/books/">Books</a><a href="#signup">Free lessons by email</a></div>
      <div><strong>Coffee Break Languages</strong><a href="/about/">About us</a><a href="/meet-the-team/">Meet the team</a><a href="/contactus/">Contact</a><a href="https://intercom.help/coffeebreaklanguages/en">Help</a></div>
    </div>
    <div class="legal">
      <span>© 2006–2026 Radio Lingua Ltd · Coffee Break Languages</span>
      <nav aria-label="Legal and social"><a href="https://coffeebreaklanguages.com/about/privacy-policy/">Privacy</a><a href="https://coffeebreaklanguages.com/about/cookie-policy/">Cookies</a><a href="https://youtube.com/coffeebreaklanguages">YouTube</a><a href="https://instagram.com/coffeebreaklanguages">Instagram</a><a href="https://facebook.com/coffeebreaklanguages">Facebook</a></nav>
    </div>
  </div>
</footer>

<script>
/* Shared behaviour for pages on css/site.css: phone menu, dropdowns, tabs, hero
 * video pause. Declarative, so a page needs no script of its own. Everything works
 * without it too: links are real links and every tab panel is in the HTML. */
(function () {
  'use strict';
  var $$ = function (sel, root) { return [].slice.call((root || document).querySelectorAll(sel)); };

  // Phone menu
  $$('.menu-toggle').forEach(function (btn) {
    var nav = document.getElementById(btn.getAttribute('aria-controls'));
    if (!nav) return;
    btn.addEventListener('click', function () {
      var open = nav.classList.toggle('open');
      btn.setAttribute('aria-expanded', open ? 'true' : 'false');
    });
  });

  // Dropdowns (Languages, Log in)
  $$('.navdrop').forEach(function (drop) {
    var btn = drop.querySelector('button');
    btn.addEventListener('click', function (e) {
      e.stopPropagation();
      var open = drop.classList.toggle('open');
      btn.setAttribute('aria-expanded', open ? 'true' : 'false');
    });
  });
  document.addEventListener('click', function () {
    $$('.navdrop.open').forEach(function (d) {
      d.classList.remove('open');
      d.querySelector('button').setAttribute('aria-expanded', 'false');
    });
  });
  document.addEventListener('keydown', function (e) {
    if (e.key === 'Escape') document.dispatchEvent(new Event('click'));
  });

  // data-shuffle: random order on each visit, so no language is always first. The HTML
  // keeps the fixed order (what search engines and no-script visitors get).
  $$('[data-shuffle]').forEach(function (box) {
    var kids = [].slice.call(box.children);
    for (var i = kids.length - 1; i > 0; i--) {
      var j = Math.floor(Math.random() * (i + 1)); var t = kids[i]; kids[i] = kids[j]; kids[j] = t;
    }
    kids.forEach(function (k) { box.appendChild(k); });
  });

  // Tabs: role="tablist" with buttons whose aria-controls name the panels
  $$('[role="tablist"]').forEach(function (list) {
    var tabs = $$('[role="tab"]', list);
    function pick(tab) {
      tabs.forEach(function (t) {
        var on = t === tab;
        t.setAttribute('aria-selected', on ? 'true' : 'false');
        t.tabIndex = on ? 0 : -1;
        var panel = document.getElementById(t.getAttribute('aria-controls'));
        if (panel) panel.hidden = !on;
      });
    }
    tabs.forEach(function (t, i) {
      t.tabIndex = t.getAttribute('aria-selected') === 'true' ? 0 : -1;
      t.addEventListener('click', function () { pick(t); });
      t.addEventListener('keydown', function (e) {
        var d = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0;
        if (!d) return;
        var next = tabs[(i + d + tabs.length) % tabs.length];
        pick(next); next.focus();
      });
    });
  });

  // Drift row: clone the items once (aria-hidden) so translateX(-50%) loops seamlessly,
  // and pace it at about 4 seconds per item whatever the count.
  $$('[data-drift]').forEach(function (river) {
    var track = river.querySelector('.drift__track');
    if (!track || track.getAttribute('data-cloned')) return;
    var items = [].slice.call(track.children);
    if (items.length < 2) return;
    items.forEach(function (el) {
      var c = el.cloneNode(true);
      c.setAttribute('aria-hidden', 'true');
      [].forEach.call(c.querySelectorAll('a,button'), function (a) { a.tabIndex = -1; });
      track.appendChild(c);
    });
    track.setAttribute('data-cloned', '1');
    track.style.setProperty('--drift-s', (items.length * 4) + 's');
    var btn = river.querySelector('[data-drift-pause]');
    if (btn) btn.addEventListener('click', function () {
      var paused = river.classList.toggle('paused');
      btn.setAttribute('aria-label', paused ? 'Play the moving row' : 'Pause the moving row');
      btn.innerHTML = paused
        ? '<svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M4 2l10 6-10 6z"/></svg>'
        : '<svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><rect x="3" y="2" width="3.5" height="12"/><rect x="9.5" y="2" width="3.5" height="12"/></svg>';
    });
  });

  // Hero and feature band slots (written by tools/build-slots.mjs from tools/data/slots.json).
  // Scheduling: when a page carries several versions, show the one live now, from its
  // data-start / data-end (UTC) and data-priority; data-draft is never live; nothing live ->
  // data-default (hero: else the first; band: else none, the band is off). The same rule as
  // pickLive in tools/slots-render.mjs. So a scheduled promo turns itself on and off with no
  // rebuild, and it works under the page cache. ?hero=<id> / ?band=<id> or the preview switcher
  // override it.
  var liveSlot = function (els, fallbackFirst) {
    var now = Date.now(), best = null, bp = 0, bs = 0;
    els.forEach(function (el) {
      var s = Date.parse(el.getAttribute('data-start') || '') || -Infinity;
      var e = Date.parse(el.getAttribute('data-end') || '') || Infinity;
      var p = +el.getAttribute('data-priority') || 0;
      if (el.hasAttribute('data-draft') || now < s || now >= e) return;
      if (!best || p > bp || (p === bp && s > bs)) { best = el; bp = p; bs = s; }
    });
    return best || els.filter(function (el) { return el.hasAttribute('data-default'); })[0] || (fallbackFirst ? els[0] : null);
  };
  var nameOf = function (el, kind) { return el ? el.getAttribute('data-' + kind + '-variant') : ''; };
  var remember = function (kind, name) {  // preview: keep the pick in the address bar
    try { var q = new URLSearchParams(location.search); q.set(kind, name); history.replaceState(null, '', '?' + q + location.hash); } catch (e) {}
  };
  var bar = document.querySelector('[data-promo-bar]');

  var variants = $$('[data-hero-variant]');
  if (variants.length) {
    var pickHero = function (name) {
      if (!variants.some(function (v) { return nameOf(v, 'hero') === name; })) name = nameOf(liveSlot(variants, true), 'hero');
      variants.forEach(function (v) {
        var on = nameOf(v, 'hero') === name;
        v.hidden = !on;
        var vid = v.querySelector('video');
        if (vid && variants.length > 1) { if (on) vid.play(); else vid.pause(); }
        if (on && bar) bar.hidden = !v.hasAttribute('data-show-bar');  // a promo hero brings its bar
      });
      $$('[data-hero-pick]').forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-hero-pick') === name ? 'true' : 'false'); });
      window.dispatchEvent(new Event('resize'));  // the face line measures the now-visible hero
    };
    $$('[data-hero-pick]').forEach(function (b) { b.addEventListener('click', function () { var n = b.getAttribute('data-hero-pick'); pickHero(n); remember('hero', n); }); });
    pickHero(new URLSearchParams(location.search).get('hero'));
  }

  var bands = $$('[data-band-variant]');
  if (bands.length) {
    var pickBand = function (name) {
      if (!bands.some(function (b) { return nameOf(b, 'band') === name; })) name = nameOf(liveSlot(bands, false), 'band');
      bands.forEach(function (b) { b.hidden = nameOf(b, 'band') !== name; });
      $$('[data-band-pick]').forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-band-pick') === name ? 'true' : 'false'); });
    };
    $$('[data-band-pick]').forEach(function (b) { b.addEventListener('click', function () { var n = b.getAttribute('data-band-pick'); pickBand(n); remember('band', n); }); });
    pickBand(new URLSearchParams(location.search).get('band'));
  }

  // Sticky header over a hero: solid band colour once the page has scrolled, or from the start
  // if the hero asks for it (data-header="solid", e.g. a light promo colour). Over a hero with
  // no picture the dark fade is dropped (.is-clear).
  $$('[data-header].site-header--over').forEach(function (header) {
    function set() {
      var hero = $$('.hero').filter(function (h) { return !h.hidden; })[0];
      var solid = hero && hero.getAttribute('data-header') === 'solid';
      header.classList.toggle('is-solid', solid || window.scrollY > 40);
      header.classList.toggle('is-clear', !!hero && !hero.querySelector('.hero__media'));
    }
    set();
    window.addEventListener('scroll', set, { passive: true });
    window.addEventListener('resize', set);  // the hero switcher fires this after a change
  });

  // Face line: keep heads just below the nav. For a cover-fitted picture of natural size
  // w x h in a box W x H, work out where the head line lands and crop (object-position) or,
  // when there isn't enough sky above the heads, drop the picture down and shorten it.
  // LINE: where the tops of heads should land, just under the nav's text. The lower part of
  // the nav's fade may overlap hair; faces stay clear.
  var NAV = 60, GAP = 0;
  $$('.hero__media[data-face-top]').forEach(function (media) {
    var hero = media.closest('.hero');
    var face = parseFloat(media.getAttribute('data-face-top'));
    function natural() {
      return {
        w: media.videoWidth || media.naturalWidth || +media.getAttribute('data-w'),
        h: media.videoHeight || media.naturalHeight || +media.getAttribute('data-h')
      };
    }
    function place() {
      var n = natural(); if (!n.w || !n.h) return;
      var W = hero.clientWidth, H = hero.clientHeight, top = 0, boxH = H, s, rh, crop;
      for (var i = 0; i < 3; i++) {           // dropping the picture changes the fit; settle it
        s = Math.max(W / n.w, boxH / n.h); rh = n.h * s;
        crop = face * rh - (NAV + GAP - top);  // pixels to cut off the top
        if (crop >= 0 || top >= NAV + GAP) break;
        top = Math.min(NAV + GAP, top - crop); boxH = H - top;
      }
      crop = Math.max(0, Math.min(crop, rh - boxH));
      media.style.top = top + 'px';
      media.classList.toggle('dropped', top > 0);
      media.style.height = boxH + 'px';
      media.style.objectPosition = '50% ' + (rh > boxH ? (crop / (rh - boxH)) * 100 : 50) + '%';
    }
    place();
    media.addEventListener('loadedmetadata', place);
    media.addEventListener('load', place);
    window.addEventListener('resize', place);
  });

  // The visitor's country and currency, asked once per page (netlify/functions/geo.mjs)
  var geoPromise = null;
  function geo() {
    if (!geoPromise) {
      geoPromise = fetch('https://cbl-rebuild.netlify.app/.netlify/functions/geo', { cache: 'no-store' })
        .then(function (r) { return r.ok ? r.json() : null; })
        .catch(function () { return null; });
    }
    return geoPromise;
  }

  // CBTV price in the visitor's currency: <span data-cbtv-price>From $24.99 a month</span>.
  // One-language monthly price, from Mark's table of Uscreen's localised pricing (16 Sep 2026),
  // the same as LOCAL_PRICES in projects/current/cbtv-home-page/site/netlify/functions/_shared.mjs.
  // Change both if the Uscreen prices change. The page ships with USD, so it's never blank.
  var CBTV_FROM = { USD: '$24.99', GBP: '£19', EUR: '€21', AUD: 'A$38', CAD: 'C$35' };
  var priced = $$('[data-cbtv-price]');
  if (priced.length) {
    var show = function (ccy) {
      var p = CBTV_FROM[ccy] || CBTV_FROM.USD;
      priced.forEach(function (el) { el.textContent = 'From ' + p + ' a month'; });
    };
    var guess = function () {
      // Fallback when the geo call fails: the browser's locale and time zone
      var loc = (navigator.language || '').toUpperCase(), tz = '';
      try { tz = Intl.DateTimeFormat().resolvedOptions().timeZone || ''; } catch (e) {}
      if (/-GB$/.test(loc) || tz === 'Europe/London') return 'GBP';
      if (/-AU$/.test(loc) || /^Australia\//.test(tz)) return 'AUD';
      if (/-CA$/.test(loc) || /^America\/(Toronto|Vancouver|Edmonton|Winnipeg|Halifax|St_Johns|Regina)/.test(tz)) return 'CAD';
      if (/^Europe\//.test(tz)) return 'EUR';
      return 'USD';
    };
    geo().then(function (d) { show(d && d.currency ? d.currency : guess()); });
  }

  // Course prices: pounds in the UK, dollars everywhere else (Mark, 15 Oct 2026). The page ships
  // with the dollar price as text and the pound price in data-gbp: <span data-gbp="£99">$129</span>.
  var gbpPrices = $$('[data-gbp]');
  if (gbpPrices.length) {
    var ukGuess = function () {
      var loc = (navigator.language || '').toUpperCase(), tz = '';
      try { tz = Intl.DateTimeFormat().resolvedOptions().timeZone || ''; } catch (e) {}
      return /-GB$/.test(loc) || tz === 'Europe/London';
    };
    geo().then(function (d) {
      var uk = d && d.country ? d.country === 'GB' : ukGuess();
      if (uk) gbpPrices.forEach(function (el) { el.textContent = el.getAttribute('data-gbp'); });
    });
  }

  // Amazon links in the visitor's own store: <a data-amazon="ISBN-10"> (for books the ISBN-10 is
  // the product number in every Amazon store). The href ships as amazon.com for no-script visitors.
  // The UK store carries our Associates tag; add a store's tag here when there is one.
  var STORES = {
    GB: 'amazon.co.uk', IE: 'amazon.co.uk', US: 'amazon.com', CA: 'amazon.ca', AU: 'amazon.com.au',
    DE: 'amazon.de', AT: 'amazon.de', CH: 'amazon.de', FR: 'amazon.fr', BE: 'amazon.fr', LU: 'amazon.fr',
    IT: 'amazon.it', ES: 'amazon.es', NL: 'amazon.nl', SE: 'amazon.se', PL: 'amazon.pl', JP: 'amazon.co.jp',
    MX: 'amazon.com.mx', BR: 'amazon.com.br', IN: 'amazon.in', SG: 'amazon.sg', AE: 'amazon.ae', SA: 'amazon.sa', TR: 'amazon.com.tr'
  };
  var TAGS = { 'amazon.co.uk': 'coffeebreak10-21' };
  var amazon = $$('[data-amazon]');
  if (amazon.length) {
    geo().then(function (d) {
      var store = STORES[(d && d.country) || ''] || 'amazon.com';
      amazon.forEach(function (a) {
        a.href = 'https://www.' + store + '/dp/' + a.getAttribute('data-amazon') + (TAGS[store] ? '?tag=' + TAGS[store] : '');
      });
    });
  }

  // Parts bar on level pages: mark the part being read
  var partLinks = $$('.subnav--parts a[href^="#part-"]');
  if (partLinks.length && 'IntersectionObserver' in window) {
    var io = new IntersectionObserver(function (es) {
      es.forEach(function (e) {
        if (!e.isIntersecting) return;
        partLinks.forEach(function (a) { a.setAttribute('aria-current', a.getAttribute('href') === '#' + e.target.id ? 'true' : 'false'); });
      });
    }, { rootMargin: '-30% 0px -60% 0px' });
    partLinks.forEach(function (a) { var t = document.querySelector(a.getAttribute('href')); if (t) io.observe(t); });
  }

  // Memory wall (tools/memory-wall.py): one of data-walls strips at random per visit, phones get
  // the -sm file. Two copies side by side so translateX(-50%) loops. Paced at about 30px a
  // second whatever the width, faded in once loaded so the words come first.
  $$('[data-wall]').forEach(function (wall) {
    var track = wall.querySelector('.memwall__track');
    var count = parseInt(wall.getAttribute('data-walls'), 10) || 1;
    var img;
    function pace() { if (img && img.clientWidth) wall.style.setProperty('--wall-s', Math.round(img.clientWidth / 30) + 's'); }
    function ready() { pace(); wall.classList.add('ready'); }
    // show(n): which wall (1..count). Fades out, swaps, fades back in once the new one loads.
    wall.cblShow = function (n) {
      wall.classList.remove('ready');
      var base = (wall.getAttribute('data-wall-src') || '').replace('{n}', n);
      var pic = '<picture><source media="(max-width:900px)" srcset="' + base + '-sm.webp"><img class="no-lazyload skip-lazy" src="' + base + '.webp" alt="" fetchpriority="low" decoding="async"></picture>';
      track.innerHTML = '<span class="memwall__copy">' + pic + '</span><span class="memwall__copy">' + pic + '</span>';
      wall.setAttribute('data-wall-n', n);
      img = track.querySelector('img');
      if (img.complete && img.naturalWidth) ready(); else img.addEventListener('load', ready);
    };
    var asked = parseInt((location.search.match(/[?&]wall=(\d+)/) || [])[1], 10);
    wall.cblShow(asked >= 1 && asked <= count ? asked : 1 + Math.floor(Math.random() * count));
    // "Load more memories": a different wall each click, working through all of them in a
    // random order before any comes round again.
    var queue = [];
    var more = wall.parentNode.querySelector('[data-wall-more]');
    if (more && count < 2) more.hidden = true;
    if (more) more.addEventListener('click', function () {
      var cur = parseInt(wall.getAttribute('data-wall-n'), 10);
      if (!queue.length) {
        for (var i = 1; i <= count; i++) if (i !== cur) queue.push(i);
        for (var j = queue.length - 1; j > 0; j--) { var k = Math.floor(Math.random() * (j + 1)); var t = queue[j]; queue[j] = queue[k]; queue[k] = t; }
      }
      var next = queue.shift();
      if (next === cur && queue.length) next = queue.shift();
      setTimeout(function () { wall.cblShow(next); }, 250);
    });
    window.addEventListener('resize', pace);
    var btn = wall.parentNode.querySelector('[data-wall-pause]');
    if (btn) btn.addEventListener('click', function () {
      var paused = wall.classList.toggle('paused');
      btn.setAttribute('aria-label', paused ? 'Play the moving photos' : 'Pause the moving photos');
      btn.innerHTML = paused
        ? '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M4 2l10 6-10 6z"/></svg>'
        : '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><rect x="3" y="2" width="3.5" height="12"/><rect x="9.5" y="2" width="3.5" height="12"/></svg>';
    });
  });

  // Hero video: pause button, and no autoplay for people who ask for less motion
  $$('.hero').forEach(function (hero) {
    var video = hero.querySelector('video');
    var btn = hero.querySelector('[data-pause]');
    if (!video) return;
    var PAUSE = '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><rect x="3" y="2" width="3.5" height="12"/><rect x="9.5" y="2" width="3.5" height="12"/></svg>';
    var PLAY = '<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M4 2l10 6-10 6z"/></svg>';
    function show(paused) {
      if (!btn) return;
      btn.innerHTML = paused ? PLAY : PAUSE;
      btn.setAttribute('aria-label', paused ? 'Play video' : 'Pause video');
    }
    if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
      video.removeAttribute('autoplay'); video.pause(); show(true);
    }
    if (btn) btn.addEventListener('click', function () {
      if (video.paused) { video.play(); show(false); } else { video.pause(); show(true); }
    });
  });
})();

/* Signups. Takes over the email forms: sends them to our endpoint in WordPress
   (cbl/v1/subscribe), which writes the tags and fields in Kit, then asks the level question in place.
   Without JavaScript the forms still post to the Kit form as before.
   Spec: projects/current/funnel-architecture/lead-capture-spec.md */
(function () {
  var TAG_LANG = { 7453439: 'french', 7455964: 'italian', 7454028: 'german', 7455967: 'spanish', 7455969: 'english',
    7455980: 'swedish', 7455971: 'portuguese', 7455973: 'gaelic', 7455977: 'chinese', 7454011: 'japanese' };
  var NAME = { french: 'French', italian: 'Italian', german: 'German', spanish: 'Spanish', english: 'English',
    swedish: 'Swedish', portuguese: 'Portuguese', gaelic: 'Gaelic', chinese: 'Chinese', japanese: 'Japanese' };
  var LEVELS = [
    ['0', 'Beginner', "I'm starting out, or nearly"],
    ['1', 'Upper beginner', 'I know the basics'],
    ['2', 'Lower intermediate', 'I can manage simple conversations'],
    ['3', 'Upper intermediate', 'I can talk about most everyday things'],
    ['4', 'Advanced', "I'm comfortable and want to polish it"]
  ];
  var ON_SITE = /(^|\.)coffeebreaklanguages\.com$/.test(location.hostname);
  var API = (ON_SITE ? '' : 'https://coffeebreaklanguages.com') + '/wp-json/cbl/v1/';

  function store(k, v) { try { if (v === undefined) return localStorage.getItem(k); localStorage.setItem(k, v); } catch (e) { return null; } }
  function track(name, props) { if (typeof window.plausible === 'function') window.plausible(name, { props: props }); }
  function el(tag, cls, text) { var n = document.createElement(tag); if (cls) n.className = cls; if (text) n.textContent = text; return n; }

  /* First visit: where did they come from? Saved once, for 90 days, in a first-party cookie. */
  function readFirst() {
    var m = document.cookie.match(/(?:^|; )cbl_ft=([^;]*)/);
    if (!m) return null;
    try { return JSON.parse(decodeURIComponent(m[1])); } catch (e) { return null; }
  }
  function classify(host) {
    if (!host) return ['direct', 'none'];
    var rules = [
      [/(^|\.)google\./, 'google', 'organic'], [/(^|\.)bing\.com$/, 'bing', 'organic'], [/duckduckgo\.com$/, 'duckduckgo', 'organic'],
      [/(^|\.)yahoo\./, 'yahoo', 'organic'], [/ecosia\.org$/, 'ecosia', 'organic'], [/(^|\.)baidu\.com$/, 'baidu', 'organic'],
      [/(^|\.)(youtube\.com|youtu\.be)$/, 'youtube', 'social'], [/(^|\.)facebook\.com$|^fb\.me$/, 'facebook', 'social'],
      [/(^|\.)instagram\.com$/, 'instagram', 'social'], [/^(t\.co|x\.com|twitter\.com)$/, 'x', 'social'],
      [/(^|\.)linkedin\.com$/, 'linkedin', 'social'], [/(^|\.)reddit\.com$/, 'reddit', 'social'],
      [/(^|\.)pinterest\./, 'pinterest', 'social'], [/(^|\.)tiktok\.com$/, 'tiktok', 'social'],
      [/^(mail\.google\.com|outlook\.live\.com|mail\.yahoo\.com)$/, 'webmail', 'email']
    ];
    for (var i = 0; i < rules.length; i++) if (rules[i][0].test(host)) return [rules[i][1], rules[i][2]];
    return [host, 'referral'];
  }
  var first = readFirst();
  if (!first) {
    var q = new URLSearchParams(location.search);
    var host = '';
    try { host = document.referrer ? new URL(document.referrer).hostname.replace(/^www\./, '') : ''; } catch (e) {}
    if (host === location.hostname.replace(/^www\./, '')) host = '';
    var guess = classify(host);
    first = { s: q.get('utm_source') || guess[0], m: q.get('utm_medium') || (q.get('utm_source') ? '' : guess[1]),
      c: q.get('utm_campaign') || '', l: location.pathname };
    document.cookie = 'cbl_ft=' + encodeURIComponent(JSON.stringify(first)) + '; max-age=' + 90 * 86400 +
      '; path=/; SameSite=Lax' + (location.protocol === 'https:' ? '; Secure' : '');
  }

  function post(path, data) {
    return fetch(API + path, { method: 'POST', body: new URLSearchParams(data) })
      .then(function (r) { return r.json().then(function (j) { return { ok: r.ok, data: j }; }, function () { return { ok: false, data: {} }; }); });
  }

  function formLanguage(form) {
    if (form.dataset.language) return form.dataset.language;
    var f = form.querySelector('[name="tags[]"]');
    return f ? TAG_LANG[f.value] || '' : '';
  }
  function formName(form) {
    if (form.dataset.form) return form.dataset.form;
    if (form.closest('.signup-overlay')) return 'overlay';
    if (form.closest('.signup-end')) return 'end';
    if (form.closest('.postnav, main > section:last-of-type')) return 'post-end';
    return 'inline';
  }

  function levelQuestion(box, lang, token) {
    var wrap = el('div', 'signup-levels');
    wrap.appendChild(el('p', 'signup-levels__q', 'One quick question: where are you with ' + NAME[lang] + ' right now?'));
    LEVELS.forEach(function (lv) {
      var b = el('button', 'signup-level');
      b.type = 'button';
      b.appendChild(el('span', 'signup-level__name', lv[1]));
      b.appendChild(el('span', 'signup-level__hint', lv[2]));
      b.addEventListener('click', function () {
        wrap.querySelectorAll('button').forEach(function (x) { x.disabled = true; });
        post('level', { t: token, lang: lang, band: lv[0] }).then(function (r) {
          wrap.innerHTML = '';
          wrap.appendChild(el('p', 'signup-done__line', r.ok ? 'Thanks, that helps us send you the right things.' : "Sorry, we couldn't save that just now. You can tell us later from your first email."));
          if (r.ok) track('Level set', { language: lang, level: lv[0] });
        }, function () {
          wrap.innerHTML = '';
          wrap.appendChild(el('p', 'signup-done__line', "Sorry, we couldn't save that just now. You can tell us later from your first email."));
        });
      });
      wrap.appendChild(b);
    });
    box.appendChild(wrap);
  }

  function done(form, lang, res) {
    var box = el('div', 'signup-done');
    box.setAttribute('role', 'status');
    box.appendChild(el('p', 'signup-done__h', 'Thank you, you’re signed up'));
    box.appendChild(el('p', 'signup-done__line', 'Keep an eye on your inbox. If nothing arrives, have a look in your spam or promotions folder.'));
    if (res.token && res.levels) levelQuestion(box, lang, res.token);
    var note = form.closest('.signup-overlay__note');
    if (note) {
      // Keep the postcard the same size so the photo doesn't grow; the note scrolls if it must.
      var card = note.parentNode;
      if (window.matchMedia('(min-width: 721px)').matches) card.style.height = card.offsetHeight + 'px';
      note.innerHTML = '';
      note.classList.add('is-done');
      note.appendChild(box);
    } else {
      form.replaceWith(box);
    }
    var seen = (store('cbl_signed_up') || '').split(',').filter(Boolean);
    if (seen.indexOf(lang) < 0) seen.push(lang);
    store('cbl_signed_up', seen.join(','));
  }

  function wire(form) {
    if (form.dataset.signupWired) return;
    form.dataset.signupWired = '1';
    // Honeypot: hidden from people, filled in by bots. Never name it like a real field ("website", "url",
    // "company"...) and never just move it off-screen: browsers autofill those, and every autofilled
    // person was silently dropped as a bot (18-23 Oct 2026). display:none fields aren't autofilled.
    var hp = el('input'); hp.type = 'text'; hp.name = 'cbl_hp'; hp.tabIndex = -1; hp.autocomplete = 'off';
    hp.className = 'signup-hp'; hp.style.display = 'none'; hp.setAttribute('aria-hidden', 'true');
    form.appendChild(hp);
    // First name: every welcome and Friday email opens with it. Kit's own form calls it fields[first_name],
    // so the no-JavaScript fallback keeps it too.
    if (!form.querySelector('[name="fields[first_name]"]')) {
      var em = form.querySelector('[type="email"]');
      var fn = el('input', 'field'); fn.type = 'text'; fn.name = 'fields[first_name]'; fn.required = true;
      fn.autocomplete = 'given-name'; fn.setAttribute('aria-label', 'First name');
      fn.placeholder = form.closest('.signup-overlay') ? 'Please enter your first name' : 'Your first name';
      if (em) em.parentNode.insertBefore(fn, em);
    }
    var msg = el('p', 'signup-error'); msg.setAttribute('role', 'alert'); msg.hidden = true;
    form.appendChild(msg);

    form.addEventListener('submit', function (ev) {
      var lang = formLanguage(form);
      if (!lang) return; // not a form we know: let it post to Kit as before
      ev.preventDefault();
      var btn = form.querySelector('[type="submit"]');
      var label = btn ? btn.textContent : '';
      if (btn) { btn.disabled = true; btn.textContent = 'Sending…'; }
      msg.hidden = true;
      var nameField = form.querySelector('[name="fields[first_name]"]');
      var data = {
        email: form.querySelector('[type="email"]').value, language: lang, form: formName(form),
        page: location.pathname, source: first.s, medium: first.m, campaign: first.c, landing: first.l,
        website: hp.value
      };
      if (nameField) data.first_name = nameField.value;
      post('subscribe', data).then(function (r) {
        if (r.ok && r.data.ok) {
          track('Signup', { language: lang, form: data.form });
          done(form, lang, r.data);
        } else {
          msg.textContent = (r.data && r.data.message) || 'Sorry, something went wrong. Please try again.';
          msg.hidden = false;
          if (btn) { btn.disabled = false; btn.textContent = label; }
        }
      }, function () {
        // Our endpoint is unreachable: fall back to the Kit form so the signup isn't lost.
        if (form.querySelector('[name="tags[]"]')) { form.submit(); return; }
        msg.textContent = 'Sorry, something went wrong. Please try again.';
        msg.hidden = false;
        if (btn) { btn.disabled = false; btn.textContent = label; }
      });
    });
  }

  // data-nosignup: a plain Kit form we leave alone (the VIP coaching interest form on the hubs: email only, its own tags)
  document.querySelectorAll('form[action*="app.kit.com/forms"]:not([data-nosignup]), form[data-signup]').forEach(wire);

  // OptinMonster campaigns (full-screen, popups) go straight to Kit, never through wire(), so count them here
  // under the same Signup goal, form "optinmonster". OM fires om.Optin.success on the document.
  document.addEventListener('om.Optin.success', function (ev) {
    var c = (ev.detail && (ev.detail.Campaign || ev.detail.campaign)) || {};
    var m = location.pathname.match(/coffeebreak(french|spanish|italian|german|english|swedish|chinese|portuguese|gaelic|japanese)|\/tag\/cb(f|s|i|g)-/);
    var lang = m ? (m[1] || { f: 'french', s: 'spanish', i: 'italian', g: 'german' }[m[2]]) : 'none';
    track('Signup', { language: lang, form: 'optinmonster',
      campaign: String(c.name || c.id || 'unknown'), type: String(c.type || 'unknown') });
  });

  /* After a level link in an email: /coffeebreakfrench/?level=saved (or =failed) */
  var levelOutcome = new URLSearchParams(location.search).get('level');
  if (levelOutcome === 'saved' || levelOutcome === 'failed') {
    var note = el('p', 'signup-notice' + (levelOutcome === 'failed' ? ' signup-notice--soft' : ''),
      levelOutcome === 'saved' ? 'Thanks, we\u2019ve saved your level.' : 'Sorry, we couldn\u2019t save that just now. Please try the link in your email again later.');
    note.setAttribute('role', 'status');
    var main = document.querySelector('main') || document.body;
    main.insertBefore(note, main.firstChild);
  }

  /* Anyone arriving from one of our emails is already on the list: never show them the overlay. */
  var landedFrom = new URLSearchParams(location.search);
  if (landedFrom.get('utm_source') === 'kit' || landedFrom.get('utm_medium') === 'email' || first.s === 'kit' || first.m === 'email') {
    if (!store('cbl_signed_up')) store('cbl_signed_up', 'email');
  }

  /* Overlay: the replacement for the OptinMonster full-screen popups. Off unless the page asks for it
     (<body data-signup-overlay>) or the preview adds ?signup-overlay=1. Shows after 5 seconds or once the
     reader has scrolled a quarter of the page, whichever comes first. At most once every 14 days in a
     browser (closing it counts), and never again after a signup or a visit from one of our emails. */
  var wantOverlay = document.body.hasAttribute('data-signup-overlay') || /[?&]signup[-_]overlay=1\b/.test(location.search);
  var forceOverlay = /[?&]signup[-_]overlay=1\b/.test(location.search);
  var lastShown = +(store('cbl_overlay_at') || 0);
  if (wantOverlay && (forceOverlay || (!store('cbl_signed_up') && Date.now() - lastShown > 14 * 86400000))) {
    var shown = false;
    var pageLang = document.body.dataset.language || (function () {
      // Only a page about one language: its form carries a fixed hidden tag. A language menu doesn't count.
      var f = document.querySelector('form[action*="app.kit.com/forms"] input[type="hidden"][name="tags[]"]');
      return f ? TAG_LANG[f.value] || '' : '';
    })();
    var openOverlay = function () {
      if (shown) return;
      shown = true;
      store('cbl_overlay_at', String(Date.now()));
      var back = el('div', 'signup-overlay');
      var card = el('div', 'signup-overlay__card');
      card.setAttribute('role', 'dialog'); card.setAttribute('aria-modal', 'true'); card.setAttribute('aria-labelledby', 'so-h');
      var close = el('button', 'signup-overlay__close'); close.type = 'button'; close.setAttribute('aria-label', 'Close'); close.innerHTML = '&times;';
      // A postcard: Mark in the studio on the left, his note and the form on the right.
      var pic = el('div', 'signup-overlay__pic');
      var img = el('img'); img.src = '/wp-content/uploads/cbl-coded/img/about/mark-studio.jpg'; img.alt = 'Mark in the Coffee Break studio';
      pic.appendChild(img);
      var note = el('div', 'signup-overlay__note');
      var MONDAYS = ['french', 'italian', 'german', 'spanish', 'english'];
      var weekly = !pageLang || MONDAYS.indexOf(pageLang) >= 0;
      var heading = !pageLang ? 'Free lessons by email'
        : weekly ? 'Free ' + NAME[pageLang] + ' lessons by email'
        : 'Free ' + NAME[pageLang] + ' learning tips by email';
      var h = el('p', 'signup-overlay__h', heading); h.id = 'so-h';
      var body = !pageLang
        ? 'Every Monday your language team will send you a free short lesson you can use the same day. On Fridays I share tips to help you with your language learning.'
        : weekly
          ? 'Every Monday the ' + NAME[pageLang] + ' team will send you a free short lesson you can use the same day. On Fridays I share tips to help you with your language learning.'
          : 'On Fridays I share tips to help you with your language learning, and you’ll be the first to hear when there’s something new for ' + NAME[pageLang] + ' learners.';
      var p = el('p', 'signup-overlay__p', body);
      var form = el('form'); form.setAttribute('data-signup', ''); form.dataset.form = 'overlay';
      if (pageLang) form.dataset.language = pageLang;
      else {
        var sel = el('select', 'field'); sel.setAttribute('aria-label', 'Language');
        Object.keys(NAME).forEach(function (k) { var o = el('option', '', NAME[k]); o.value = k; sel.appendChild(o); });
        sel.addEventListener('change', function () { form.dataset.language = sel.value; });
        form.dataset.language = sel.value || 'french';
        form.appendChild(sel);
      }
      var email = el('input', 'field'); email.type = 'email'; email.required = true; email.placeholder = 'Please enter your email address'; email.autocomplete = 'email'; email.setAttribute('aria-label', 'Email address');
      var go = el('button', 'btn', weekly ? 'Send me free lessons and tips' : 'Send me free tips'); go.type = 'submit';
      form.appendChild(email); form.appendChild(go);
      form.appendChild(el('p', 'meta', 'Free, and you can unsubscribe any time.'));
      note.appendChild(h); note.appendChild(p); note.appendChild(form);
      card.appendChild(close); card.appendChild(pic); card.appendChild(note);
      back.appendChild(card);
      document.body.appendChild(back);
      wire(form);
      (form.querySelector('[name="fields[first_name]"]') || email).focus();
      var shut = function () { back.remove(); document.removeEventListener('keydown', onKey); };
      var onKey = function (e) { if (e.key === 'Escape') shut(); };
      close.addEventListener('click', shut);
      back.addEventListener('click', function (e) { if (e.target === back) shut(); });
      document.addEventListener('keydown', onKey);
      track('Overlay shown', { language: pageLang || 'none' });
    };
    if (forceOverlay) setTimeout(openOverlay, 800);
    else {
      setTimeout(openOverlay, 5000);
      window.addEventListener('scroll', function onScroll() {
        var h = document.documentElement;
        if ((h.scrollTop + innerHeight) / h.scrollHeight > 0.25) { window.removeEventListener('scroll', onScroll); openOverlay(); }
      }, { passive: true });
    }
  }

  /* The 20th birthday bar (Mark, 18 Oct 2026). Slides in above the header 2.5 seconds after any page
     loads. Closing it keeps it away for three and a half days in that browser. Not on the anniversary
     page itself, and not when the promo bar is already showing. ?bday=1 forces it for checking. */
  var BDAY_URL = ON_SITE ? '/20th-anniversary/' : '/20th-anniversary.html';
  var BDAY_GAP = 3.5 * 86400000;
  var forceBday = /[?&]bday=1\b/.test(location.search);
  var promoShowing = function () { var b = document.querySelector('.promo-bar'); return b && !b.hidden; };
  if (forceBday || (!/20th-anniversary/.test(location.pathname) && Date.now() - (+(store('cbl_bday_closed') || 0)) > BDAY_GAP)) {
    setTimeout(function () {
      if (promoShowing() && !forceBday) return;
      var bar = el('div', 'bday-bar');
      bar.setAttribute('role', 'region'); bar.setAttribute('aria-label', '20th birthday');
      var inner = el('div', 'bday-bar__inner');
      var link = el('a', 'bday-bar__text'); link.href = BDAY_URL;
      link.innerHTML = 'We’re celebrating our 20th birthday <span>See how</span>';
      var close = el('button', 'bday-bar__close'); close.type = 'button'; close.setAttribute('aria-label', 'Close'); close.innerHTML = '&times;';
      inner.appendChild(link); inner.appendChild(close); bar.appendChild(inner);
      // Scrolled down already: no slide, and keep what's on screen where it is.
      var scrolled = window.scrollY > 0;
      if (!scrolled) bar.classList.add('is-arriving');
      document.body.insertBefore(bar, document.body.firstChild);
      document.body.classList.add('has-bday-bar');
      if (scrolled) window.scrollBy(0, bar.offsetHeight);
      else requestAnimationFrame(function () { requestAnimationFrame(function () { bar.classList.remove('is-arriving'); }); });
      link.addEventListener('click', function () { track('Birthday bar click', {}); });
      close.addEventListener('click', function () {
        store('cbl_bday_closed', String(Date.now()));
        bar.remove(); document.body.classList.remove('has-bday-bar');
        track('Birthday bar closed', {});
      });
    }, forceBday ? 300 : 2500);
  }
})();

// Rotating greeting: <span data-greet>Hello</span> types a greeting, holds, deletes, types the next
// (homepage "Hello, I'm Mark"; Mark, 17 Oct 2026). No motion for reduced-motion users.
(function () {
  var els = document.querySelectorAll('[data-greet]');
  if (!els.length || (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches)) return;
  els.forEach(function (el) {
    var words = ['Hello','Ciao','Bonjour','Hola','Olá','Hei','Hej','Hallo','Halò','你好','こんにちは'];
    for (var i = words.length - 1; i > 1; i--) { var k = 1 + Math.floor(Math.random() * i); var t = words[i]; words[i] = words[k]; words[k] = t; }
    var gi = 0, ci = words[0].length, deleting = true;
    function type() {
      var w = words[gi];
      if (!deleting) { ci++; el.textContent = w.slice(0, ci); if (ci === w.length) { deleting = true; return setTimeout(type, 1600); } }
      else { ci--; el.textContent = w.slice(0, ci); if (ci === 0) { deleting = false; gi = (gi + 1) % words.length; return setTimeout(type, 400); } }
      setTimeout(type, deleting ? 65 : 120);
    }
    setTimeout(type, 1800);
  });
})();

// Site search (Mark, 18 Oct 2026). The menu's Search link goes to WordPress's own search (/?s=),
// which is what visitors without JavaScript get. With it, the link opens a small search field
// under the header; Enter goes to the results page (search.html, which publish-wp.mjs maps to
// /search/) with ?q=. The parameter is q, not s: on WordPress any URL with ?s= is its own search.
// On the results page itself, the link just moves to the page's own field.
(function () {
  var link = document.querySelector('.site-nav a[aria-label="Search"]');
  var header = link && link.closest('.site-header');
  if (!link || !header) return;
  var RESULTS = '/search/';
  var bar = null, input = null;

  function build() {
    bar = document.createElement('div');
    bar.className = 'header-search';
    bar.hidden = true;
    bar.innerHTML =
      '<div class="wrap"><form role="search" action="' + RESULTS + '" method="get">' +
      '<label for="header-search-q" class="sr-only">Search Coffee Break Languages</label>' +
      '<input id="header-search-q" class="field" type="search" name="q" autocomplete="off" placeholder="Search lessons, courses and articles">' +
      '<button class="btn" type="submit">Search</button>' +
      '<button class="header-search__close" type="button" aria-label="Close search"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M3 3l12 12M15 3L3 15"/></svg></button>' +
      '</form></div>';
    header.appendChild(bar);
    input = bar.querySelector('input');
    bar.querySelector('form').addEventListener('submit', function (e) {
      if (!input.value.trim()) { e.preventDefault(); input.focus(); }
    });
    bar.querySelector('.header-search__close').addEventListener('click', function () { close(true); });
    bar.addEventListener('click', function (e) { e.stopPropagation(); });
    bar.addEventListener('keydown', function (e) { if (e.key === 'Escape') { e.stopPropagation(); close(true); } });
  }
  function open() {
    if (!bar) build();
    // on a phone the menu panel is open: fold it away so the field sits under the header
    var nav = link.closest('.site-nav');
    if (nav && nav.classList.contains('open')) {
      nav.classList.remove('open');
      var t = document.querySelector('.menu-toggle[aria-controls="' + nav.id + '"]');
      if (t) t.setAttribute('aria-expanded', 'false');
    }
    bar.hidden = false;
    header.classList.add('has-search');
    link.setAttribute('aria-expanded', 'true');
    input.focus();
  }
  function close(refocus) {
    if (!bar || bar.hidden) return;
    bar.hidden = true;
    header.classList.remove('has-search');
    link.setAttribute('aria-expanded', 'false');
    if (refocus) link.focus();
  }

  link.setAttribute('aria-expanded', 'false');
  link.addEventListener('click', function (e) {
    var own = document.getElementById('search-page-q');
    e.preventDefault();
    e.stopPropagation();
    if (own) { own.focus(); own.select(); own.scrollIntoView({ block: 'center' }); return; }
    if (bar && !bar.hidden) close(false); else open();
  });
  document.addEventListener('click', function () { close(false); });
  document.addEventListener('keydown', function (e) { if (e.key === 'Escape') close(true); });
})();

</script>
<script>
/* Shared "Fresh from Coffee Break" renderer.
 *
 * Drop this on any page and mark up a container. The script does the rest, so a
 * new page needs no JavaScript of its own:
 *
 *   <div class="river" data-feed="river"></div>                  all languages
 *   <div class="river" data-feed="river" data-feed-lang="fr"></div>   French only
 *   <div class="cbtv-row" data-feed="members" data-feed-lang="fr"></div>
 *
 * Attributes:
 *   data-feed        "river" (mixed YouTube + CBTV) or "members" (CBTV only,
 *                    excluding anything also published on YouTube)
 *   data-feed-lang   fr | es | it | de | en | cbl | mark. Omit for everything.
 *   data-feed-limit  max cards, default 12 for river / 6 for members
 *   data-feed-shuffle "false" to keep newest-first; default shuffles the river
 *   data-feed-min    only replace the fallback if at least this many cards came back
 *   data-feed-exclude  regex of titles to leave out (river and members), e.g. "Treasure Hunt|Trial"
 *   data-feed-strict "true": members row shows only that language (no all-language items)
 *   data-feed-days   CBTV look-back in days (30-365, default 60): longer = more presenters
 *   data-feed-per    YouTube videos per channel to ask for (1-10). YouTube is long-form only.
 *   data-feed-channels  client-side channel filter, comma-separated; "a|b" makes a group,
 *                    e.g. "fr,es,it,de,en,cbl|mark". Doesn't change the request, so
 *                    several containers on one page share a single fetch.
 *   data-feed-pick   "each": the newest video from each channel group in data-feed-channels,
 *                    newest first ("cbl|mark" = whichever of the two posted last).
 *                    "random": one video at random from each channel's newest few
 *                    (data-feed-recent, default 2); a new pick on every page load.
 *   data-feed-card   "media" (October 2026 cards) or "slot": the attributes sit on a card's
 *                    picture (or the card itself); the enclosing <a class="media"> gets the
 *                    video's link, picture and [data-feed-slot="meta"] line swapped in place,
 *                    so its own title and text (and their paragraph codes) stay put.
 *
 * Anything already inside the container is left alone until live data arrives,
 * so a page can ship a static fallback and it simply gets replaced. If the feed
 * fails the fallback stays on screen.
 */
(function () {
  'use strict';

  var ENDPOINT = 'https://cbl-rebuild.netlify.app/.netlify/functions/feed';
  var FEATURED = 'https://cbl-rebuild.netlify.app/.netlify/functions/cbtv-featured';

  // Per-language presentation. Keys match the `lang` values the function returns.
  var LANGS = {
    fr:   { chip: 'l-fr',   code: 'FR',  label: 'French',   flag: '🇫🇷', colour: '#243f9e' },
    es:   { chip: 'l-es',   code: 'ES',  label: 'Spanish',  flag: '🇪🇸', colour: '#9a6b08' },
    it:   { chip: 'l-it',   code: 'IT',  label: 'Italian',  flag: '🇮🇹', colour: '#2a6e3d' },
    de:   { chip: 'l-de',   code: 'DE',  label: 'German',   flag: '🇩🇪', colour: '#3a3a3f' },
    en:   { chip: 'l-en',   code: 'EN',  label: 'English',  flag: '🇬🇧', colour: '#6f2a62' },
    cbl:  { chip: 'l-mark', code: 'CBL', label: 'Coffee Break', flag: '☕', colour: '#37687c' },
    mark: { chip: 'l-mark', code: 'LA',  label: 'Language Adventures', flag: '🌍', colour: '#37687c' },
    all:  { chip: 'l-mark', code: 'ALL', label: 'All languages', flag: '🌍', colour: '#37687c' }
  };
  var FALLBACK = { chip: 'l-mark', code: 'CB', label: 'Coffee Break', flag: '☕', colour: '#37687c' };
  var meta = function (lang) { return LANGS[lang] || FALLBACK; };

  var esc = function (s) {
    return String(s == null ? '' : s)
      .replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
      .replace(/"/g, '&quot;').replace(/'/g, '&#39;');
  };

  // Computed from the real clock, not a build-time constant. The previous
  // hardcoded river measured "days ago" from 13 June 2026 forever, so every card
  // claimed the same age no matter when you loaded the page.
  function ago(iso) {
    var then = new Date(iso).getTime();
    if (!then) return '';
    var days = Math.round((Date.now() - then) / 864e5);
    if (days <= 0) return 'today';
    if (days === 1) return 'yesterday';
    if (days < 7) return days + ' days ago';
    if (days < 14) return 'last week';
    if (days < 61) return Math.round(days / 7) + ' weeks ago';
    return Math.round(days / 30) + ' months ago';
  }

  function shuffle(a) {
    var x = a.slice();
    for (var i = x.length - 1; i > 0; i--) {
      var j = Math.floor(Math.random() * (i + 1));
      var t = x[i]; x[i] = x[j]; x[j] = t;
    }
    return x;
  }

  function riverCard(v) {
    var m = meta(v.lang);
    var isYt = v.source === 'youtube';
    var thumb = v.thumb
      ? '<img class="no-lazyload skip-lazy" src="' + esc(v.thumb) + '" alt="" loading="lazy">'
      : '<div class="fallback"><span>' + esc(v.title) + '</span></div>';
    return '<a class="card" href="' + esc(v.url) + '" target="_blank" rel="noopener">' +
      '<div class="thumb">' + thumb + '<div class="scrim"></div>' +
      '<div class="badges">' +
        (v.locked ? '<span class="lock">🔒 Members</span>' : '') +
        '<span class="fmt ' + (isYt ? 'yt' : 'cbtv') + '">' + (isYt ? '▶ YouTube' : '★ Coffee Break TV') + '</span>' +
      '</div></div>' +
      '<div class="body"><div class="ttl">' + esc(v.title) + '</div>' +
      '<div class="meta"><span class="lang-chip ' + m.chip + '">' + esc(m.code) + '</span>' +
      '<span>' + ago(v.date) + '</span></div></div></a>';
  }

  function memberCard(c) {
    var m = meta(c.lang);
    return '<a class="cbtv-card" href="' + esc(c.url) + '" target="_blank" rel="noopener" style="background:' + m.colour + '">' +
      '<div class="top">' +
        (c.poster || c.thumb ? '<img class="no-lazyload skip-lazy" src="' + esc(c.poster || c.thumb) + '" alt="" loading="lazy">' : '') +
        '<span class="badge">★ CBTV</span><span class="play">▶</span>' +
      '</div>' +
      '<div class="panel">' +
        '<div class="chiprow"><span class="flag">' + m.flag + '</span><span class="blabel">' + esc(m.label) + '</span></div>' +
        '<div class="ptitle">' + esc(c.title) + '</div>' +
      '</div></a>';
  }

  // ---- "media" cards: the October 2026 site style (css/site.css) ----------
  // Opt in per container with data-feed-card="media". Square structure, 4px
  // picture corners, a plain meta line, no emoji or badges except one square
  // "Members" tag on members-only lessons.
  var DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
  var MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
  function dayDate(iso) {
    var d = new Date(iso);
    if (isNaN(d)) return '';
    // dates as 15th Oct (Mark, 15 Oct 2026)
    var n = d.getDate(), sfx = (n % 100 >= 11 && n % 100 <= 13) ? 'th' : ({ 1: 'st', 2: 'nd', 3: 'rd' }[n % 10] || 'th');
    return DAYS[d.getDay()] + ' ' + n + sfx + ' ' + MONTHS[d.getMonth()];
  }
  function mediaCard(v) {
    var m = meta(v.lang);
    var pic = v.thumb || v.poster;
    return '<a class="media" href="' + esc(v.url) + '" target="_blank" rel="noopener">' +
      '<span class="media__pic">' +
        (pic ? '<img class="no-lazyload skip-lazy" src="' + esc(pic) + '" alt="" loading="lazy">' : '<span class="ph">' + esc(m.label) + '</span>') +
        (v.locked ? '<span class="tag">Members</span>' : '') +
      '</span>' +
      '<span class="meta">' + dayDate(v.date) + ' · ' + esc(m.label) + '</span>' +
      '<span class="media__title">' + esc(v.title) + '</span></a>';
  }
  function mediaMember(c) {
    return mediaCard({ url: c.url, thumb: c.thumb || c.poster, lang: c.lang, date: c.date, title: c.title, locked: true });
  }


  // A range of presenters: the newest lesson from each presenter in turn (presenters in
  // order of their latest lesson), then second lessons, and so on. Team accounts go last.
  function vary(list, limit) {
    var groups = {}, order = [];
    list.forEach(function (v) {
      var k = v.presenter && !/team/i.test(v.presenter) ? v.presenter : '~team';
      if (!groups[k]) { groups[k] = []; order.push(k); }
      groups[k].push(v);
    });
    order.sort(function (a, b) { return (a === '~team') - (b === '~team'); });
    var out = [];
    for (var round = 0; out.length < limit; round++) {
      var added = false;
      order.forEach(function (k) { if (out.length < limit && groups[k][round]) { out.push(groups[k][round]); added = true; } });
      if (!added) break;
    }
    return out;
  }

  // "fr,es,cbl|mark" -> [['fr'],['es'],['cbl','mark']]
  function channelGroups(el) {
    var raw = el.getAttribute('data-feed-channels');
    if (!raw) return null;
    return raw.split(',').map(function (g) { return g.trim().split('|').filter(Boolean); }).filter(function (g) { return g.length; });
  }
  var newestFirst = function (a, b) { return new Date(b.date) - new Date(a.date); };

  // Swap a slot card's link, picture and meta line; its title and text stay as written.
  function fillSlot(slot, v) {
    var m = meta(v.lang);
    var el = slot.closest('a') || slot;
    el.setAttribute('href', v.url);
    el.setAttribute('target', '_blank');
    el.setAttribute('rel', 'noopener');
    var img = el.querySelector('.media__pic img');
    if (img && v.thumb) { img.src = v.thumb; img.alt = v.title || ''; }
    var line = el.querySelector('[data-feed-slot="meta"]');
    if (line) line.textContent = m.label + ' · ' + dayDate(v.date);
    slot.setAttribute('data-feed-state', 'live');
  }

  function fill(el, data) {
    var kind = el.getAttribute('data-feed');
    var limit = parseInt(el.getAttribute('data-feed-limit'), 10);
    var media = el.getAttribute('data-feed-card') === 'media';
    var source = el.getAttribute('data-feed-source'); // "youtube" | "cbtv" | null (both)
    var exclude = el.getAttribute('data-feed-exclude'); // e.g. "Treasure Hunt|Trailer": titles to leave out
    var skip = exclude ? new RegExp(exclude, 'i') : null;
    var items;

    if (kind === 'members') {
      // True members-only: drop anything Uscreen flags as also going out on
      // YouTube, which is what Ava asked for in the June review.
      var strict = el.getAttribute('data-feed-strict') === 'true' && el.getAttribute('data-feed-lang');
      items = (data.cbtv || []).filter(function (c) {
        return !c.alsoOnYouTube && !(skip && skip.test(c.title || '')) && (!strict || c.lang === strict);
      });
      if (!limit) limit = 6;
      items = vary(items, limit);
    } else {
      if (!limit) limit = 12;
      items = (source === 'cbtv' ? [] : (data.youtube || []))
        .concat(source === 'youtube' ? [] : (data.cbtv || []));
      if (skip) items = items.filter(function (v) { return !skip.test(v.title || ''); });
      var groups = channelGroups(el);
      var pick = el.getAttribute('data-feed-pick');
      if (groups) {
        var inGroups = {};
        groups.forEach(function (g) { g.forEach(function (l) { inGroups[l] = true; }); });
        items = items.filter(function (v) { return inGroups[v.lang]; });
      }
      if (pick === 'each' && groups) {
        // newest from each group, then the row newest first
        items.sort(newestFirst);
        items = groups.map(function (g) {
          return items.filter(function (v) { return g.indexOf(v.lang) !== -1; })[0];
        }).filter(Boolean).sort(newestFirst);
        items = items.slice(0, limit);
      } else if (pick === 'random') {
        var recent = parseInt(el.getAttribute('data-feed-recent'), 10) || 2;
        var seen = {};
        items = items.sort(newestFirst).filter(function (v) {
          seen[v.lang] = (seen[v.lang] || 0) + 1;
          return seen[v.lang] <= recent;
        });
        items = items.length ? [items[Math.floor(Math.random() * items.length)]] : [];
      } else if (el.getAttribute('data-feed-shuffle') === 'false') {
        items.sort(function (a, b) { return new Date(b.date) - new Date(a.date); });
      } else {
        items = shuffle(items);
      }
      items = items.slice(0, limit);
    }

    if (el.getAttribute('data-feed-card') === 'slot') {
      if (items[0]) fillSlot(el, items[0]);
      return;
    }

    // keep whatever fallback the page shipped with: always if nothing came back, and also if
    // fewer than data-feed-min arrived (a channel posting only Shorts shouldn't shrink a full row)
    var min = parseInt(el.getAttribute('data-feed-min'), 10) || 1;
    if (items.length < min) return;
    var render = kind === 'members' ? (media ? mediaMember : memberCard) : (media ? mediaCard : riverCard);
    el.innerHTML = items.map(render).join('');
    el.setAttribute('data-feed-state', 'live');
  }

  // data-feed="featured": what CBTV is featuring (Club 365 rota), via its own endpoint.
  // data-feed-lang = fr | es | it | de | en | all. Same members cards, a range of presenters.
  function runFeatured() {
    [].slice.call(document.querySelectorAll('[data-feed="featured"]')).forEach(function (el) {
      var lang = el.getAttribute('data-feed-lang') || 'all';
      var limit = parseInt(el.getAttribute('data-feed-limit'), 10) || 4;
      var min = parseInt(el.getAttribute('data-feed-min'), 10) || limit;
      fetch(FEATURED + '?lang=' + encodeURIComponent(lang), { cache: 'no-store' })
        .then(function (r) { return r.ok ? r.json() : null; })
        .then(function (d) {
          var items = d && d.items ? d.items.slice(0, limit) : [];
          if (items.length < min) return;  // keep the baked cards
          el.innerHTML = items.map(function (c) { return mediaCard({ url: c.url, thumb: c.thumb, lang: c.lang, date: c.date, title: c.title, locked: true }); }).join('');
          el.setAttribute('data-feed-state', 'live');
        })
        .catch(function () {});
    });
  }

  function run() {
    runFeatured();
    var nodes = [].slice.call(document.querySelectorAll('[data-feed]:not([data-feed="featured"])'));
    if (!nodes.length) return;

    // One request per distinct language on the page, not one per container.
    var groups = {};
    // data-feed-per asks for more than one YouTube video per channel, so the
    // request key includes it.
    nodes.forEach(function (el) {
      var q = [];
      var lang = el.getAttribute('data-feed-lang');
      var per = el.getAttribute('data-feed-per');
      var days = el.getAttribute('data-feed-days');
      if (lang) q.push('lang=' + encodeURIComponent(lang));
      if (per) q.push('per=' + encodeURIComponent(per));
      if (days) q.push('days=' + encodeURIComponent(days));
      var key = q.join('&');
      (groups[key] = groups[key] || []).push(el);
    });

    Object.keys(groups).forEach(function (key) {
      var url = ENDPOINT + (key ? '?' + key : '');
      fetch(url, { cache: 'no-store' })
        .then(function (r) { return r.ok ? r.json() : null; })
        .then(function (data) {
          if (!data) return;
          groups[key].forEach(function (el) { fill(el, data); });
        })
        .catch(function () { /* leave the fallback in place */ });
    });
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', run);
  } else {
    run();
  }
})();

</script>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/generatepress/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script>
var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.display === "block") {
      panel.style.display = "none";
    } else {
      panel.style.display = "block";
    }
  });
}
</script>

<script>
  window.intercomSettings = {
    app_id: "bkn19hiw"
  };
</script>

<script>
// We pre-filled your app ID in the widget URL: 'https://widget.intercom.io/widget/bkn19hiw'
(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',w.intercomSettings);}else{var d=document;var i=function(){i.c(arguments);};i.q=[];i.c=function(args){i.q.push(args);};w.Intercom=i;var l=function(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/bkn19hiw';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);};if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})();
</script><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://app.optinmonster.com -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.account=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,309337);</script>
<!-- / OptinMonster -->
<script>function loadScript(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.src="https://tracker.metricool.com/resources/be.js",c.onreadystatechange=a,c.onload=a,b.appendChild(c)}loadScript(function(){beTracker.t({hash:"c8785ad7beb3f4c3182086b2e1699329"})});</script><script id="generate-a11y">
!function(){"use strict";if("querySelector"in document&&"addEventListener"in window){var e=document.body;e.addEventListener("pointerdown",(function(){e.classList.add("using-mouse")}),{passive:!0}),e.addEventListener("keydown",(function(){e.classList.remove("using-mouse")}),{passive:!0})}}();
</script>
			<script>
				( () => {
					const lazyloadRunObserver = () => {
						const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` );
						const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => {
							entries.forEach( ( entry ) => {
								if ( entry.isIntersecting ) {
									let lazyloadBackground = entry.target;
									if( lazyloadBackground ) {
										lazyloadBackground.classList.add( 'e-lazyloaded' );
									}
									lazyloadBackgroundObserver.unobserve( entry.target );
								}
							});
						}, { rootMargin: '200px 0px 200px 0px' } );
						lazyloadBackgrounds.forEach( ( lazyloadBackground ) => {
							lazyloadBackgroundObserver.observe( lazyloadBackground );
						} );
					};
					const events = [
						'DOMContentLoaded',
						'elementor/lazyload/observe',
					];
					events.forEach( ( event ) => {
						document.addEventListener( event, lazyloadRunObserver );
					} );
				} )();
			</script>
			<!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 209 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'qzkgcpipxrlth08aa4bm');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 208 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ewvlkfjwdrbg0brihobv');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 207 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'xjsbvzumr5hn9pqv8niu');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 206 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'pimzdor1nd6zc1goiiba');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 205 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'cqloy0fsln7l7fjcgntp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 204 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'abov8zznu5lr9ssekc5g');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 203 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'fjspxxw3apgbz3fachnu');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 202 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'po405wyv9ezu56jou63u');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 201 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'yqmcwbegguircl5r6vwd');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show Festive Bonus Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ojkvdp5cbqpu69unibzu');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 210 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'nky6m2ryqvnkqlzkcpk2');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 210 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'nujwyf8hsqj5tfiqep38');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 210 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ysqv6gubwhjf8kvweqjq');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 209 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'nevuqwcb6dyywmytkuzm');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 209 Lead Magnet - Inline - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'r1hg8gexo9zmrsc6mbgx');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 209 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'z4gtiexleykuabzfwkay');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 209 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'dsktb6exsoptrgc46kej');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 208 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'lbz0f7u1sx8jmhtnepxp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 208 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ltcmthfpzxkpiogquknh');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 208 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'shswgsxwx8jjxrv0kjhy');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 208 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'tuzwocjlylvpixdyzwyp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 207 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ecgzwwkxdat1pyybgvvp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 207 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'zqdpna441gpjr7s8pkkh');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 207 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ezmg8rp8fwn2oio4yff5');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 207 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ocbvwoprlnwxcewvqttb');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 206 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'cqsmr8lexvxd9qywf1df');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 206 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'rlwb4t01beold3c8sihp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 206 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'zj0r7mu7ka7f0hz9nu6z');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 206 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'eflbckvyi4pfowdr1qxh');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 205 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'vhkk2dkxpnorllvsdbui');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 205 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'mcwtlxawuiauz6glh61f');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 205 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ajxirg8yhad0anmhwpou');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 205 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'b099aadvg42stx8fa3hi');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 204 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'zu9jwdnvevljz2dgnwza');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 204 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'assmsyslohzgyjevqgfb');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 204 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'umf2qd1s3md9vt9luocs');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 203 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'h1q7wwwea5nelo6ahtqw');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 203 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'pjhh3ggmzeeyp5m5hkub');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 204 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ruo1ackzegcgpwumdybq');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 203 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'tvlretvon3n0zbmomiyq');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 203 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'vfjnqiixayxzvci6rasf');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 202 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'k8nn8feoyldlcwm3sl0p');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 202 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'nnjlleawaqwldddyvcjo');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 202 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'uqwz1hezmyv0lgzu3yjm');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 202 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'wbnxjqrqo5izqg8zn7j6');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 201 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'pxdthi5slq7cyx8ucje4');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 201 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'joeca02fig9w3vc0drtf');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 110 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'go9ud0n0wuj9rykqz6os');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 110 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'zilfldkgk4awychfbgco');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 110 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'orj8vjsmkxq5ttmcnsbv');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 110 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'qolo2gtdjkwnnal8mw8r');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 109 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ujozuwuab3mmhxfmzigv');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 109 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'iho6iqqfhwlmbbxwp8fw');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 109 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'marrviwrojhpso2bscbg');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 108 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'febetzmfbcfh5uer8xa1');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 108 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'m7d9qxw8fdmpotndjjql');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 108 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'xik66cggjeg24mpjfres');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 108 Lead Magnet -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'rb8ydwio59wnpllm3u6o');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 108 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ph2xr2kxhn3j4hftxacd');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 107 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'hycxqeiwpksfzb9cx5cf');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 107 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'lb2k3gmktyxjnmqb5afp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 107 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'fbk9ikvuynypco7n7esa');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 107 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'clv2tbk9fzmmkpwkk6im');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 106 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'z54dvbg7gjjgadphbyst');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 106 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'t2mbs8ttnyn15o96nzyb');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 106 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'jqi0lorxz2wbugdiddib');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 105 Lead Magnet -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'aglsiwabz41rc7rwltou');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 105 Lead Magnet -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ipab30xxq9hkaohqjwnc');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 105 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'vahrlkzl9aqbexybotqp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 105 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'oktxk7xe6gv0rkvmzdgu');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 105 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'mbpyhxxiw2jjehfanj2m');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 104 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'g1yphwdz8begmlk6c3bp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 104 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'ar1a2avhdjnk6jsnx0rl');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 104 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'uataozr97yzqa1megy3e');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 104 Lead Magnet Pop up -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'twuqecarkz30xkz03xpb');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 104 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'k4q2acmtokhitpizo7qc');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 103 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'akz0tzzlxhq7q69nbyhf');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 103 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'vg7rxvko7ifoajhmok4u');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 103 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'nkafqlbwxlgbnvt0alpw');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 103 Lead Magnet Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'puplwkjuqabgvqt5szmq');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 103 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'sqldeg78nwzsowiczhu1');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 102 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'lwndhqlgklqyz0g2ladr');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 102 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'c9aa4hsiq1s7wbhap2be');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 102 Lead Magnet Pop-up -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'subvcibnt9zne6wz8vpg');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 102 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'pzs83znnb0o3a9et4gox');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Full Screen V2 -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'uubd2o2s64z0h1m14wlp');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBE Show 101 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'vvlygo6roi3v69gpms00');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Full Screen V2 -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'kta9tc2tkscrymeatrt6');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBS Show 101 Lead Magnet v2 - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'pagqq0lmni2xwtusnq1b');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Full Screen V2 -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'e8tfaq8j9rj3rbxnelpw');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBG Show 101 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'oylwpgckzmbxor9mgbeu');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Full Screen V2 -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'jcuzqkg1xxgibibvfwbo');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBI Show 101 Lead Magnet - Popup -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'f7ih18gcuhyl2brvdwno');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Full Screen V2 -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'wp8gefmdoinmctblpilk');</script>
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://api.omwpapi.com :: Campaign Title: CBF Show 101 Lead Magnet - Pop-up -->
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,291267,'yenhffc2uwwfqw5r6rdx');</script>
<!-- / OptinMonster -->		<script type="text/javascript">
		var qzkgcpipxrlth08aa4bm_shortcode = true;var ewvlkfjwdrbg0brihobv_shortcode = true;var xjsbvzumr5hn9pqv8niu_shortcode = true;var pimzdor1nd6zc1goiiba_shortcode = true;var cqloy0fsln7l7fjcgntp_shortcode = true;var abov8zznu5lr9ssekc5g_shortcode = true;var fjspxxw3apgbz3fachnu_shortcode = true;var po405wyv9ezu56jou63u_shortcode = true;var yqmcwbegguircl5r6vwd_shortcode = true;var ojkvdp5cbqpu69unibzu_shortcode = true;var nky6m2ryqvnkqlzkcpk2_shortcode = true;var nujwyf8hsqj5tfiqep38_shortcode = true;var ysqv6gubwhjf8kvweqjq_shortcode = true;var nevuqwcb6dyywmytkuzm_shortcode = true;var r1hg8gexo9zmrsc6mbgx_shortcode = true;var z4gtiexleykuabzfwkay_shortcode = true;var dsktb6exsoptrgc46kej_shortcode = true;var lbz0f7u1sx8jmhtnepxp_shortcode = true;var ltcmthfpzxkpiogquknh_shortcode = true;var shswgsxwx8jjxrv0kjhy_shortcode = true;var tuzwocjlylvpixdyzwyp_shortcode = true;var ecgzwwkxdat1pyybgvvp_shortcode = true;var zqdpna441gpjr7s8pkkh_shortcode = true;var ezmg8rp8fwn2oio4yff5_shortcode = true;var ocbvwoprlnwxcewvqttb_shortcode = true;var cqsmr8lexvxd9qywf1df_shortcode = true;var rlwb4t01beold3c8sihp_shortcode = true;var zj0r7mu7ka7f0hz9nu6z_shortcode = true;var eflbckvyi4pfowdr1qxh_shortcode = true;var vhkk2dkxpnorllvsdbui_shortcode = true;var mcwtlxawuiauz6glh61f_shortcode = true;var ajxirg8yhad0anmhwpou_shortcode = true;var b099aadvg42stx8fa3hi_shortcode = true;var zu9jwdnvevljz2dgnwza_shortcode = true;var assmsyslohzgyjevqgfb_shortcode = true;var umf2qd1s3md9vt9luocs_shortcode = true;var h1q7wwwea5nelo6ahtqw_shortcode = true;var pjhh3ggmzeeyp5m5hkub_shortcode = true;var ruo1ackzegcgpwumdybq_shortcode = true;var tvlretvon3n0zbmomiyq_shortcode = true;var vfjnqiixayxzvci6rasf_shortcode = true;var k8nn8feoyldlcwm3sl0p_shortcode = true;var nnjlleawaqwldddyvcjo_shortcode = true;var uqwz1hezmyv0lgzu3yjm_shortcode = true;var wbnxjqrqo5izqg8zn7j6_shortcode = true;var pxdthi5slq7cyx8ucje4_shortcode = true;var joeca02fig9w3vc0drtf_shortcode = true;var go9ud0n0wuj9rykqz6os_shortcode = true;var zilfldkgk4awychfbgco_shortcode = true;var orj8vjsmkxq5ttmcnsbv_shortcode = true;var qolo2gtdjkwnnal8mw8r_shortcode = true;var ujozuwuab3mmhxfmzigv_shortcode = true;var iho6iqqfhwlmbbxwp8fw_shortcode = true;var marrviwrojhpso2bscbg_shortcode = true;var febetzmfbcfh5uer8xa1_shortcode = true;var m7d9qxw8fdmpotndjjql_shortcode = true;var xik66cggjeg24mpjfres_shortcode = true;var rb8ydwio59wnpllm3u6o_shortcode = true;var ph2xr2kxhn3j4hftxacd_shortcode = true;var hycxqeiwpksfzb9cx5cf_shortcode = true;var lb2k3gmktyxjnmqb5afp_shortcode = true;var fbk9ikvuynypco7n7esa_shortcode = true;var clv2tbk9fzmmkpwkk6im_shortcode = true;var z54dvbg7gjjgadphbyst_shortcode = true;var t2mbs8ttnyn15o96nzyb_shortcode = true;var jqi0lorxz2wbugdiddib_shortcode = true;var aglsiwabz41rc7rwltou_shortcode = true;var ipab30xxq9hkaohqjwnc_shortcode = true;var vahrlkzl9aqbexybotqp_shortcode = true;var oktxk7xe6gv0rkvmzdgu_shortcode = true;var mbpyhxxiw2jjehfanj2m_shortcode = true;var g1yphwdz8begmlk6c3bp_shortcode = true;var ar1a2avhdjnk6jsnx0rl_shortcode = true;var uataozr97yzqa1megy3e_shortcode = true;var twuqecarkz30xkz03xpb_shortcode = true;var k4q2acmtokhitpizo7qc_shortcode = true;var akz0tzzlxhq7q69nbyhf_shortcode = true;var vg7rxvko7ifoajhmok4u_shortcode = true;var nkafqlbwxlgbnvt0alpw_shortcode = true;var puplwkjuqabgvqt5szmq_shortcode = true;var sqldeg78nwzsowiczhu1_shortcode = true;var lwndhqlgklqyz0g2ladr_shortcode = true;var c9aa4hsiq1s7wbhap2be_shortcode = true;var subvcibnt9zne6wz8vpg_shortcode = true;var pzs83znnb0o3a9et4gox_shortcode = true;var uubd2o2s64z0h1m14wlp_shortcode = true;var vvlygo6roi3v69gpms00_shortcode = true;var kta9tc2tkscrymeatrt6_shortcode = true;var pagqq0lmni2xwtusnq1b_shortcode = true;var e8tfaq8j9rj3rbxnelpw_shortcode = true;var oylwpgckzmbxor9mgbeu_shortcode = true;var jcuzqkg1xxgibibvfwbo_shortcode = true;var f7ih18gcuhyl2brvdwno_shortcode = true;var wp8gefmdoinmctblpilk_shortcode = true;var yenhffc2uwwfqw5r6rdx_shortcode = true;		</script>
				<script type="text/template" id="tmpl-convertkit-quicktags-modal">
			<div id="convertkit-quicktags-modal">
				<div class="media-frame-title"><h1></h1></div>
				<div class="media-frame-content"></div>
				<div class="media-frame-toolbar">
					<div class="media-toolbar">
						<div class="media-toolbar-secondary">
							<button type="button" class="button button-large cancel">Cancel</button>
						</div>
						<div class="media-toolbar-primary">
							<button type="button" class="button button-primary button-large">Insert</button>
						</div>
					</div>
				</div>
			</div>
		</script>
		<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://coffeebreaklanguages.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1.3"}}
</script>
<script type="module">
/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://coffeebreaklanguages.com/wp-includes/js/wp-emoji-loader.min.js
</script>
		<script type="text/javascript">var omapi_localized = {
			ajax: 'https://coffeebreaklanguages.com/wp-admin/admin-ajax.php?optin-monster-ajax-route=1',
			nonce: '358805b635',
			slugs:
			{"qzkgcpipxrlth08aa4bm":{"slug":"qzkgcpipxrlth08aa4bm","mailpoet":false},"ewvlkfjwdrbg0brihobv":{"slug":"ewvlkfjwdrbg0brihobv","mailpoet":false},"xjsbvzumr5hn9pqv8niu":{"slug":"xjsbvzumr5hn9pqv8niu","mailpoet":false},"pimzdor1nd6zc1goiiba":{"slug":"pimzdor1nd6zc1goiiba","mailpoet":false},"cqloy0fsln7l7fjcgntp":{"slug":"cqloy0fsln7l7fjcgntp","mailpoet":false},"abov8zznu5lr9ssekc5g":{"slug":"abov8zznu5lr9ssekc5g","mailpoet":false},"fjspxxw3apgbz3fachnu":{"slug":"fjspxxw3apgbz3fachnu","mailpoet":false},"po405wyv9ezu56jou63u":{"slug":"po405wyv9ezu56jou63u","mailpoet":false},"yqmcwbegguircl5r6vwd":{"slug":"yqmcwbegguircl5r6vwd","mailpoet":false},"ojkvdp5cbqpu69unibzu":{"slug":"ojkvdp5cbqpu69unibzu","mailpoet":false},"nky6m2ryqvnkqlzkcpk2":{"slug":"nky6m2ryqvnkqlzkcpk2","mailpoet":false},"nujwyf8hsqj5tfiqep38":{"slug":"nujwyf8hsqj5tfiqep38","mailpoet":false},"ysqv6gubwhjf8kvweqjq":{"slug":"ysqv6gubwhjf8kvweqjq","mailpoet":false},"nevuqwcb6dyywmytkuzm":{"slug":"nevuqwcb6dyywmytkuzm","mailpoet":false},"r1hg8gexo9zmrsc6mbgx":{"slug":"r1hg8gexo9zmrsc6mbgx","mailpoet":false},"z4gtiexleykuabzfwkay":{"slug":"z4gtiexleykuabzfwkay","mailpoet":false},"dsktb6exsoptrgc46kej":{"slug":"dsktb6exsoptrgc46kej","mailpoet":false},"lbz0f7u1sx8jmhtnepxp":{"slug":"lbz0f7u1sx8jmhtnepxp","mailpoet":false},"ltcmthfpzxkpiogquknh":{"slug":"ltcmthfpzxkpiogquknh","mailpoet":false},"shswgsxwx8jjxrv0kjhy":{"slug":"shswgsxwx8jjxrv0kjhy","mailpoet":false},"tuzwocjlylvpixdyzwyp":{"slug":"tuzwocjlylvpixdyzwyp","mailpoet":false},"ecgzwwkxdat1pyybgvvp":{"slug":"ecgzwwkxdat1pyybgvvp","mailpoet":false},"zqdpna441gpjr7s8pkkh":{"slug":"zqdpna441gpjr7s8pkkh","mailpoet":false},"ezmg8rp8fwn2oio4yff5":{"slug":"ezmg8rp8fwn2oio4yff5","mailpoet":false},"ocbvwoprlnwxcewvqttb":{"slug":"ocbvwoprlnwxcewvqttb","mailpoet":false},"cqsmr8lexvxd9qywf1df":{"slug":"cqsmr8lexvxd9qywf1df","mailpoet":false},"rlwb4t01beold3c8sihp":{"slug":"rlwb4t01beold3c8sihp","mailpoet":false},"zj0r7mu7ka7f0hz9nu6z":{"slug":"zj0r7mu7ka7f0hz9nu6z","mailpoet":false},"eflbckvyi4pfowdr1qxh":{"slug":"eflbckvyi4pfowdr1qxh","mailpoet":false},"vhkk2dkxpnorllvsdbui":{"slug":"vhkk2dkxpnorllvsdbui","mailpoet":false},"mcwtlxawuiauz6glh61f":{"slug":"mcwtlxawuiauz6glh61f","mailpoet":false},"ajxirg8yhad0anmhwpou":{"slug":"ajxirg8yhad0anmhwpou","mailpoet":false},"b099aadvg42stx8fa3hi":{"slug":"b099aadvg42stx8fa3hi","mailpoet":false},"zu9jwdnvevljz2dgnwza":{"slug":"zu9jwdnvevljz2dgnwza","mailpoet":false},"assmsyslohzgyjevqgfb":{"slug":"assmsyslohzgyjevqgfb","mailpoet":false},"umf2qd1s3md9vt9luocs":{"slug":"umf2qd1s3md9vt9luocs","mailpoet":false},"h1q7wwwea5nelo6ahtqw":{"slug":"h1q7wwwea5nelo6ahtqw","mailpoet":false},"pjhh3ggmzeeyp5m5hkub":{"slug":"pjhh3ggmzeeyp5m5hkub","mailpoet":false},"ruo1ackzegcgpwumdybq":{"slug":"ruo1ackzegcgpwumdybq","mailpoet":false},"tvlretvon3n0zbmomiyq":{"slug":"tvlretvon3n0zbmomiyq","mailpoet":false},"vfjnqiixayxzvci6rasf":{"slug":"vfjnqiixayxzvci6rasf","mailpoet":false},"k8nn8feoyldlcwm3sl0p":{"slug":"k8nn8feoyldlcwm3sl0p","mailpoet":false},"nnjlleawaqwldddyvcjo":{"slug":"nnjlleawaqwldddyvcjo","mailpoet":false},"uqwz1hezmyv0lgzu3yjm":{"slug":"uqwz1hezmyv0lgzu3yjm","mailpoet":false},"wbnxjqrqo5izqg8zn7j6":{"slug":"wbnxjqrqo5izqg8zn7j6","mailpoet":false},"pxdthi5slq7cyx8ucje4":{"slug":"pxdthi5slq7cyx8ucje4","mailpoet":false},"joeca02fig9w3vc0drtf":{"slug":"joeca02fig9w3vc0drtf","mailpoet":false},"go9ud0n0wuj9rykqz6os":{"slug":"go9ud0n0wuj9rykqz6os","mailpoet":false},"zilfldkgk4awychfbgco":{"slug":"zilfldkgk4awychfbgco","mailpoet":false},"orj8vjsmkxq5ttmcnsbv":{"slug":"orj8vjsmkxq5ttmcnsbv","mailpoet":false},"qolo2gtdjkwnnal8mw8r":{"slug":"qolo2gtdjkwnnal8mw8r","mailpoet":false},"ujozuwuab3mmhxfmzigv":{"slug":"ujozuwuab3mmhxfmzigv","mailpoet":false},"iho6iqqfhwlmbbxwp8fw":{"slug":"iho6iqqfhwlmbbxwp8fw","mailpoet":false},"marrviwrojhpso2bscbg":{"slug":"marrviwrojhpso2bscbg","mailpoet":false},"febetzmfbcfh5uer8xa1":{"slug":"febetzmfbcfh5uer8xa1","mailpoet":false},"m7d9qxw8fdmpotndjjql":{"slug":"m7d9qxw8fdmpotndjjql","mailpoet":false},"xik66cggjeg24mpjfres":{"slug":"xik66cggjeg24mpjfres","mailpoet":false},"rb8ydwio59wnpllm3u6o":{"slug":"rb8ydwio59wnpllm3u6o","mailpoet":false},"ph2xr2kxhn3j4hftxacd":{"slug":"ph2xr2kxhn3j4hftxacd","mailpoet":false},"hycxqeiwpksfzb9cx5cf":{"slug":"hycxqeiwpksfzb9cx5cf","mailpoet":false},"lb2k3gmktyxjnmqb5afp":{"slug":"lb2k3gmktyxjnmqb5afp","mailpoet":false},"fbk9ikvuynypco7n7esa":{"slug":"fbk9ikvuynypco7n7esa","mailpoet":false},"clv2tbk9fzmmkpwkk6im":{"slug":"clv2tbk9fzmmkpwkk6im","mailpoet":false},"z54dvbg7gjjgadphbyst":{"slug":"z54dvbg7gjjgadphbyst","mailpoet":false},"t2mbs8ttnyn15o96nzyb":{"slug":"t2mbs8ttnyn15o96nzyb","mailpoet":false},"jqi0lorxz2wbugdiddib":{"slug":"jqi0lorxz2wbugdiddib","mailpoet":false},"aglsiwabz41rc7rwltou":{"slug":"aglsiwabz41rc7rwltou","mailpoet":false},"ipab30xxq9hkaohqjwnc":{"slug":"ipab30xxq9hkaohqjwnc","mailpoet":false},"vahrlkzl9aqbexybotqp":{"slug":"vahrlkzl9aqbexybotqp","mailpoet":false},"oktxk7xe6gv0rkvmzdgu":{"slug":"oktxk7xe6gv0rkvmzdgu","mailpoet":false},"mbpyhxxiw2jjehfanj2m":{"slug":"mbpyhxxiw2jjehfanj2m","mailpoet":false},"g1yphwdz8begmlk6c3bp":{"slug":"g1yphwdz8begmlk6c3bp","mailpoet":false},"ar1a2avhdjnk6jsnx0rl":{"slug":"ar1a2avhdjnk6jsnx0rl","mailpoet":false},"uataozr97yzqa1megy3e":{"slug":"uataozr97yzqa1megy3e","mailpoet":false},"twuqecarkz30xkz03xpb":{"slug":"twuqecarkz30xkz03xpb","mailpoet":false},"k4q2acmtokhitpizo7qc":{"slug":"k4q2acmtokhitpizo7qc","mailpoet":false},"akz0tzzlxhq7q69nbyhf":{"slug":"akz0tzzlxhq7q69nbyhf","mailpoet":false},"vg7rxvko7ifoajhmok4u":{"slug":"vg7rxvko7ifoajhmok4u","mailpoet":false},"nkafqlbwxlgbnvt0alpw":{"slug":"nkafqlbwxlgbnvt0alpw","mailpoet":false},"puplwkjuqabgvqt5szmq":{"slug":"puplwkjuqabgvqt5szmq","mailpoet":false},"sqldeg78nwzsowiczhu1":{"slug":"sqldeg78nwzsowiczhu1","mailpoet":false},"lwndhqlgklqyz0g2ladr":{"slug":"lwndhqlgklqyz0g2ladr","mailpoet":false},"c9aa4hsiq1s7wbhap2be":{"slug":"c9aa4hsiq1s7wbhap2be","mailpoet":false},"subvcibnt9zne6wz8vpg":{"slug":"subvcibnt9zne6wz8vpg","mailpoet":false},"pzs83znnb0o3a9et4gox":{"slug":"pzs83znnb0o3a9et4gox","mailpoet":false},"uubd2o2s64z0h1m14wlp":{"slug":"uubd2o2s64z0h1m14wlp","mailpoet":false},"vvlygo6roi3v69gpms00":{"slug":"vvlygo6roi3v69gpms00","mailpoet":false},"kta9tc2tkscrymeatrt6":{"slug":"kta9tc2tkscrymeatrt6","mailpoet":false},"pagqq0lmni2xwtusnq1b":{"slug":"pagqq0lmni2xwtusnq1b","mailpoet":false},"e8tfaq8j9rj3rbxnelpw":{"slug":"e8tfaq8j9rj3rbxnelpw","mailpoet":false},"oylwpgckzmbxor9mgbeu":{"slug":"oylwpgckzmbxor9mgbeu","mailpoet":false},"jcuzqkg1xxgibibvfwbo":{"slug":"jcuzqkg1xxgibibvfwbo","mailpoet":false},"f7ih18gcuhyl2brvdwno":{"slug":"f7ih18gcuhyl2brvdwno","mailpoet":false},"wp8gefmdoinmctblpilk":{"slug":"wp8gefmdoinmctblpilk","mailpoet":false},"yenhffc2uwwfqw5r6rdx":{"slug":"yenhffc2uwwfqw5r6rdx","mailpoet":false}}		};</script>
				<script type="text/javascript">var omapi_data = {"object_id":10022,"object_key":"page","object_type":"post","term_ids":[],"wp_json":"https:\/\/coffeebreaklanguages.com\/wp-json","wc_active":false,"edd_active":false,"nonce":"50c80ca40c"};</script>
		
</body>
</html>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: coffeebreaklanguages.com @ 2026-10-26 17:25:51 by W3 Total Cache
-->