/* ==========================================================================
   ACE ACADEMIC TUTORS — design system
   Brand teal #60a0a0 + near-black #111, clean white space.
   Editorial serif display + Fira Sans UI.
   ========================================================================== */

:root{
  /* ---- brand teal — sampled from the logo (#60A0A0) ---- */
  --teal-50:#eff5f5;
  --teal-100:#d7e8e8;
  --teal-200:#afd0d0;
  --teal-300:#85b6b6;
  --teal-400:#60a0a0;   /* brand — matches logo */
  --teal-500:#4f8c8c;
  --teal-600:#427777;
  --teal-700:#386565;
  --teal-800:#2e5252;
  --teal-900:#244040;

  /* ---- neutrals (near-black ink, cool clean greys) ---- */
  --ink:#111111;        /* headings */
  --ink-2:#272b2a;
  --body:#4b5250;       /* body text */
  --muted:#7c8482;      /* captions */
  --faint:#a3a9a7;
  --line:#e8eceb;       /* hairlines */
  --line-2:#dce2e0;
  --surface:#ffffff;
  --paper:#ffffff;      /* clean white page */
  --paper-2:#f3f7f6;    /* subtle teal-tinted alt section */
  --cream-deep:#e7f0ef;

  /* ---- accents ---- */
  /* no gold: the palette is teal, cream and ink only */

  /* ---- gradients (brand tile; deeper for white text) ---- */
  --tile-grad:linear-gradient(135deg,#60a0a0,#3c7373);
  --cta-grad:linear-gradient(135deg,#5a9897,#3f7a79);

  /* ---- type ---- */
  --serif:"Source Serif 4",Georgia,"Times New Roman",serif;
  --sans:"Fira Sans",system-ui,-apple-system,Segoe UI,sans-serif;

  /* ---- radii ---- */
  --r-xs:8px;
  --r-sm:12px;
  --r-md:18px;
  --r-lg:26px;
  --r-xl:36px;
  --r-pill:999px;

  /* ---- shadows (cool, soft) ---- */
  --sh-xs:0 1px 2px rgba(17,17,17,.05);
  --sh-sm:0 2px 6px rgba(17,17,17,.06),0 1px 2px rgba(17,17,17,.04);
  --sh-md:0 8px 24px rgba(17,17,17,.07),0 2px 8px rgba(17,17,17,.05);
  --sh-lg:0 24px 60px rgba(20,50,49,.12),0 8px 24px rgba(17,17,17,.06);
  --sh-teal:0 16px 40px rgba(56,101,101,.26);

  /* ---- layout ---- */
  --maxw:1200px;
  --gutter:32px;
}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0;background:var(--paper);color:var(--body);
  font-family:var(--sans);font-size:17px;line-height:1.6;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
::selection{background:var(--teal-200);color:var(--ink);}
img{max-width:100%;display:block;}
a{color:inherit;text-decoration:none;}

/* ---------- typography ---------- */
h1,h2,h3,h4{font-family:var(--serif);color:var(--ink);margin:0;font-weight:600;letter-spacing:-.01em;line-height:1.1;}
.display{font-size:clamp(40px,5.2vw,68px);line-height:1.04;letter-spacing:-.025em;}
.h-xl{font-size:clamp(34px,4vw,52px);line-height:1.06;letter-spacing:-.02em;}
.h-lg{font-size:clamp(28px,3vw,40px);}
.h-md{font-size:clamp(22px,2.2vw,28px);}
.serif-it{font-style:italic;color:var(--teal-600);}
p{margin:0;}
.lead{font-size:clamp(18px,1.6vw,21px);line-height:1.62;color:var(--ink-2);}

.eyebrow{
  font-family:var(--sans);font-size:13px;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;color:var(--teal-600);
}

/* ---------- layout helpers ---------- */
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--gutter);}
.wrap-narrow{max-width:880px;margin:0 auto;padding:0 var(--gutter);}
.section{padding:96px 0;}
.section-sm{padding:64px 0;}
.center{text-align:center;}
.stack-sm>*+*{margin-top:14px;}
.stack>*+*{margin-top:22px;}

/* ---------- buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  font-family:var(--sans);font-weight:600;font-size:15.5px;line-height:1;white-space:nowrap;
  padding:15px 24px;border-radius:var(--r-pill);border:1px solid transparent;cursor:pointer;
  transition:transform .16s ease,box-shadow .2s ease,background .2s ease,border-color .2s ease,color .2s ease;
}
.btn svg{width:17px;height:17px;}
.btn-primary{background:var(--cta-grad);color:#fff;box-shadow:var(--sh-teal);}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 20px 46px rgba(44,93,91,.30);}
.btn-dark{background:var(--ink);color:#fff;}
.btn-dark:hover{transform:translateY(-1px);background:#000;}
.btn-outline{background:var(--surface);color:var(--ink);border-color:var(--line-2);box-shadow:var(--sh-xs);}
.btn-outline:hover{border-color:var(--teal-400);color:var(--teal-700);}
.btn-ghost{background:transparent;color:var(--ink-2);padding-left:10px;padding-right:10px;}
.btn-ghost:hover{color:var(--teal-700);}
.btn-lg{padding:17px 30px;font-size:16.5px;}
.btn-block{width:100%;}

/* ---------- pills / chips / tags ---------- */
.pill{
  display:inline-flex;align-items:center;gap:8px;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-pill);padding:7px 15px;
  font-size:13.5px;font-weight:500;color:var(--body);box-shadow:var(--sh-xs);white-space:nowrap;
}
.pill .dot{width:7px;height:7px;border-radius:50%;background:var(--teal-400);}
.tag{
  display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;
  color:var(--teal-700);background:var(--teal-50);border:1px solid var(--teal-100);
  border-radius:var(--r-pill);padding:5px 11px;
}
.stars{color:var(--teal-600);letter-spacing:1px;font-size:14px;line-height:1;}

/* ---------- cards ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);}
.card-pad{padding:30px;}

/* ---------- header / nav ---------- */
.topbar{background:var(--teal-900);color:#fff;}
.topbar-in{display:flex;align-items:center;justify-content:flex-end;gap:26px;padding-top:9px;padding-bottom:9px;flex-wrap:wrap;}
.topbar a,.topbar span{font-family:var(--sans);font-size:13.5px;font-weight:500;color:rgba(255,255,255,.88);display:inline-flex;align-items:center;gap:8px;}
.topbar a:hover{color:#fff;}
.topbar svg{width:15px;height:15px;flex-shrink:0;opacity:.8;}
.topbar .loc{margin-right:auto;color:rgba(255,255,255,.9);}
.topbar a.loc:hover b{border-bottom:1px solid rgba(255,255,255,.55);}
@media(max-width:640px){.topbar-in{justify-content:center;gap:14px 18px}.topbar a,.topbar span{font-size:12.5px}.topbar .loc{margin-right:0;flex-basis:100%;justify-content:center}.topbar .loc .drop{display:none}}
.site-header{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.85);backdrop-filter:blur(14px);border-bottom:1px solid transparent;transition:border-color .2s,box-shadow .2s;}
.site-header.scrolled{border-bottom-color:var(--line);box-shadow:var(--sh-xs);}
.nav{display:flex;align-items:center;justify-content:space-between;gap:24px;height:92px;transition:height .22s ease;}
.site-header.scrolled .nav{height:72px;}
.site-header.scrolled .brand-icon{height:48px;}
.nav-left{display:flex;align-items:center;gap:30px;min-width:auto;flex-shrink:0;}
/* real logo lockup */
.brand{display:flex;align-items:center;gap:12px;flex-shrink:0;}
.brand-icon{height:62px;width:auto;display:block;transition:height .22s ease;}
.brand-word{font-family:var(--sans);font-size:21px;line-height:1;letter-spacing:-.008em;white-space:nowrap;display:inline-flex;gap:.14em;align-items:baseline;color:var(--ink);}
.brand-word .w-ace{font-weight:700;}
.brand-word .w-acad{font-weight:700;}
.brand-word .w-tut{font-weight:400;color:var(--ink-2);}
@media(max-width:520px){.brand-word{font-size:18px;}.brand-icon{height:50px;}}
.nav-links{display:flex;align-items:center;gap:20px;}
.nav-links a{font-size:15px;font-weight:500;color:var(--ink-2);position:relative;padding:4px 0;white-space:nowrap;}
.nav-links a:hover{color:var(--teal-700);}
.nav-links a.active{color:var(--teal-700);}
.nav-links a.active::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:2px;background:var(--teal-400);border-radius:2px;}
.nav-right{display:flex;align-items:center;gap:18px;flex-shrink:0;}
/* The nav call to action is the loudest thing in the header: a deeper fill, a
   sheen that sweeps across it, and a ring that breathes. No hard blink, which
   is a seizure risk, and all of it stops for reduced-motion users. */
.btn-pulse{position:relative;overflow:hidden;background:var(--teal-800);border-color:var(--teal-800);font-weight:700;letter-spacing:.005em;padding-left:26px;padding-right:26px;animation:btnPulse 2.2s ease-in-out infinite;}
.btn-pulse:hover{background:var(--teal-900);border-color:var(--teal-900);}
.btn-pulse::after{content:"";position:absolute;top:0;bottom:0;left:-60%;width:45%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.34),transparent);transform:skewX(-18deg);animation:btnSheen 3.4s ease-in-out infinite;pointer-events:none;}
@keyframes btnPulse{
  0%,100%{box-shadow:0 0 0 0 rgba(96,160,160,.55),0 6px 18px rgba(47,90,89,.28);transform:scale(1);}
  50%{box-shadow:0 0 0 10px rgba(96,160,160,0),0 8px 24px rgba(47,90,89,.34);transform:scale(1.035);}
}
@keyframes btnSheen{
  0%{left:-60%;} 55%{left:130%;} 100%{left:130%;}
}
@media(prefers-reduced-motion:reduce){.btn-pulse,.btn-pulse::after{animation:none;}.btn-pulse::after{display:none;}}
.nav-right .login,.nav-right>a:not(.btn){font-size:15px;font-weight:600;color:var(--ink);white-space:nowrap;}
.nav-right a.login{display:inline-flex;align-items:center;gap:7px;}
.nav-right a.login svg{width:15px;height:15px;opacity:.7;flex-shrink:0;}
.nav-right .login:hover,.nav-right>a:not(.btn):hover{color:var(--teal-700);}
.nav-toggle{display:none;width:44px;height:44px;border-radius:12px;border:1px solid var(--line-2);background:var(--surface);cursor:pointer;align-items:center;justify-content:center;flex-shrink:0;color:var(--ink);}
.nav-toggle svg{width:22px;height:22px;}
.mobile-menu{display:none;}

/* ---------- footer ---------- */
.site-footer{background:linear-gradient(160deg,#2f5a59,#264746);color:#cfe0df;padding:72px 0 36px;}
.site-footer a{color:#cfe0df;font-size:14.5px;line-height:2;}
.site-footer a:hover{color:#fff;}
.footer-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:40px;}
.footer-col h5{font-family:var(--sans);font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#fff;margin:0 0 14px;}
.footer-bottom{display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;margin-top:54px;padding-top:26px;border-top:1px solid rgba(255,255,255,.12);font-size:13.5px;color:#8fa6a4;}
.footer-social a{width:38px;height:38px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;color:#cfe0df;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);transition:background .18s,color .18s,transform .18s;}
.footer-social a:hover{background:rgba(255,255,255,.14);color:#fff;transform:translateY(-2px);}

/* ---------- reveal on scroll ---------- */
.reveal{opacity:0;transform:translateY(18px);transition:opacity .7s ease,transform .7s ease;}
.reveal.in{opacity:1;transform:none;}
@media(prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important;scroll-behavior:auto !important;}
  .reveal{opacity:1;transform:none;}
}
/* visible keyboard focus */
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--teal-500);outline-offset:2px;border-radius:4px;}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}

/* ---------- misc ---------- */
.divider{height:1px;background:var(--line);border:0;margin:0;}
.kicker-row{display:flex;align-items:center;gap:12px;justify-content:center;}
.kicker-row .ln{height:1px;width:40px;background:var(--line-2);}

@media(max-width:940px){
  .nav-links{display:none;}
  .nav-right .login,.nav-right>a:not(.btn){display:none;}
  .nav-toggle{display:flex;}
  .mobile-menu{display:block;position:absolute;top:100%;left:0;right:0;z-index:49;background:var(--paper);border-bottom:1px solid var(--line);box-shadow:var(--sh-md);
    padding:14px var(--gutter) 24px;transform:translateY(-12px);opacity:0;pointer-events:none;transition:transform .22s ease,opacity .22s ease;}
  .mobile-menu.open{transform:none;opacity:1;pointer-events:auto;}
  .mobile-menu a{display:block;padding:14px 6px;font-size:17px;font-weight:500;color:var(--ink);border-bottom:1px solid var(--line);}
  .mobile-menu a:last-of-type{border-bottom:none;}
  .mobile-menu .btn{width:100%;margin-top:16px;}
}
@media(max-width:900px){
  :root{--gutter:22px;}
  .section{padding:64px 0;}
  .footer-grid{grid-template-columns:1fr 1fr;gap:30px;}
}

/* Phones. At 375px the header content area is 331px but brand(227) + CTA(168) +
   toggle(44) needs 457, so the toggle was pushed off-screen and the menu could not
   be opened at all. The wordmark yields first: the icon still carries identity, and
   the CTA is the conversion path. Wordmark returns at 600px. */
@media(max-width:599px){
  .brand-word{display:none;}
  .nav-right{gap:10px;}
  .nav-right .btn{padding:12px 15px;font-size:14px;}
  .footer-grid{grid-template-columns:1fr;gap:26px;}
}

/* Log in menu, built by chrome.js. Without JS the plain link remains. */
.loginwrap{position:relative;display:flex;align-items:center;}
.loginwrap .login{cursor:pointer;}
.loginmenu{position:absolute;top:calc(100% + 12px);right:0;width:224px;background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-md);box-shadow:0 18px 44px rgba(31,58,58,.17),0 3px 8px rgba(31,58,58,.07);padding:8px;opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .16s,transform .16s,visibility .16s;z-index:60;}
.loginwrap.open .loginmenu{opacity:1;visibility:visible;transform:none;}
.loginmenu a{display:block;padding:10px 13px;border-radius:var(--r-sm);text-decoration:none;transition:background .14s;}
.loginmenu a:hover{background:var(--teal-50);}
.loginmenu a b{display:block;font-family:var(--sans);font-size:14.5px;font-weight:600;color:var(--ink);line-height:1.3;}
.loginmenu a span{display:block;font-family:var(--sans);font-size:12.5px;color:var(--body);line-height:1.4;margin-top:2px;}
.loginmenu .lmsep{height:1px;background:var(--line);margin:7px 5px;}
/* Must sit after .loginwrap's own display, or the unconditional rule wins:
   chrome.js wraps the anchor, so .nav-right>a:not(.btn) no longer matches it. */
@media(max-width:940px){.loginwrap{display:none;}}

/* ============================================================
   FAQ, added 25 Aug 2026. Used on pricing and the four subject pages.
   Native <details>, so it opens and closes with NO JavaScript and needs no
   script on any page. Do not replace this with a JS accordion.
   ============================================================ */
.faq{margin-top:34px;border-top:1px solid var(--line);}
.faq details{border-bottom:1px solid var(--line);}
.faq summary{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;list-style:none;cursor:pointer;padding:20px 2px;font-family:var(--serif);font-size:18.5px;font-weight:600;color:var(--ink);letter-spacing:-.01em;line-height:1.4;}
.faq summary::-webkit-details-marker{display:none;}
.faq summary:hover{color:var(--teal-700);}
.faq summary:focus-visible{outline:2px solid var(--teal-500);outline-offset:3px;border-radius:4px;}
.faq .fq-i{flex:0 0 auto;width:26px;height:26px;margin-top:2px;border-radius:50%;border:1px solid var(--line-2);display:flex;align-items:center;justify-content:center;color:var(--teal-700);transition:transform .18s,background .18s,color .18s,border-color .18s;}
.faq .fq-i svg{width:13px;height:13px;}
.faq details[open] .fq-i{background:var(--teal-700);border-color:transparent;color:#fff;transform:rotate(45deg);}
.faq .fq-a{padding:0 2px 22px;}
.faq .fq-a p{font-size:15.5px;line-height:1.7;color:var(--body);margin:0 0 12px;max-width:68ch;}
.faq .fq-a p:last-child{margin-bottom:0;}
.faq .fq-a a{color:var(--teal-700);font-weight:600;}
.faq .fq-a a:hover{color:var(--teal-900);}

/* ============================================================
   GOOGLE RATING, added 25 Aug 2026.
   Evidenced and verifiable, so it is the ONE exception to the no-social-proof
   rule. The figures live only inside [data-google-rating], so they can be
   refreshed in one pass. Never state a rating anywhere else on the site, and
   never add a testimonial, quote or star display that is not this component.
   ============================================================ */
.grate{display:inline-flex;align-items:center;gap:11px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:8px 16px 8px 13px;box-shadow:var(--sh-xs);font-family:var(--sans);text-decoration:none;}
.grate:hover{border-color:var(--teal-300);}
.grate .gg{flex:0 0 auto;width:19px;height:19px;}
.grate .gs{display:inline-flex;gap:2px;color:#e8a33d;}
.grate .gs svg{width:14px;height:14px;}
.grate .gt{font-size:13.5px;font-weight:600;color:var(--ink-2);white-space:nowrap;}
.grate .gt b{font-weight:700;color:var(--ink);}
.grate.on-dark{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2);box-shadow:none;}
.grate.on-dark .gt{color:rgba(255,255,255,.88);}
.grate.on-dark .gt b{color:#fff;}
.grate.on-dark:hover{border-color:rgba(255,255,255,.4);}
@media(max-width:420px){.grate .gt{white-space:normal;}}

/* ============================================================
   LOCAL, added 25 Aug 2026. about.html only.
   "Based in Rainham, teaching across the UK online." It must NOT imply
   in-person tutoring: .areas carries an explicit line saying all lessons are
   online. Keep that line.
   ============================================================ */
.loc2{display:grid;grid-template-columns:1.05fr .95fr;gap:40px;align-items:start;}
.areas{background:var(--paper-2);border:1px solid var(--line);border-radius:var(--r-lg);padding:26px 28px;}
.areas h3{font-size:17px;margin:0 0 14px;letter-spacing:-.01em;}
.areas ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px;}
.areas li{font-family:var(--sans);font-size:13px;font-weight:500;color:var(--ink-2);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:6px 13px;}
.areas .an{margin:16px 0 0;font-size:13.5px;color:var(--body);line-height:1.6;}
@media(max-width:900px){.loc2{grid-template-columns:1fr;gap:26px;}}
