/* ==========================================================================
   Children's World Pre-School — Design System v2
   Faithful translation of the client-approved homepage design.

   Palette   : sampled directly from the approved artwork
   Display   : "Fredoka" — clean rounded playful display (headings)
   Body/UI   : "Quicksand"    — rounded, calm, readable (text, nav, buttons)

   Contents
   1. Tokens            5. Buttons & links       9. Home sections
   2. Base & type       6. Header / nav         10. Interior components
   3. Utilities         7. Dividers (SVG)       11. Footer
   4. Doodles           8. Heroes               12. Responsive
   ========================================================================== */

/* ---------- 1. Design tokens ---------- */
:root {
  /* surfaces */
  --cream:        #FCFAF5;   /* page background (approved artwork paper white) */
  --cream-soft:   #F7F3EA;   /* alternate section tint */
  --white:        #FFFFFF;

  /* brand */
  --purple:       #62469E;   /* buttons, headings, CTA band */
  --purple-dark:  #4A3178;
  --purple-soft:  #EFEAF8;   /* pastel purple (icon chips) */

  --green:        #9FBC1F;   /* scallops, tape, nature accents */
  --green-dark:   #7E9A15;
  --green-ink:    #55913F;   /* readable green for headings ("About Us") */

  --pink:         #ED517F;
  --pink-dark:    #D63E6C;

  --yellow:       #F7CD11;   /* CTA buttons, sun */
  --yellow-dark:  #D9B300;

  --orange:       #F0803F;
  --blue:         #17A5E4;   /* speech bubble, clouds */
  --blue-dark:    #0B85BC;

  /* pastel card fills (sampled) */
  --card-yellow:  #FCEEC3;
  --card-pink:    #FBE3E8;
  --card-blue:    #D8EDF5;
  --card-green:   #E7F0D2;
  --card-orange:  #FDE4CE;

  /* text */
  --ink:          #3A3350;
  --ink-soft:     #6E6880;

  /* type */
  /* Display face: Fredoka — clean rounded, playful, not condensed. This is a
     working default; see font-preview.html for the shortlist. To switch, change
     the family name here AND the Google Fonts <link> in each HTML <head>. */
  --font-display: 'Fredoka', 'Comic Sans MS', cursive;
  --font-body:    'Quicksand', 'Segoe UI', sans-serif;

  /* shape & depth */
  --radius-sm:    14px;
  --radius-md:    22px;
  --radius-lg:    36px;
  --radius-pill:  999px;
  --shadow-soft:  0 10px 30px rgba(98, 70, 158, 0.13);
  --shadow-card:  0 8px 24px rgba(98, 70, 158, 0.10);

  --container:    1180px;

  /* hand-drawn SVG dividers (data URIs, recolourable only by editing here) */
    --svg-scallop-sketch: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%0A%3Csvg id='a' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6563.9 150.48'%3E%0A  %3Cpath d='M6547.2,105.64c-2.54-13.16-7.78-25.37-14.16-37.1-12.09-22.21-31.12-33.71-56.04-35.26-28.49-1.77-52.71,8.75-73.87,27.18-5.52,4.81-10.49,10.17-15.05,15.89-1.99-1.46-2.61-3.43-3.57-5.15-8.75-15.65-19.15-30.02-33.08-41.53-15.28-12.62-32.92-19.23-52.72-17.02-27.43,3.06-50.43,15.99-70.51,34.48-7.7,7.09-14.17,15.25-20.56,24.15-6.72-10.76-13.24-20.95-21.25-30.12-30.07-34.41-68.63-45.48-111.22-30.85-28.92,9.93-50.23,29.39-65.81,55.41-.86,1.44-1.16,3.49-3.3,4.1-9.56-12.97-20.06-24.95-33.14-34.44-25.83-18.74-54.35-26.35-86.17-21.5-25.25,3.85-46.58,15.15-65.04,32.4-3.61,3.41-7.14,3.24-10.57-.5-14.2-15.47-30.84-27.19-50.92-33.95-29.64-9.98-57.9-4.74-85.29,7.82-26.33,12.07-46.57,31.2-61.44,55.94-2.35,3.9-3.39,3.46-5.74.14-5.78-8.18-12.59-15.48-20.09-22.13-21.51-19.07-46.34-30.9-75.34-31.18-36.09-.35-66.75,13.36-91.87,39.22-2.41,2.49-3.27,2.59-5.28-.27-8.56-12.18-18.49-23.12-30.69-31.83-22.5-16.07-47.12-26.26-75.2-25.5-20.6.56-39.93,6.74-58.4,15.62-19.42,9.34-35.56,22.7-48.56,39.83-2.19,2.89-3.57,3.57-6.17.27-3.48-4.43-7.41-8.57-11.46-12.5-22.41-21.75-48.95-34.95-80.51-34.13-47.97,1.24-87.76,20.72-118.74,57.55-2.41,2.87-3.36,3.45-5.68-.16-13.5-20.99-30.96-37.77-53.68-48.61-19.96-9.53-40.81-15.85-63.17-12.95-43.45,5.63-77.75,26.85-103.09,62.48-1.96,2.76-2.72,2.89-4.7.07-9.11-12.99-19.47-24.89-31.5-35.29-18.86-16.31-40.55-26.63-65.63-26.76-33.03-.18-59.98,14.19-82.11,38.17-7,7.59-12.77,16.06-18.05,25.29-1.01-1.36-1.83-2.39-2.56-3.48-8.48-12.67-18.43-24.06-30.44-33.47-26.91-21.08-56.93-31.17-91-22.74-34.5,8.53-58.44,28.67-71.48,60.02-1.4-2.94-2.9-5.84-4.46-8.71-12.09-22.21-31.12-33.71-56.04-35.26-28.49-1.77-52.71,8.75-73.87,27.18-5.52,4.81-10.49,10.17-15.05,15.89-1.99-1.46-2.61-3.43-3.57-5.15-8.75-15.65-19.15-30.02-33.08-41.53-15.28-12.62-32.92-19.23-52.72-17.02-27.43,3.06-50.43,15.99-70.51,34.48-7.7,7.09-14.17,15.25-20.56,24.15-6.72-10.76-13.24-20.95-21.25-30.12-30.07-34.41-68.63-45.48-111.22-30.85-28.92,9.93-50.23,29.39-65.81,55.41-.86,1.44-1.16,3.49-3.3,4.1-9.56-12.97-20.06-24.95-33.14-34.44-25.83-18.74-54.35-26.35-86.17-21.5-25.25,3.85-46.58,15.15-65.04,32.4-3.61,3.41-7.14,3.24-10.57-.5-14.2-15.47-30.84-27.19-50.92-33.95-29.64-9.98-57.9-4.74-85.29,7.82-26.33,12.07-46.57,31.2-61.44,55.94-2.35,3.9-3.39,3.46-5.74.14-5.78-8.18-12.59-15.48-20.09-22.13-21.51-19.07-46.34-30.9-75.34-31.18-36.09-.35-66.75,13.36-91.87,39.22-2.41,2.49-3.27,2.59-5.28-.27-8.56-12.18-18.49-23.12-30.69-31.83-22.5-16.07-47.12-26.26-75.2-25.5-20.6.56-39.93,6.74-58.4,15.62-19.42,9.34-35.56,22.7-48.56,39.83-2.19,2.89-3.57,3.57-6.17.27-3.48-4.43-7.41-8.57-11.46-12.5-22.41-21.75-48.95-34.95-80.51-34.13-47.97,1.24-87.76,20.72-118.74,57.55-2.41,2.87-3.36,3.45-5.68-.16-13.5-20.99-30.96-37.77-53.68-48.61-19.96-9.53-40.81-15.85-63.17-12.95-43.45,5.63-77.75,26.85-103.09,62.48-1.96,2.76-2.72,2.89-4.7.07-9.11-12.99-19.47-24.89-31.5-35.29-18.86-16.31-40.55-26.63-65.63-26.76-33.03-.18-59.98,14.19-82.11,38.17-7,7.59-12.77,16.06-18.05,25.29-1.01-1.36-1.83-2.39-2.56-3.48-8.48-12.67-18.43-24.06-30.44-33.47-26.91-21.08-56.93-31.17-91-22.74-30.77,7.61-53.14,24.45-66.87,50.24-12.12-21.21-30.84-32.22-55.18-33.73-28.49-1.77-52.71,8.75-73.87,27.18-5.52,4.81-10.49,10.17-15.05,15.89-1.99-1.46-2.61-3.43-3.57-5.15-8.75-15.65-19.15-30.02-33.08-41.53-15.28-12.62-32.92-19.23-52.72-17.02-27.43,3.06-50.43,15.99-70.51,34.48-7.7,7.09-14.17,15.25-20.56,24.15-6.72-10.76-13.24-20.95-21.25-30.12-30.07-34.41-68.63-45.48-111.22-30.85-28.92,9.93-50.23,29.39-65.81,55.41-.86,1.44-1.16,3.49-3.3,4.1-9.56-12.97-20.06-24.95-33.14-34.44-25.83-18.74-54.35-26.35-86.17-21.5-25.25,3.85-46.58,15.15-65.04,32.4-3.61,3.41-7.14,3.24-10.57-.5-14.2-15.47-30.84-27.19-50.92-33.95-29.64-9.98-57.9-4.74-85.29,7.82-26.33,12.07-46.57,31.2-61.44,55.94-2.35,3.9-3.39,3.46-5.74.14-5.78-8.18-12.59-15.48-20.09-22.13-21.51-19.07-46.34-30.9-75.34-31.18-36.09-.35-66.75,13.36-91.87,39.22-2.41,2.49-3.27,2.59-5.28-.27-8.56-12.18-18.49-23.12-30.69-31.83-22.5-16.07-47.12-26.26-75.2-25.5-20.6.56-39.93,6.74-58.4,15.62-19.42,9.34-35.56,22.7-48.56,39.83-2.19,2.89-3.57,3.57-6.17.27-3.48-4.43-7.41-8.57-11.46-12.5-22.41-21.75-48.95-34.95-80.51-34.13-47.97,1.24-87.76,20.72-118.74,57.55-2.41,2.87-3.36,3.45-5.68-.16-13.5-20.99-30.96-37.77-53.68-48.61-19.96-9.53-40.81-15.85-63.17-12.95-43.45,5.63-77.75,26.85-103.09,62.48-1.96,2.76-2.72,2.89-4.7.07-9.11-12.99-19.47-24.89-31.5-35.29-18.86-16.31-40.55-26.63-65.63-26.76-33.03-.18-59.98,14.19-82.11,38.17-7,7.59-12.77,16.06-18.05,25.29-1.01-1.36-1.83-2.39-2.56-3.48-8.48-12.67-18.43-24.06-30.44-33.47C157.56,7.35,127.54-2.74,93.47,5.69,54.62,15.3,29.15,39.6,17.57,78.09c-.84,2.8-.13,6.04-2.45,8.4v.03s.01,41.93.01,41.93c3.38,4.87,8.14,6.37,13.86,5.96,2.47-.18,5.01-.02,7.47.31,27.93,3.76,55.99,4.85,84.14,3.96,8.97-.28,17.94-.85,26.9-1.4,10.96-.68,21.96-1.02,32.85-2.32,19.15-2.29,37.76.06,55.94,5.75,14.96,4.69,30.04,7.14,45.72,5.93,7.79-.6,15.54-1.97,23.4-1.53,13.21.74,26.24-.37,39.11-3.51,4.68-1.15,9.46-2.77,14.17-2.71,10.4.12,20.44-1.29,30.44-3.99,13.73-3.71,27.49-6.05,41.64-1.19,8.51,2.92,17.52,4.02,26.54,4.19,15.31.29,30.61.95,45.91,1.37,32.32.9,64.5-2.4,96.74-4.15,16.84-.91,33.61-5.02,50.59-1.66,4.62.92,9.31.99,13.94.55,20.13-1.92,40.25-.72,60.36.07,33.68,1.31,67.21-1.33,100.69-4.2,18.98-1.63,37.77-2.03,56.73-.04,27.64,2.9,55.39,4.8,83.2,4.83,27.12.04,54.2-1.86,81.3-2.71,24.76-.78,49.56-.62,74.34-.82,8.48-.07,16.97-.21,25.45.04,21.32.64,42.59-.62,63.89-1.28,22.56-.69,45.04-3.3,67.72-1.79,25.23,1.68,50.53,2.81,75.81,3.1,28.78.33,57.51-1.7,86.24-3.58,19.03-1.24,38.08-2.08,57.22-1.61,19.13.47,38.28.6,57.42,1.1,27.11.71,54.18,3.09,81.35,1.32,9.59-.62,19.35-.99,28.87-.35,8.06.54,16.22,1.59,24.3,2.06,23.08,1.35,46.16,2.92,69.28,3.82,26.01,1.01,51.92.56,77.77-2.4,13.9-1.6,27.8-2.4,41.82-2.53,23.79-.23,47.38,3.64,71.28,1.69,24.39-1.99,48.9.07,73.35.87,8.47.28,16.97.6,25.39,1.49,22.82,2.41,45.68,4.35,68.62,5.23,23.62.91,47.25.13,70.88.16,5.14.01,10.27.6,15.41.6.88,0,1.91,0,2.78-.27,26.51,3.31,53.14,4.25,79.85,3.41,8.97-.28,17.94-.85,26.9-1.4,10.96-.68,21.96-1.02,32.85-2.32,19.15-2.29,37.76.06,55.94,5.75,14.96,4.69,30.04,7.14,45.72,5.93,7.79-.6,15.54-1.97,23.4-1.53,13.21.74,26.24-.37,39.11-3.51,4.68-1.15,9.46-2.77,14.17-2.71,10.4.12,20.44-1.29,30.44-3.99,13.73-3.71,27.49-6.05,41.64-1.19,8.51,2.92,17.52,4.02,26.54,4.19,15.31.29,30.61.95,45.91,1.37,32.32.9,64.5-2.4,96.74-4.15,16.84-.91,33.61-5.02,50.59-1.66,4.62.92,9.31.99,13.94.55,20.13-1.92,40.25-.72,60.36.07,33.68,1.31,67.21-1.33,100.69-4.2,18.98-1.63,37.77-2.03,56.73-.04,27.64,2.9,55.39,4.8,83.2,4.83,27.12.04,54.2-1.86,81.3-2.71,24.76-.78,49.56-.62,74.34-.82,8.48-.07,16.97-.21,25.45.04,21.32.64,42.59-.62,63.89-1.28,22.56-.69,45.04-3.3,67.72-1.79,25.23,1.68,50.53,2.81,75.81,3.1,28.78.33,57.51-1.7,86.24-3.58,19.03-1.24,38.08-2.08,57.22-1.61,19.13.47,38.28.6,57.42,1.1,27.11.71,54.18,3.09,81.35,1.32,9.59-.62,19.35-.99,28.87-.35,8.06.54,16.22,1.59,24.3,2.06,23.08,1.35,46.16,2.92,69.28,3.82,26.01,1.01,51.92.56,77.77-2.4,13.9-1.6,27.8-2.4,41.82-2.53,23.79-.23,47.38,3.64,71.28,1.69,24.39-1.99,48.9.07,73.35.87,8.47.28,16.97.6,25.39,1.49,22.82,2.41,45.68,4.35,68.62,5.23,23.62.91,47.25.13,70.88.16,5.14.01,10.27.6,15.41.6,1.22,0,2.74,0,3.71-.73,1.58.03,3.16.16,4.72.37,27.93,3.76,55.99,4.85,84.14,3.96,8.97-.28,17.94-.85,26.9-1.4,10.96-.68,21.96-1.02,32.85-2.32,19.15-2.29,37.76.06,55.94,5.75,14.96,4.69,30.04,7.14,45.72,5.93,7.79-.6,15.54-1.97,23.4-1.53,13.21.74,26.24-.37,39.11-3.51,4.68-1.15,9.46-2.77,14.17-2.71,10.4.12,20.44-1.29,30.44-3.99,13.73-3.71,27.49-6.05,41.64-1.19,8.51,2.92,17.52,4.02,26.54,4.19,15.31.29,30.61.95,45.91,1.37,32.32.9,64.5-2.4,96.74-4.15,16.84-.91,33.61-5.02,50.59-1.66,4.62.92,9.31.99,13.94.55,20.13-1.92,40.25-.72,60.36.07,33.68,1.31,67.21-1.33,100.69-4.2,18.98-1.63,37.77-2.03,56.73-.04,27.64,2.9,55.39,4.8,83.2,4.83,27.12.04,54.2-1.86,81.3-2.71,24.76-.78,49.56-.62,74.34-.82,8.48-.07,16.97-.21,25.45.04,21.32.64,42.59-.62,63.89-1.28,22.56-.69,45.04-3.3,67.72-1.79,25.23,1.68,50.53,2.81,75.81,3.1,28.78.33,57.51-1.7,86.24-3.58,19.03-1.24,38.08-2.08,57.22-1.61,19.13.47,38.28.6,57.42,1.1,27.11.71,54.18,3.09,81.35,1.32,9.59-.62,19.35-.99,28.87-.35,8.06.54,16.22,1.59,24.3,2.06,23.08,1.35,46.16,2.92,69.28,3.82,26.01,1.01,51.92.56,77.77-2.4,13.9-1.6,27.8-2.4,41.82-2.53,23.79-.23,47.38,3.64,71.28,1.69,24.39-1.99,48.9.07,73.35.87,8.47.28,16.97.6,25.39,1.49,22.82,2.41,45.68,4.35,68.62,5.23,23.62.91,47.25.13,70.88.16,5.14.01,10.27.6,15.41.6,1.99,0,4.78.02,4.68-3.16-.4-12.61,1.4-25.31-1.02-37.82ZM248.64,115.57c-1.58-2.92-.39-5.79,7.72-18.33-2.54,6.04-5.08,12.07-7.72,18.33ZM455.78,57.93c-1.43-1.4-3.3-1.41-5.23-1.57.47-2.4,2.28-3.27,4.35-4.76-.6,4.65,2.6,6.94,4.89,9.75-1.71-.7-2.76-2.19-4.01-3.42ZM840.71,82.25c1.6,2.38,6.17,2.21,5.94,7.14-2.65-2.36-5.31-3.75-5.94-7.14ZM2413.85,119.11c-1.58-2.92-.39-5.79,7.72-18.33-2.54,6.04-5.08,12.07-7.72,18.33ZM2620.99,61.47c-1.43-1.4-3.3-1.41-5.23-1.57.47-2.4,2.28-3.27,4.35-4.76-.6,4.65,2.6,6.94,4.89,9.75-1.71-.7-2.76-2.19-4.01-3.42ZM3005.92,85.79c1.6,2.38,6.17,2.21,5.94,7.14-2.65-2.36-5.31-3.75-5.94-7.14ZM4589,123.11c-1.58-2.92-.39-5.79,7.72-18.33-2.54,6.04-5.08,12.07-7.72,18.33ZM4796.14,65.47c-1.43-1.4-3.3-1.41-5.23-1.57.47-2.4,2.28-3.27,4.35-4.76-.6,4.65,2.6,6.94,4.89,9.75-1.71-.7-2.76-2.19-4.01-3.42ZM5181.07,89.79c1.6,2.38,6.17,2.21,5.94,7.14-2.65-2.36-5.31-3.75-5.94-7.14Z' style='fill: %239FBC1F%3B'/%3E%0A%3C/svg%3E");
  --svg-wave-yellow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='16' viewBox='0 0 160 16'%3E%3Cpath d='M2 9 C14 1 26 1 40 9 C54 16 66 15 80 8 C94 2 106 2 120 9 C134 16 146 15 158 8' fill='none' stroke='%23F7CD11' stroke-width='5' stroke-linecap='round'/%3E%3C/svg%3E");
  --svg-squiggle-purple: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='56' height='8' viewBox='0 0 56 8'%3E%3Cpath d='M2 5 C8 1 12 1 18 5 C24 8 28 8 34 4 C40 1 44 1 54 5' fill='none' stroke='%2362469E' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E");
  --svg-squiggle-green: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='12' viewBox='0 0 120 12'%3E%3Cpath d='M3 8 C15 2 27 2 40 7 C53 12 65 11 78 6 C91 2 103 2 117 7' fill='none' stroke='%237E9A15' stroke-width='5' stroke-linecap='round'/%3E%3C/svg%3E");
  --svg-cta-wave: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 70' preserveAspectRatio='none'%3E%3Cpath d='M0 0 H1200 V26 C1080 58 940 14 800 34 C660 54 540 12 400 34 C260 56 120 22 0 44 Z' fill='%23FCFAF5'/%3E%3C/svg%3E");
}

/* ---------- 2. Base & typography ---------- */
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: var(--font-body);
  background: var(--cream);
  color: var(--ink);
  font-size: 17px;
  line-height: 1.65;
  font-weight: 500;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

h1, h2, h3, h4 {
  font-family: var(--font-display);
  font-weight: 600;               /* Fredoka: 600 carries headings without being heavy */
  margin: 0 0 0.4em;
  line-height: 1.12;
  color: var(--purple);
  letter-spacing: 0;              /* Fredoka is already open; no extra tracking needed */
}
h1 { font-size: clamp(2.2rem, 4.3vw, 3.25rem); }
h2 { font-size: clamp(1.75rem, 3vw, 2.4rem); }
h3 { font-size: 1.5rem; }
h4 { font-size: 1.22rem; }

p { margin: 0 0 1em; }
a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
ul { margin: 0; padding: 0; list-style: none; }
button { font-family: inherit; cursor: pointer; }
address { font-style: normal; }

.container {
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 28px;
  position: relative;
}

/* small hand-written kicker above headings — used with restraint */
.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-display);
  font-size: 1.15rem;
  color: var(--green-ink);
  letter-spacing: 0.03em;
  margin-bottom: 0.2em;
}

.section-head {
  text-align: center;
  max-width: 660px;
  margin: 0 auto 46px;
}
.section-head.align-left { text-align: left; margin-left: 0; }
.section-head p { color: var(--ink-soft); font-size: 1.02rem; }
.section-head .with-hearts { position: relative; display: inline-block; }

/* colour helpers for hand-lettered words */
.c-purple { color: var(--purple); }
.c-pink   { color: var(--pink); }
.c-green  { color: var(--green-ink); }
.c-orange { color: var(--orange); }
.c-blue   { color: var(--blue-dark); }
.c-yellow { color: var(--yellow-dark); }

/* green squiggle under a heading (e.g. About Us) */
.squiggle-under {
  display: inline-block;
  padding-bottom: 12px;
  background: var(--svg-squiggle-green) no-repeat left bottom / 120px 12px;
}

/* ---------- 3. Accessibility utilities ---------- */
.skip-link {
  position: absolute;
  left: -9999px; top: 0;
  background: var(--purple);
  color: #fff;
  padding: 10px 18px;
  border-radius: var(--radius-sm);
  z-index: 999;
}
.skip-link:focus { left: 16px; top: 16px; }
:focus-visible { outline: 3px solid var(--purple); outline-offset: 3px; }
.visually-hidden {
  position: absolute; width: 1px; height: 1px;
  margin: -1px; padding: 0; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ---------- 4. Doodles ---------- */
.doodle {
  position: absolute;
  pointer-events: none;
  user-select: none;
  z-index: 1;
}
/* Doodles that sit in the gutter beside a centred card — hide them once the
   gutter is too narrow to hold them without touching the card. */
@media (max-width: 1120px) { .doodle.hide-narrow { display: none; } }

.float-slow { animation: floaty 7s ease-in-out infinite; }
.float-fast { animation: floaty 5s ease-in-out infinite; }
@keyframes floaty {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-10px); }
}
/* hearts that sit beside centred section headings (Learning Through Play) */
.heading-hearts {
  position: absolute;
  width: 100px;
  top: -14px;
  right: -172px;   /* sits a heart-width clear of the heading */
}

/* ---------- 5. Buttons & links ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 0.98rem;
  /* <button> doesn't inherit line-height the way <a> does; without this, a
     button.btn renders shorter than an a.btn sitting next to it. */
  line-height: inherit;
  padding: 13px 26px;
  border-radius: var(--radius-pill);
  border: 2px solid transparent;
  cursor: pointer;
  transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease, color 0.18s ease;
  white-space: nowrap;
}
.btn:hover { transform: translateY(-2px); }
.btn-primary {
  background: var(--purple);
  color: #fff;
  box-shadow: 0 8px 20px rgba(98, 70, 158, 0.32);
}
.btn-primary:hover { background: var(--purple-dark); }
.btn-outline {
  background: #fff;
  color: var(--purple);
  border-color: var(--purple);
}
.btn-outline:hover { background: var(--purple); color: #fff; }
.btn-yellow {
  background: var(--yellow);
  color: var(--purple-dark);
  box-shadow: 0 8px 20px rgba(217, 179, 0, 0.35);
}
.btn-yellow:hover { background: #FFDA2E; }
.btn-white { background: #fff; color: var(--purple); }
.btn-block { width: 100%; justify-content: center; }

.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-body);
  font-weight: 700;
  color: var(--purple);
}
.link-arrow:hover { color: var(--purple-dark); text-decoration: underline; }

/* ---------- 6. Header / navigation ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: rgba(252, 250, 245, 0.94);
  backdrop-filter: blur(8px);
  border-bottom: 1px solid rgba(98, 70, 158, 0.08);
}
.nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 28px;
  max-width: var(--container);
  margin: 0 auto;
  gap: 16px;
}
.nav-logo { display: flex; align-items: center; flex-shrink: 0; }
.nav-logo img { width: 82px; height: 82px; }
.nav-logo img.home-logo { width: 123px; height: 123px; }
.nav-links {
  display: flex;
  align-items: center;
  gap: 26px;
  font-weight: 700;
  font-size: 0.95rem;
}
.nav-links a {
  position: relative;
  display: block;
  line-height: 1.4;
  padding: 6px 2px 10px;
  color: var(--ink);
  transition: color 0.15s ease;
}
.nav-links a:hover { color: var(--purple); }
.nav-links a.active {
  color: var(--purple);
  background: var(--svg-squiggle-purple) no-repeat center bottom / 44px 8px;
}
.nav-links li.has-dropdown { position: relative; }
.nav-dropdown-toggle {
  background: none;
  border: none;
  cursor: pointer;
  font-family: inherit;
  font-weight: 700;
  font-size: 0.95rem;
  color: var(--ink);
  display: flex;
  align-items: center;
  line-height: 1.4;
  gap: 5px;
  padding: 6px 2px 10px;
  transition: color 0.15s ease;
}
.nav-dropdown-toggle:hover { color: var(--purple); }
.nav-caret {
  width: 10px; height: 7px;
  stroke: currentColor;
  stroke-width: 2;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: transform 0.15s ease;
  flex-shrink: 0;
}
.has-dropdown.open .nav-caret { transform: rotate(180deg); }
.nav-dropdown {
  position: absolute;
  top: 100%; left: 0;
  background: #fff;
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-soft);
  padding: 8px;
  min-width: 210px;
  display: none;
  z-index: 50;
}
.has-dropdown.open .nav-dropdown { display: block; }
.nav-dropdown li { margin: 0; }
.nav-dropdown a {
  display: block;
  padding: 10px 14px;
  border-radius: var(--radius-sm);
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--ink);
  white-space: nowrap;
  background: none;
}
.nav-dropdown a:hover { background: var(--cream-soft); color: var(--purple); }
.nav-cta { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
.nav-cta .btn { padding: 11px 22px; font-size: 0.92rem; }
.nav-heart { width: 33px; transform: rotate(12deg); }
.nav-toggle { display: none; background: none; border: none; padding: 6px; }
.nav-toggle span {
  display: block;
  width: 26px; height: 3px;
  background: var(--purple-dark);
  margin: 5px 0;
  border-radius: 2px;
}

/* ---------- 7. Hand-drawn dividers (pure SVG, no rasters) ---------- */
/* Green scalloped divider — hand-sketched brush-stroke wave.
   This artwork's own left/right edges line up, so it tiles edge-to-edge
   with no visible seam — true repeat-x, scaled to a fixed thickness with
   its native aspect ratio preserved (no stretching/distortion). */
.scallop-band,
.wave-divider.wave-green {           /* legacy class upgraded */
  width: 100%;
  height: 58px;
  margin: 34px auto;
  background: var(--svg-scallop-sketch) repeat-x center / auto 58px;
}

/* Yellow hand-drawn wavy line */
.wave-divider-yellow {
  height: 18px;
  width: min(920px, 88%);
  margin: 8px auto;
  background: var(--svg-wave-yellow) repeat-x center / 160px 16px;
}

/* ---------- 8. Heroes ---------- */
/* Home hero (split layout, centred text column) */
.home-hero {
  position: relative;
  z-index: 2;                       /* keeps the overflowing speech bubble above the scallop-band that follows */
  padding: 22px 0 4px;
}
.home-hero-grid {
  display: grid;
  grid-template-columns: 1fr 1.08fr;
  gap: 14px;
  align-items: center;
  position: relative;
  z-index: 2;
}
.home-hero-text { text-align: center; padding: 10px 0 12px; }
.home-hero h1 {
  margin-bottom: 0.3em;
  font-size: clamp(2.4rem, 4.3vw, 3.35rem);
  line-height: 1.04;
}
.home-hero p.lead {
  font-size: 1.05rem;
  color: var(--ink-soft);
  max-width: 380px;
  margin: 0 auto 1.3em;
}
.home-hero-actions {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
  justify-content: center;
}

/* organic cut-out photo + orbiting doodles */
.home-hero-photo {
  position: relative;
  display: flex;
  justify-content: center;
  padding: 12px 18px 18px 4px;
}
.hero-cutout {
  width: min(520px, 100%);
  filter: drop-shadow(0 18px 28px rgba(74, 49, 120, 0.16));
}
/* Hero slideshow: 4 photos crossfade in place, sharing the exact same
   organic-blob frame so the shape never jumps between slides. The first
   slide stays in normal flow (giving the container its size); the rest
   sit absolutely on top of it at identical dimensions, and JS toggles
   which one is opaque. */
.hero-slideshow {
  position: relative;
  width: min(390px, 100%);
}
.hero-slideshow .slide {
  display: block;
  width: 100%;
  opacity: 0;
  transition: opacity 1.1s ease;
}
.hero-slideshow .slide:first-child { position: relative; }
.hero-slideshow .slide:not(:first-child) { position: absolute; top: 0; left: 0; }
.hero-slideshow .slide.active { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  .hero-slideshow .slide { transition: none; }
}
.hero-butterfly { position: absolute; top: -4%; left: 2%; width: 168px; z-index: 4; }
.hero-handprint { position: absolute; width: 100px; z-index: 3; }
.speech-bubble  {
  position: absolute;
  bottom: -6%; right: -3%;
  width: clamp(175px, 20vw, 260px);
  z-index: 5;
  filter: drop-shadow(0 8px 14px rgba(11, 133, 188, 0.25));
}

/* Interior page hero */
.page-hero {
  position: relative;
  padding: 52px 0 34px;
  overflow: hidden;
  text-align: center;
}
.page-hero h1 { margin-bottom: 0.25em; }
.page-hero p.lead {
  max-width: 620px;
  margin: 0 auto;
  color: var(--ink-soft);
  font-size: 1.05rem;
}

/* ---------- 9. Home page sections ---------- */
.section { padding: 72px 0; position: relative; }
/* Anchored sections: the header is sticky, so without this an in-page link lands
   with the section's eyebrow and heading hidden underneath it. */
section[id] { scroll-margin-top: 118px; }
.section.tight { padding: 52px 0; }
.section-cream { background: var(--cream); }
.section-soft  { background: var(--cream-soft); }

/* About Us split */
.split {
  display: grid;
  grid-template-columns: 0.95fr 1.05fr;
  gap: 56px;
  align-items: center;
}
.split.reverse .split-media { order: 0; }
.split-media { position: relative; }
#about-teaser .split-text { max-width: 75%; }

/* tilted photo card with craft tape */
.polaroid {
  position: relative;
  background: #fff;
  padding: 13px;
  border-radius: 14px;
  box-shadow: 0 14px 34px rgba(74, 49, 120, 0.16);
  transform: rotate(-3deg);
  max-width: 470px;
  margin: 0 auto;
}
.polaroid .inner-photo {
  border-radius: 8px;
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  overflow: hidden;
  background: linear-gradient(135deg, #E9F3D2, #FCEEC3);
}
.polaroid .tape {
  position: absolute;
  width: 88px;
  z-index: 3;
}
.polaroid .tape.tl { top: -20px; left: -26px; transform: rotate(-6deg); }
.polaroid .tape.tr { top: -20px; right: -26px; transform: rotate(6deg); }
.polaroid .corner-heart {
  position: absolute;
  bottom: -20px; left: -22px;
  width: 58px;
  z-index: 3;
}
/* labelled placeholder inside a photo frame (keeps final layout intact) */
.photo-placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  text-align: center;
  font-family: var(--font-display);
  font-size: 1.15rem;
  color: var(--purple);
  padding: 18px;
  width: 100%;
  height: 100%;
}
.photo-placeholder img.pp-icon { width: 42px; opacity: 0.85; }
.photo-placeholder small {
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 0.78rem;
  color: var(--ink-soft);
}

/* Class cards */
.classes-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 30px;
  margin-top: 72px;
}
.class-card {
  border-radius: var(--radius-md);
  padding: 112px 26px 30px;
  text-align: center;
  position: relative;
  z-index: 2;
  transition: transform 0.2s ease;
}
.class-card:hover { transform: translateY(-6px); }
.class-card.butterflies { background: var(--card-yellow); }
.class-card.fireflies   { background: var(--card-pink); }
.class-card.jungle      { background: var(--card-blue); }
.class-photo-ring {
  width: 152px; height: 152px; aspect-ratio: 1 / 1;
  border-radius: 50%;
  position: absolute;
  top: -56px; left: 50%;
  transform: translateX(-50%);
  border: 6px solid #fff;
  box-shadow: 0 10px 22px rgba(58, 51, 80, 0.16);
  overflow: hidden;
  background: linear-gradient(160deg, #F2ECDD, #E4DFF0);
}
.class-photo-ring img.ring-photo { width: 100%; height: 100%; object-fit: cover; }
.class-mascot {
  position: absolute;
  width: 52px;
  top: 22px;
  left: calc(50% - 118px);
  z-index: 2;
  transform: rotate(-8deg);
  filter: drop-shadow(0 2px 3px rgba(0,0,0,0.14));
}
.class-card h3 { margin-bottom: 0; font-size: 1.55rem; }
.class-card.butterflies h3 { color: var(--purple); }
.class-card.fireflies h3   { color: var(--pink-dark); }
.class-card.jungle h3      { color: var(--blue); }
.class-card .age {
  font-weight: 700;
  font-size: 0.9rem;
  color: var(--ink);
  margin: 2px 0 10px;
  display: block;
}
.class-card p.desc { color: var(--ink-soft); font-size: 0.95rem; margin-bottom: 0; }
/* Class name = real text with the class icon beside it (matches the approved mockup). */
.class-card h3.class-name {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  margin: 0 0 2px;
  font-size: 1.85rem;
  line-height: 1.1;
}
.class-name .class-icon {
  height: 40px;
  width: auto;
  flex: 0 0 auto;
  filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.12));
}
@media (max-width: 560px) {
  .class-card h3.class-name { font-size: 1.6rem; }
  .class-name .class-icon { height: 34px; }
}

/* Learning Through Play photo strip */
.gallery-strip {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 20px;
  padding: 14px 6px 26px;
}
.gallery-tile {
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-sm);
  overflow: hidden;
  position: relative;
  box-shadow: var(--shadow-card);
  border: 5px solid #fff;
  transition: transform 0.2s ease;
}
.gallery-tile > img.tile-photo { width: 100%; height: 100%; object-fit: cover; }
.gallery-tile:hover { transform: scale(1.05) rotate(0deg) !important; z-index: 5; }
.gallery-tile:has(> img.tile-photo) { cursor: pointer; }
.gallery-tile:has(> img.tile-photo):focus-visible { outline: 3px solid var(--purple); outline-offset: 3px; }

/* ---------- Gallery lightbox ---------- */
.lightbox-overlay {
  position: fixed;
  inset: 0;
  background: rgba(42, 33, 66, 0.92);
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 76px 90px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.22s ease;
}
.lightbox-overlay.open { opacity: 1; pointer-events: auto; }
.lightbox-figure {
  position: relative;
  max-width: min(920px, 100%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
}
.lightbox-img-wrap {
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.45);
  border: 8px solid #fff;
  background: #fff;
  max-height: 74vh;
  transform: rotate(-1deg);
}
.lightbox-img-wrap img {
  display: block;
  max-width: 100%;
  max-height: 74vh;
  object-fit: contain;
}
.lightbox-caption {
  color: #fff;
  font-family: var(--font-body);
  font-weight: 700;
  text-align: center;
  font-size: 0.98rem;
}
.lightbox-counter {
  color: #C9BEE0;
  font-weight: 600;
  font-size: 0.85rem;
}
.lightbox-close {
  position: absolute;
  top: -18px; right: -18px;
  width: 46px; height: 46px; aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: var(--yellow);
  color: var(--purple-dark);
  border: none;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  box-shadow: 0 8px 18px rgba(0, 0, 0, 0.3);
  transition: transform 0.15s ease;
}
.lightbox-close:hover { transform: scale(1.08) rotate(90deg); }
.lightbox-close svg { width: 20px; height: 20px; stroke: currentColor; stroke-width: 2.6; fill: none; stroke-linecap: round; }

/* hand-drawn sketchy arrow buttons */
.lightbox-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 64px; height: 64px; aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.1);
  border: none;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: transform 0.15s ease, background 0.15s ease;
}
.lightbox-arrow:hover { background: rgba(255, 255, 255, 0.18); transform: translateY(-50%) scale(1.08); }
.lightbox-arrow.prev { left: -84px; }
.lightbox-arrow.next { right: -84px; }
.lightbox-arrow svg {
  width: 40px; height: 30px;
  stroke: var(--yellow);
  stroke-width: 4.5;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.3));
}
.lightbox-arrow.next svg { transform: scaleX(-1); }
.lightbox-arrow[disabled] { opacity: 0.3; cursor: default; }
.lightbox-arrow[disabled]:hover { background: rgba(255, 255, 255, 0.1); transform: translateY(-50%); }

@media (max-width: 900px) {
  .lightbox-overlay { padding: 60px 20px; }
  .lightbox-arrow { width: 50px; height: 50px; background: rgba(255, 255, 255, 0.14); }
  .lightbox-arrow.prev { left: 4px; }
  .lightbox-arrow.next { right: 4px; }
  .lightbox-close { top: 6px; right: 6px; }
}
.gallery-tile:nth-child(5n+1) { transform: rotate(-2.5deg); }
.gallery-tile:nth-child(5n+2) { transform: rotate(2deg); margin-top: 14px; }
.gallery-tile:nth-child(5n+3) { transform: rotate(-1.5deg); }
.gallery-tile:nth-child(5n+4) { transform: rotate(2.5deg); margin-top: 10px; }
.gallery-tile:nth-child(5n+5) { transform: rotate(-1deg); }
.gallery-tile.tape-tl::before,
.gallery-tile.tape-tr::after {
  content: "";
  position: absolute;
  top: -12px;
  width: 58px; height: 26px;
  z-index: 6;
  background: url('../images/03_green_tape_left.png') center/contain no-repeat;
}
.gallery-tile.tape-tl::before { left: -14px; transform: rotate(-8deg); }
.gallery-tile.tape-tr::after  { right: -14px; transform: rotate(8deg); background-image: url('../images/03_green_tape_right.png'); }
.gallery-tile.placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 8px;
  color: var(--purple);
  font-family: var(--font-display);
  font-size: 1.05rem;
  text-align: center;
  padding: 10px;
}
.gallery-tile img.icon { width: 34px; }
.ph-1 { background: #EAF3CF; }
.ph-2 { background: var(--card-yellow); }
.ph-3 { background: var(--card-pink); }
.ph-4 { background: #FDE4CE; }
.ph-5 { background: var(--card-blue); }
.ph-6 { background: var(--purple-soft); }

/* Generic "photo not supplied yet" placeholder graphic — used for both the
   gallery grid tiles and the larger photo frames (About Us polaroids) until
   real photos are supplied. */
.gallery-tile.placeholder-photo { padding: 0; }
.gallery-tile .placeholder-img { width: 100%; height: 100%; object-fit: cover; display: block; }
.gallery-tile .placeholder-label {
  position: absolute;
  left: 50%; bottom: 10px;
  transform: translateX(-50%);
  background: rgba(58, 51, 80, 0.78);
  color: #fff;
  font-family: var(--font-body);
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.01em;
  padding: 4px 12px;
  border-radius: var(--radius-pill);
  white-space: nowrap;
  z-index: 2;
}

/* Why Parents Choose Us */
.feature-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 28px 0;
}
.feature-grid.cols-3 { grid-template-columns: repeat(3, 1fr); gap: 28px 18px; }
.feature-grid.cols-5 { grid-template-columns: repeat(5, 1fr); gap: 28px 18px; }
.feature { text-align: center; padding: 6px 16px; position: relative; }
.feature-grid:not(.cols-3):not(.cols-5) .feature:not(:last-child)::after {
  content: "";
  position: absolute;
  right: 0; top: 12%;
  height: 76%;
  border-right: 2px dashed rgba(98, 70, 158, 0.16);
}
.feature .icon-circle {
  width: 66px;
  height: 66px;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  object-fit: contain;
  margin: 0 auto 12px;
  flex-shrink: 0;
}
.feature .icon-circle.chip {
  border-radius: 50%;
  aspect-ratio: 1 / 1;
  background: var(--purple-soft);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.feature .icon-circle.chip svg,
.feature .icon-circle.chip img { width: 44%; height: 44%; object-fit: contain; }
/* accent-matched chip colours — either from an ancestor .feature.c-* (icon rows)
   or applied directly on the chip itself (value list, info rows) */
.c-pink   .icon-circle.chip, .icon-circle.chip.c-pink   { background: var(--card-pink);   color: var(--pink-dark); }
.c-yellow .icon-circle.chip, .icon-circle.chip.c-yellow { background: var(--card-yellow); color: var(--yellow-dark); }
.c-blue   .icon-circle.chip, .icon-circle.chip.c-blue   { background: var(--card-blue);   color: var(--blue-dark); }
.c-green  .icon-circle.chip, .icon-circle.chip.c-green  { background: var(--card-green);  color: var(--green-ink); }
.c-purple .icon-circle.chip, .icon-circle.chip.c-purple { background: var(--purple-soft); color: var(--purple); }
.c-orange .icon-circle.chip, .icon-circle.chip.c-orange { background: var(--card-orange); color: var(--orange); }
.value-item .icon-circle {
  width: 48px; height: 48px;
  margin: 0;
  flex-shrink: 0;
}
/* small circular icon chips used outside .feature (value lists, info rows) */
.icon-chip-sm {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 42px; height: 42px; aspect-ratio: 1 / 1;
  border-radius: 50%;
  flex-shrink: 0;
  overflow: hidden;
}
.icon-chip-sm svg { width: 46%; height: 46%; }
/* consistent stroke styling for every hand-authored line icon */
.icon-svg {
  width: 100%; height: 100%;
  stroke: currentColor;
  stroke-width: 1.8;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.icon-svg.filled { fill: currentColor; stroke: none; }
.feature h4 { margin-bottom: 2px; font-size: 1.3rem; }
.feature p { color: var(--ink-soft); font-size: 0.92rem; margin: 0; }
.feature.c-pink h4   { color: var(--pink-dark); }
.feature.c-yellow h4 { color: var(--yellow-dark); }
.feature.c-blue h4   { color: var(--blue-dark); }
.feature.c-green h4  { color: var(--green-ink); }
.feature.c-purple h4 { color: var(--purple); }
.feature.c-orange h4 { color: var(--orange); }

/* ---------- CTA band — purple with wavy hand-cut edges ---------- */
.cta-band-full {
  background: var(--purple);
  position: relative;
  text-align: center;
  color: #fff;
  margin-top: 26px;
  padding: 96px 40px 110px;
}
.cta-band-full::before,
.cta-band-full::after {
  content: "";
  position: absolute;
  left: 0; right: 0;
  height: 44px;
  background: var(--svg-cta-wave) no-repeat center / 100% 100%;
  z-index: 1;
}
.cta-band-full::before { top: -1px; }
.cta-band-full::after  { bottom: -1px; transform: rotate(180deg); }
.cta-band-full h2 { color: #fff; margin-bottom: 0.25em; position: relative; z-index: 2; }
.cta-band-full p  { color: #E6DCF7; max-width: 480px; margin: 0 auto 26px; position: relative; z-index: 2; }
.cta-band-full .cta-actions { position: relative; z-index: 2; display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.cta-photo-circle {
  position: absolute;
  width: 212px; height: 212px; aspect-ratio: 1 / 1;
  border-radius: 50%;
  overflow: hidden;
  border: 7px solid #fff;
  box-shadow: 0 12px 26px rgba(0, 0, 0, 0.22);
  z-index: 4;
}
.cta-photo-circle img { width: 100%; height: 100%; object-fit: cover; }
.cta-photo-circle.left  { left: 5%;  top: -34px; }
.cta-photo-circle.right { right: 5%; bottom: -30px; }
.cta-doodle { position: absolute; z-index: 4; pointer-events: none; }

/* simple rounded CTA card used inside interior pages */
.cta-band {
  background: var(--purple);
  border-radius: var(--radius-lg);
  padding: 48px 40px;
  position: relative;
  overflow: hidden;
  text-align: center;
  color: #fff;
}
.cta-band h2 { color: #fff; margin-bottom: 0.25em; position: relative; z-index: 2; }
.cta-band p  { color: #E6DCF7; max-width: 480px; margin: 0 auto 24px; position: relative; z-index: 2; }
.cta-band .doodle { opacity: 0.85; }

/* ---------- 10. Interior components ---------- */
.card {
  background: #fff;
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-card);
  padding: 30px;
}

.value-list { display: flex; flex-direction: column; gap: 18px; }
.value-item {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  background: #fff;
  border-radius: var(--radius-md);
  padding: 20px 22px;
  box-shadow: var(--shadow-card);
}
.value-item img { width: 42px; flex-shrink: 0; }
.value-item h4 { margin-bottom: 4px; }
.value-item p { margin: 0; color: var(--ink-soft); font-size: 0.95rem; }

.team-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 24px;
  max-width: 900px;
  margin: 0 auto;
}
.team-card {
  text-align: center;
  border-radius: var(--radius-md);
  padding: 24px 18px;
  box-shadow: var(--shadow-card);
}
.team-card.c-purple { background: var(--purple-soft); }
.team-card.c-pink   { background: var(--card-pink); }
.team-card.c-yellow { background: var(--card-yellow); }
.team-card.c-blue   { background: var(--card-blue); }
.team-card.c-orange { background: var(--card-orange); }
.team-card.c-green  { background: var(--card-green); }
.team-avatar {
  width: 84px; height: 84px; aspect-ratio: 1 / 1;
  border-radius: 50%;
  margin: 0 auto 14px;
  overflow: hidden;
  border: 4px solid #fff;
  box-shadow: 0 4px 10px rgba(58, 51, 80, 0.14);
}
.team-avatar img { width: 100%; height: 100%; object-fit: cover; }
.team-card h4 { margin-bottom: 2px; font-size: 1.25rem; }
.team-card span.role { color: var(--ink-soft); font-size: 0.88rem; font-weight: 600; }

.day-list { display: flex; flex-direction: column; }
.day-item {
  display: grid;
  grid-template-columns: 90px 1fr;
  gap: 20px;
  padding: 20px 0;
  border-bottom: 2px dashed rgba(98, 70, 158, 0.18);
}
.day-item:last-child { border-bottom: none; }
.day-time { font-family: var(--font-display); color: var(--purple); font-size: 1.25rem; }
.day-item h4 { margin-bottom: 4px; }
.day-item p { margin: 0; color: var(--ink-soft); font-size: 0.95rem; }

.pricing-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 22px;
  margin-bottom: 22px;
}
.price-card {
  background: #fff;
  border-radius: var(--radius-md);
  padding: 26px 24px;
  box-shadow: var(--shadow-card);
  border-top: 6px solid var(--green);
}
.price-card.alt  { border-top-color: var(--pink); }
.price-card.gold { border-top-color: var(--yellow); }
.price-card h4 {
  color: var(--ink-soft);
  margin-bottom: 6px;
  font-family: var(--font-body);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.8rem;
}
.price-card .amount { font-family: var(--font-display); font-size: 2rem; color: var(--purple-dark); line-height: 1.2; }
.price-card .amount span { font-size: 0.9rem; color: var(--ink-soft); font-family: var(--font-body); font-weight: 600; }

.fee-table {
  width: 100%;
  border-collapse: collapse;
  background: #fff;
  border-radius: var(--radius-md);
  overflow: hidden;
}
.fee-table th, .fee-table td { text-align: left; padding: 16px 22px; font-size: 0.96rem; }
.fee-table thead th {
  background: var(--purple);
  color: #fff;
  font-family: var(--font-body);
  font-weight: 700;
}
.fee-table tbody tr:nth-child(even) { background: var(--cream-soft); }
.fee-table td.amt { font-weight: 700; color: var(--purple-dark); white-space: nowrap; }

.note-box {
  background: #FFF6DC;
  border: 2px dashed var(--yellow-dark);
  border-radius: var(--radius-sm);
  padding: 16px 20px;
  font-size: 0.92rem;
  color: #7A5B00;
  margin-top: 18px;
}

.form-card {
  background: #fff;
  border-radius: var(--radius-lg);
  padding: 40px;
  box-shadow: var(--shadow-soft);
}
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px 20px; }
.form-field { display: flex; flex-direction: column; gap: 6px; }
.form-field.full { grid-column: 1 / -1; }
.form-field label { font-weight: 700; font-size: 0.92rem; color: var(--purple-dark); }
.form-field .req { color: var(--pink-dark); }
.form-field input,
.form-field select,
.form-field textarea {
  font-family: var(--font-body);
  font-size: 0.98rem;
  padding: 13px 16px;
  border-radius: var(--radius-sm);
  border: 2px solid #EBE4F6;
  background: var(--cream);
  color: var(--ink);
  transition: border-color 0.15s ease;
}
.form-field input:focus,
.form-field select:focus,
.form-field textarea:focus { border-color: var(--purple); outline: none; }
.form-field textarea { resize: vertical; min-height: 110px; }
.radio-group { display: flex; gap: 14px; flex-wrap: wrap; }
.radio-group label {
  display: flex; align-items: center; gap: 8px;
  font-weight: 600; font-size: 0.93rem; color: var(--ink);
  background: var(--cream); border: 2px solid #EBE4F6;
  padding: 10px 16px; border-radius: var(--radius-pill);
  cursor: pointer;
}
.radio-group input { accent-color: var(--purple); }
.form-note { font-size: 0.86rem; color: var(--ink-soft); margin-top: 10px; }
.form-success {
  display: none;
  align-items: center;
  gap: 12px;
  background: #F0F7E4;
  border: 2px solid var(--green);
  color: #4A6E14;
  border-radius: var(--radius-sm);
  padding: 16px 20px;
  font-weight: 600;
  margin-top: 20px;
}
.form-success[data-fs-active] { display: flex; }
.form-success img { width: 26px; }
.form-error {
  display: none;
  align-items: center;
  gap: 12px;
  background: #FCEAEA;
  border: 2px solid var(--pink-dark);
  color: #8A2A3E;
  border-radius: var(--radius-sm);
  padding: 16px 20px;
  font-weight: 600;
  margin-top: 20px;
}
.form-error[data-fs-active] { display: flex; }
.form-error a { color: #8A2A3E; text-decoration: underline; }
.btn[disabled] { opacity: 0.65; cursor: default; transform: none !important; }

/* @formspree/ajax field-level integration — the library injects its own
   default red styling at runtime; these rules (loaded after, and scoped
   to .form-card) override it to match the site's palette instead. */
.form-card [data-fs-field][aria-invalid="true"] { border-color: var(--pink-dark); }
.form-card span[data-fs-error] {
  display: block;
  color: var(--pink-dark);
  font-size: 0.82rem;
  font-weight: 600;
  margin-top: 5px;
}
.form-card span[data-fs-error]:empty { margin-top: 0; }


.info-card {
  background: var(--purple);
  color: #fff;
  border-radius: var(--radius-lg);
  padding: 36px 32px;
  position: relative;
  overflow: hidden;
}
.info-card h3 { color: #fff; }
.info-row { display: flex; gap: 14px; align-items: flex-start; margin-bottom: 18px; position: relative; z-index: 2; }
.info-row .icon-wrap {
  width: 40px; height: 40px; aspect-ratio: 1 / 1; border-radius: 50%;
  background: rgba(255, 255, 255, 0.16);
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.info-row .icon-wrap img, .info-row .icon-wrap svg { width: 20px; height: 20px; object-fit: contain; }
.info-row strong { display: block; margin-bottom: 2px; }
.info-row span, .info-row a { color: #E6DCF7; font-size: 0.94rem; }
.info-row a:hover { color: #fff; text-decoration: underline; }
.map-frame {
  border-radius: var(--radius-md);
  overflow: hidden;
  box-shadow: var(--shadow-card);
  border: 6px solid #fff;
  width: 100%;
  height: 100%;
  min-height: 300px;    /* floor for mobile, where the grid collapses to one column */
}

.downloads-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.download-card {
  background: #fff;
  border-radius: var(--radius-md);
  padding: 24px;
  box-shadow: var(--shadow-card);
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.download-card .dl-icon {
  width: 46px; height: 46px; aspect-ratio: 1 / 1;
  border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  background: var(--cream-soft);
  flex-shrink: 0;
}
.download-card .dl-icon img, .download-card .dl-icon svg { width: 24px; height: 24px; object-fit: contain; }
.download-card h4 { margin-bottom: 0; font-size: 1.18rem; }
.download-card p.meta { font-size: 0.85rem; color: var(--ink-soft); margin: 0; }
.download-card .dl-action {
  margin-top: auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-weight: 700;
  font-size: 0.9rem;
  color: var(--purple);
  padding-top: 8px;
}
/* Download cards are real <button>s while the PDFs aren't live yet — reset the
   browser's button chrome so they still look like cards. */
.download-card {
  font: inherit;
  color: inherit;
  text-align: left;
  border: none;
  cursor: pointer;
  width: 100%;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.download-card:hover { transform: translateY(-3px); box-shadow: 0 12px 26px rgba(58, 51, 80, 0.14); }
.download-card:focus-visible { outline: 3px solid var(--purple); outline-offset: 3px; }

/* "Coming soon" dialog for the not-yet-live downloads */
.soon-overlay {
  position: fixed; inset: 0; z-index: 200;
  background: rgba(58, 51, 80, 0.55);
  display: none; align-items: center; justify-content: center;
  padding: 24px;
}
.soon-overlay.open { display: flex; }
.soon-card {
  background: #fff;
  border-radius: var(--radius-md);
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.25);
  padding: 32px 28px 26px;
  max-width: 420px; width: 100%;
  text-align: center;
  position: relative;
}
.soon-card h3 { margin-bottom: 8px; }
.soon-card p { color: var(--ink-soft); margin-bottom: 20px; }
.soon-card p a { color: var(--purple); font-weight: 700; text-decoration: underline; }
.soon-emoji { font-size: 2.4rem; line-height: 1; margin-bottom: 10px; }

.badge-soon {
  font-size: 0.68rem;
  background: #FFE9B4;
  color: #8A5A00;
  padding: 3px 10px;
  border-radius: var(--radius-pill);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.steps-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.steps-row.cols-5 { grid-template-columns: repeat(5, 1fr); }
.step { text-align: center; position: relative; padding: 0 10px; }
.step .step-num {
  width: 52px; height: 52px; aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: var(--yellow);
  color: var(--purple-dark);
  font-family: var(--font-display);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto 14px;
  font-size: 1.35rem;
}
.step h4 { margin-bottom: 4px; }
.step p { color: var(--ink-soft); font-size: 0.93rem; margin: 0; }

.hours-table { width: 100%; font-size: 0.95rem; }
.hours-table td { padding: 6px 0; color: #E6DCF7; }
.hours-table td:last-child { text-align: right; font-weight: 700; color: #fff; }

.two-col { display: grid; grid-template-columns: 1.3fr 1fr; gap: 32px; align-items: start; }
.two-col.narrow-first { grid-template-columns: 1fr 1.2fr; align-items: stretch; }

/* ---------- 11. Footer — cream paper, purple headings, green scallop base ---------- */
.site-footer {
  background: var(--cream);
  color: var(--ink);
  position: relative;
  padding-top: 34px;
}
.footer-inner {
  display: grid;
  grid-template-columns: 1.15fr 0.7fr 1.15fr;
  gap: 24px;
  padding: 26px 0 40px;
  align-items: start;
  position: relative;
  z-index: 2;
}
.footer-col h4 {
  font-family: var(--font-display);
  color: var(--purple);
  font-size: 1.55rem;
  margin-bottom: 12px;
}
.footer-col.center { text-align: center; padding-top: 6px; }
.footer-col.center .footer-logo { width: 190px; margin: 0 auto; }
.footer-col.right { text-align: right; }
.footer-contact li {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  margin-bottom: 14px;
  font-size: 0.95rem;
  font-weight: 600;
}
.footer-contact a:hover { color: var(--purple); text-decoration: underline; }
.f-ico {
  width: 30px; height: 30px; aspect-ratio: 1 / 1;
  flex-shrink: 0;
  border-radius: 50%;
  background: var(--purple);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-top: 1px;
}
.f-ico svg { width: 15px; height: 15px; }
.f-hours {
  font-size: 0.98rem;
  font-weight: 600;
  margin-bottom: 20px;
  line-height: 1.7;
}
.f-hours strong { color: var(--purple-dark); font-weight: 700; }
.footer-social {
  display: inline-flex;
  width: 40px; height: 40px; aspect-ratio: 1 / 1;
  border-radius: 50%;
  background: #1877F2;
  align-items: center;
  justify-content: center;
  transition: transform 0.15s ease, background 0.15s ease;
}
.footer-social:hover { background: #0E5FC1; transform: translateY(-2px); }
.footer-social svg { width: 20px; height: 20px; }
.footer-doodle { position: absolute; z-index: 1; }
.footer-rainbow {
  text-align: center;
  margin-top: 6px;
  padding-bottom: 22px;
  overflow: visible;
}
.footer-rainbow img {
  width: min(300px, 60%);
  margin: 0 auto;
}

/* green scalloped base bar with copyright */
.footer-scallop-bar {
  position: relative;
  background: var(--green);
  margin-top: 30px;
  padding: 12px 0 16px;
  z-index: 2;
}
.footer-scallop-bar::before {
  content: "";
  position: absolute;
  bottom: calc(100% - 7px); left: 0; right: 0;
  height: 32px;
  background: var(--svg-scallop-sketch) repeat-x center bottom / auto 32px;
}
.footer-bottom {
  text-align: center;
  font-size: 0.8rem;
  font-weight: 700;
  color: #FDFDF6;
}
.footer-bottom a { text-decoration: underline; text-underline-offset: 2px; }
.footer-bottom a:hover { color: var(--purple-dark); }
.footer-disclaimer {
  margin: 8px auto 0;
  max-width: 640px;
  font-size: 0.72rem;
  font-weight: 600;
  line-height: 1.4;
  color: rgba(253, 253, 246, 0.82);
}

.footer-credit {
  margin: 10px auto 0;
  font-size: 0.72rem;
  font-weight: 600;
  color: rgba(253, 253, 246, 0.72);
}
.footer-credit a { text-decoration: underline; text-underline-offset: 2px; }
.footer-credit a:hover { color: var(--purple-dark); }

/* Small attribution line under a photo strip (e.g. campus photos) */
.photo-credit {
  text-align: center;
  font-size: 0.82rem;
  color: var(--ink-soft);
  font-style: italic;
  margin: 2px 0 56px;
}

/* ---------- 12. Responsive ---------- */
@media (max-width: 1100px) {
  .feature-grid { grid-template-columns: repeat(3, 1fr); gap: 28px 18px; }
  .feature-grid:not(.cols-3):not(.cols-5) .feature:not(:last-child)::after { display: none; }
}

@media (max-width: 980px) {
  .home-hero-grid { grid-template-columns: 1fr; }
  .home-hero-photo { order: 2; max-width: 420px; margin: 0 auto; padding-bottom: 56px; }
  .home-hero-text { padding-bottom: 0; }
  .split, .split.reverse { grid-template-columns: 1fr; gap: 44px; }
  #about-teaser .split-text { max-width: none; }
  .classes-grid { grid-template-columns: 1fr; gap: 66px; max-width: 420px; margin-left: auto; margin-right: auto; }
  .gallery-strip { grid-template-columns: repeat(3, 1fr); }
  .footer-inner { grid-template-columns: 1fr; text-align: center; gap: 30px; }
  .footer-col.right { text-align: center; }
  .footer-contact li { justify-content: center; text-align: left; }
  .pricing-grid { grid-template-columns: 1fr; }
  .downloads-grid { grid-template-columns: 1fr 1fr; }
  .steps-row { grid-template-columns: 1fr; }
  .steps-row.cols-5 { grid-template-columns: repeat(3, 1fr); }
  .form-grid { grid-template-columns: 1fr; }
  .two-col, .two-col.narrow-first { grid-template-columns: 1fr; }
  .cta-photo-circle { width: 150px; height: 150px; }
  .cta-photo-circle.left { top: -50px; }
  .cta-photo-circle.right { bottom: -46px; }
}

@media (max-width: 900px) {
  .nav-links {
    position: absolute;
    top: 100%;
    left: 0; right: 0;
    background: var(--cream);
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    padding: 8px 0;
    box-shadow: var(--shadow-soft);
    display: none;
  }
  .nav-links.open { display: flex; }
  .nav-links a { display: block; padding: 14px 28px; }
  .nav-links a.active { background-position: 28px bottom; }
  .nav-toggle { display: block; }
  .nav-dropdown-toggle { width: 100%; justify-content: space-between; padding: 14px 28px; }
  .nav-dropdown {
    position: static;
    box-shadow: none;
    background: var(--cream-soft);
    border-radius: 0;
    padding: 0;
    min-width: 0;
  }
  .nav-dropdown a { padding: 12px 28px 12px 40px; }
}

@media (max-width: 600px) {
  .container { padding: 0 20px; }
  .section { padding: 54px 0; }
  h1 { font-size: 2.3rem; }
  .home-hero h1 { font-size: clamp(2.4rem, 9vw, 2.8rem); }
  .gallery-strip { grid-template-columns: repeat(2, 1fr); }
  .feature-grid { grid-template-columns: repeat(2, 1fr); }
  .downloads-grid { grid-template-columns: 1fr; }
  .cta-band-full { padding: 84px 24px 96px; }
  .cta-photo-circle { display: none; }
  .cta-doodle { display: none; }
  .form-card { padding: 26px 20px; }
  .info-card { padding: 28px 22px; }
  .steps-row.cols-5 { grid-template-columns: repeat(2, 1fr); gap: 22px 12px; }
  .heading-hearts { display: none; }
  /* --- Footer on really narrow screens ---------------------------------
     The footer doodles are positioned with inline styles tuned for the wide
     3-column layout. Once the columns stack and centre, those positions put the
     heart on top of the "Contact Us" heading and the sun on top of the rainbow.
     !important is needed to beat the inline styles. */
  .site-footer .footer-sun { display: none !important; }         /* collided with the rainbow */
  .site-footer .footer-heart {
    top: 52px !important;
    left: 16% !important;
    right: auto !important;
    width: 46px !important;
  }
  /* Logo drops to the bottom, below Hours / Follow Us */
  .footer-inner .footer-col.right  { order: 2; }
  .footer-inner .footer-col.center { order: 3; padding-top: 0; }
  .footer-col.center .footer-logo { width: 150px; }

  /* calm the doodle density on small screens */
  .doodle.hide-mobile { display: none; }
  .nav-heart { display: none; }
  .nav-cta .btn { padding: 10px 16px; font-size: 0.85rem; }
  .nav-logo img { width: 54px; height: 54px; }
  .nav-logo img.home-logo { width: 78px; height: 78px; }
}
