:root{--paper:#f6f3eb;--white:#fffdf7;--ink:#183f35;--text:#253c35;--muted:#788079;--line:#d9ddd2;--lime:#d5e5a0;--red:#b65342;--serif:"Songti SC","STSong","Noto Serif CJK SC",serif;--sans:"PingFang SC","Hiragino Sans GB",sans-serif}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--text);font-family:var(--sans);font-size:15px;-webkit-font-smoothing:antialiased}button,a,input{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button{border:0;background:none}button:disabled{cursor:default}a{color:inherit}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #a5b973;outline-offset:5px}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--serif);font-weight:600}button,.tile{transition:background .18s,transform .18s,box-shadow .18s}button:hover:not(:disabled){filter:brightness(.96)}.header{background:var(--paper);border-bottom:1px solid var(--line)}.header-inner{max-width:1232px;margin:auto;min-height:106px;display:flex;align-items:center;justify-content:space-between;padding:20px 32px;gap:30px}.brand{display:flex;align-items:center;text-align:left;gap:14px;padding:0;font-family:var(--serif);font-size:25px;font-weight:700;white-space:nowrap}.brand small{font-family:Georgia,serif;display:block;font-weight:400;font-size:8px;letter-spacing:2px;margin-top:5px}.brand-mark{display:grid;place-items:center;background:var(--ink);color:var(--paper);border-radius:12px;width:46px;height:50px;font-size:35px}.header nav{display:flex;align-self:stretch;gap:34px}.header nav button{font-size:14px;padding:10px 0;position:relative;color:var(--muted)}.header nav button.active{color:var(--ink);font-weight:600}.header nav button.active:after{content:"";height:3px;width:18px;border-radius:4px;background:var(--ink);position:absolute;bottom:4px;left:calc(50% - 9px)}.edition{font-size:11px;border:1px solid var(--line);border-radius:30px;padding:8px 12px;color:#64786b;white-space:nowrap}.edition i{display:inline-block;width:5px;height:5px;border-radius:100%;background:#739360;vertical-align:middle;margin-right:6px}main{max-width:1232px;min-height:calc(100vh - 220px);margin:auto;padding:37px 32px 68px;outline:none}.eyebrow{font-family:Georgia,var(--sans);font-size:11px;letter-spacing:2px;text-transform:uppercase}.muted{color:var(--muted)}.topline{display:flex;justify-content:space-between;align-items:center;font-size:12px;margin-bottom:23px;color:#7c8176}.topline .date{font-family:Georgia,serif;letter-spacing:1px}.hero{display:grid;grid-template-columns:1.15fr 1fr;min-height:398px;background:var(--ink);border-radius:5px;overflow:hidden;position:relative;color:var(--paper)}.hero-copy{padding:46px 44px;position:relative;z-index:1}.hero .eyebrow{color:#c8d39e}.hero h1{font-size:53px;line-height:1.28;letter-spacing:1px;margin:20px 0 18px;max-width:420px}.hero h1 em{display:block;color:#d7e5a9;font-style:normal}.hero p{font-size:14px;line-height:1.9;color:#c7d1c4}.primary{display:inline-flex;align-items:center;justify-content:space-between;gap:35px;min-height:51px;background:var(--ink);color:var(--white);padding:0 22px;border-radius:3px;font-size:14px;font-weight:600}.primary.light{background:var(--lime);color:var(--ink)}.primary span[aria-hidden]{font-size:20px;font-weight:400}.hero .primary{margin-top:28px;min-width:205px}.hero-art{position:relative;display:flex;align-items:center;justify-content:center;background:#e8e2d1;overflow:hidden}.hero-art img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0;mix-blend-mode:multiply}.hero-art .art-label{position:absolute;left:24px;top:22px;border:1px solid #989f8266;color:#516a57;font-size:10px;letter-spacing:2px;border-radius:25px;padding:7px 12px}.hero-art .art-caption{position:absolute;bottom:24px;right:26px;font-family:Georgia,serif;letter-spacing:3px;font-size:12px;color:#485d44}.hero-art:after{content:"";position:absolute;inset:14px;border:1px solid #fff6;pointer-events:none}.overview{display:flex;align-items:center;border-bottom:1px solid var(--line);padding:24px 0;gap:30px}.overview-intro{display:flex;align-items:center;gap:12px;font-size:13px}.seed{display:grid;place-items:center;background:#e4e8d8;border-radius:50%;width:34px;height:34px;font-size:17px}.overview-intro small{display:block;font-size:11px;color:var(--muted);margin-top:4px}.overview-stats{display:flex;gap:32px;margin-left:auto}.overview-stat{font-size:11px;color:var(--muted);display:flex;align-items:baseline;gap:9px}.overview-stat strong{font-family:Georgia,serif;font-size:26px;font-weight:400;color:var(--ink)}.overview-stat+div{border-left:1px solid var(--line);padding-left:30px}.section-heading{display:flex;align-items:end;justify-content:space-between;gap:15px;margin:36px 0 20px}.section-heading h2{font-size:24px}.section-heading h2 small{font-family:var(--sans);font-size:11px;font-weight:400;margin-left:14px;color:var(--muted)}.text-button{padding:3px 0;font-size:12px;color:#637a65}.tiles{display:grid;grid-template-columns:repeat(3,1fr);gap:19px}.tile{border:1px solid var(--line);border-radius:4px;min-height:211px;padding:23px 24px;background:#fbfaf4;position:relative;display:flex;flex-direction:column;align-items:start;overflow:hidden}.tile:hover{box-shadow:0 6px 20px #183f3508;transform:translateY(-2px)}.tile-top{display:flex;justify-content:space-between;width:100%;align-items:center;margin-bottom:25px}.tile-icon{font-family:Georgia,serif;font-size:29px;color:#6b8055;line-height:1}.tile-index{font-family:Georgia,serif;font-size:10px;letter-spacing:2px;color:#92978b}.tile h3{font-size:21px;margin-bottom:9px}.tile p{font-size:12px;line-height:1.7;color:#737d72}.tile-bottom{display:flex;width:100%;justify-content:space-between;align-items:center;margin-top:auto;padding-top:20px}.tile-meta{font-size:10px;letter-spacing:.5px;color:#8a8e81}.tile-action{font-size:12px;color:var(--ink);padding:6px 0;font-weight:600}.quote-strip{display:flex;align-items:center;justify-content:space-between;margin-top:28px;padding:18px 0;gap:20px;border-top:1px solid var(--line);color:#7d8578;font-size:11px}.quote-strip p{font-family:var(--serif);font-size:16px;color:#5d725e}.quote-strip p span{margin-right:12px;color:#92a579;font-size:21px}footer{max-width:1168px;border-top:1px solid var(--line);padding:26px 0 32px;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:20px;font-size:10px;color:#879081}footer>span:first-child{font-family:var(--serif);font-size:15px;color:#607059}footer b{font-family:Georgia,serif;font-size:10px;margin-left:10px;font-weight:400}.skip{position:fixed;top:-100px;left:20px;z-index:99;background:var(--ink);color:white;padding:10px}.skip:focus{top:10px}.page-heading{padding:16px 0 32px}.page-heading h1{font-size:42px;margin:15px 0}.page-heading p{font-size:14px;line-height:1.8;color:var(--muted)}.training-note{margin-top:30px;padding:22px 0;border-top:1px solid var(--line);color:var(--muted);font-size:12px;line-height:1.8}.session{max-width:880px;margin:0 auto}.session-top{display:flex;justify-content:space-between;align-items:center;margin:0 0 28px;font-size:12px;color:var(--muted)}.back{font-size:12px;padding:8px 0;color:#6e7c6a}.exercise{padding:42px 48px;background:var(--white);border:1px solid var(--line);border-radius:5px;min-height:480px}.exercise .eyebrow{color:#86916e}.steps{display:flex;gap:7px;align-items:center}.steps i{display:block;width:28px;height:3px;background:#dce2d5}.steps i.current{background:#a0b780}.steps i.done{background:var(--ink)}.question-top{display:flex;justify-content:space-between;margin-bottom:28px;align-items:center}.exercise h1{font-size:29px;line-height:1.65;letter-spacing:.2px}.question-note{font-size:12px;color:var(--muted);margin:12px 0 28px}.answers{display:grid;gap:12px;margin-top:26px}.answer{display:flex;gap:17px;align-items:center;text-align:left;border:1px solid var(--line);padding:17px 20px;border-radius:3px;background:#fcfbf7;min-height:60px;font-size:15px}.answer b{font-family:Georgia,serif;font-weight:400;font-size:13px;color:#8e9786}.answer:hover:not(:disabled){background:#edf1e5}.answer.correct{background:#edf3dc;border-color:#9baf78;color:var(--ink)}.answer.wrong{background:#fbede8;border-color:#caa797;color:#a04f3f}.feedback{margin-top:26px;padding:22px 24px;background:#eef1e5;border-left:3px solid #8ca364}.feedback.wrong{background:#f7ece4;border-color:#bb8970}.feedback h2{font-family:var(--sans);font-size:14px;margin-bottom:10px}.feedback p{font-size:13px;line-height:1.95;color:#68765d}.exercise-actions{margin-top:27px;display:flex;justify-content:space-between;align-items:center;gap:18px}.exercise-actions small{font-size:11px;color:var(--muted)}.session-footnote{font-size:11px;text-align:center;color:#8b9285;margin-top:20px;line-height:1.7}.result{text-align:center}.result-symbol{font-size:36px;color:#7f9657;margin:6px 0 16px}.result h1{font-size:33px}.result .score{font-family:Georgia,serif;font-size:74px;letter-spacing:3px;color:var(--ink);margin:18px 0}.result>p{font-size:14px;line-height:1.8;color:#6c7c68}.result .exercise-actions{justify-content:center;margin-top:30px}.result-tags{display:flex;justify-content:center;gap:9px;margin:20px 0}.tag{padding:7px 11px;border:1px solid var(--line);font-size:11px;border-radius:30px;color:#6b7c60}.secondary{min-height:51px;border:1px solid var(--line);padding:0 20px;border-radius:3px;font-size:13px}.memory-intro{text-align:center}.memory-intro .large-suit{font-size:70px;line-height:1.5;color:#8f9e78}.memory-intro p{font-size:14px;line-height:1.9;color:var(--muted);margin:18px 0 26px}.memory-intro .instructions{display:flex;justify-content:center;gap:30px;font-size:12px;color:#7e8a72;margin:30px 0}.memory-intro .instructions b{display:block;font-family:Georgia,serif;font-size:24px;font-weight:400;color:var(--ink);margin-bottom:8px}.memory-table{background:var(--ink);padding:28px;border-radius:4px;color:var(--paper);margin:26px 0}.memory-table-top{display:flex;justify-content:space-between;color:#c2cead;font-size:11px}.timer{font-family:Georgia,serif;font-size:16px;color:var(--lime)}.memory-hand{display:grid;grid-template-columns:repeat(8,1fr);gap:7px;margin:27px 0 15px;min-height:100px}.playing-card{background:#fffdf4;color:#283c32;border:1px solid #dfdfce;border-radius:5px;aspect-ratio:2/3;position:relative;box-shadow:1px 4px 6px #0a20172a;display:flex;flex-direction:column;align-items:center;justify-content:center}.playing-card.red{color:#b65745}.playing-card .rank{position:absolute;top:7px;left:7px;font-family:Georgia,serif;font-size:19px}.playing-card .suit{font-family:Georgia,serif;font-size:25px;margin-top:17px}.playing-card .joker{font-size:12px;writing-mode:vertical-rl;letter-spacing:3px;margin:0}.memory-hidden{grid-column:1/-1;display:flex;justify-content:center;align-items:center;color:#9cb092;font-family:var(--serif);font-size:21px;letter-spacing:5px;min-height:102px}.memory-choices{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:24px}.memory-choices .answer{justify-content:center;padding:14px 6px}.memory-choices .answer:last-child{grid-column:auto}.note-layout{display:grid;grid-template-columns:230px 1fr;gap:56px}.note-sidebar{border-top:1px solid var(--line);padding-top:22px;font-size:12px;color:var(--muted);line-height:2.5}.note-sidebar strong{color:var(--ink);font-size:14px}.note-body{background:var(--white);border:1px solid var(--line);padding:40px}.note-body article+article{border-top:1px solid var(--line);margin-top:30px;padding-top:30px}.note-body h2{font-size:25px;margin:10px 0 18px}.note-body p{line-height:2;color:#687663;font-size:14px}.note-number{font-family:Georgia,serif;color:#9baa81;font-size:13px}.equation{font-family:Georgia,var(--serif);font-size:29px;padding:22px 0;color:#4e693d}.progress-stats{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:28px 0;margin-bottom:38px}.progress-stats div{padding-left:28px;border-left:1px solid var(--line)}.progress-stats div:first-child{border-left:0;padding-left:0}.progress-stats strong{display:block;font-family:Georgia,serif;font-size:42px;font-weight:400;margin-bottom:10px}.progress-stats span{font-size:12px;color:var(--muted)}.empty{border:1px dashed #cbd4c2;padding:48px 28px;text-align:center}.empty h2{font-size:25px;margin-bottom:15px}.empty p{color:var(--muted);margin-bottom:24px;font-size:13px}.history-row{display:grid;grid-template-columns:1fr 1fr 80px;align-items:center;gap:15px;border-bottom:1px solid var(--line);padding:22px 0;font-size:13px}.history-row time{font-size:12px;color:var(--muted)}.history-row strong{text-align:right;font-family:Georgia,serif;font-size:20px;font-weight:400}.storage-notice{background:#ede7d5;color:#746b4a;padding:12px;font-size:12px;margin-bottom:20px}.reveal{animation:reveal .38s ease both}@keyframes reveal{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
@media(min-width:1500px){.hero{min-height:430px}.hero-copy{padding-top:54px}.hero h1{font-size:57px}}
@media(max-width:1000px){.header-inner{gap:22px}.edition{display:none}.hero h1{font-size:43px}.hero-copy{padding:36px 30px}.hero{min-height:370px}.header nav{gap:25px}footer{margin:0 32px}.overview-stats{gap:16px}.overview-stat+div{padding-left:16px}.tile{padding:20px}.note-layout{grid-template-columns:170px 1fr;gap:28px}}
@media(max-width:650px){.header-inner{padding:17px 22px 0;flex-wrap:wrap;gap:14px}.brand{font-size:23px}.brand-mark{width:38px;height:43px;font-size:29px;border-radius:9px}.brand small{font-size:7px}.header nav{width:100%;justify-content:space-between;gap:20px;min-height:48px}.header nav button{font-size:13px;padding-bottom:17px}.header nav button.active:after{bottom:7px}main{padding:25px 20px 40px}.topline{font-size:10px;margin-bottom:18px}.topline .date{font-size:10px}.hero{grid-template-columns:1fr;min-height:auto}.hero-copy{padding:32px 27px}.hero h1{font-size:43px;line-height:1.25;margin:17px 0}.hero p{font-size:12px}.hero .primary{margin-top:22px;min-height:48px}.hero-art{height:225px}.hero-art img{object-position:center 38%}.hero-art .art-label{font-size:9px;top:16px;left:18px}.hero-art .art-caption{bottom:16px;right:18px}.overview{flex-wrap:wrap;gap:20px;padding:22px 0}.overview-intro{font-size:12px}.overview-stats{width:100%;margin:0;justify-content:space-between;gap:8px}.overview-stat{font-size:10px;gap:8px}.overview-stat strong{font-size:24px}.overview-stat+div{padding-left:15px}.section-heading{margin-top:29px}.section-heading h2{font-size:23px}.section-heading h2 small{display:none}.tiles{grid-template-columns:1fr;gap:12px}.tile{min-height:174px;padding:21px 23px}.tile-top{margin-bottom:17px}.tile h3{font-size:22px}.tile-bottom{padding-top:15px}.tile p{font-size:12px}.quote-strip{margin-top:24px;align-items:start;flex-direction:column;gap:10px}.quote-strip p{font-size:14px}.quote-strip>span{padding-left:27px;font-size:10px}footer{margin:0 20px;padding:24px 0;align-items:start;flex-wrap:wrap;gap:13px}footer>span:nth-child(2){width:100%;order:3;font-size:9px}.footer-note{font-size:9px}.page-heading{padding:12px 0 28px}.page-heading h1{font-size:34px}.page-heading p{font-size:12px}.exercise{padding:26px 21px;min-height:450px}.exercise h1{font-size:24px;line-height:1.6}.question-top{margin-bottom:24px}.question-top .eyebrow{font-size:9px;letter-spacing:1px}.steps i{width:20px}.answer{padding:15px;font-size:14px;gap:12px}.feedback{padding:18px 16px}.feedback p{font-size:12px}.exercise-actions{flex-wrap:wrap}.exercise-actions small{font-size:10px}.exercise-actions .primary{gap:22px}.session-top{margin-bottom:16px}.result .score{font-size:60px}.result h1{font-size:28px}.result>p{font-size:12px}.memory-table{padding:20px 14px;margin-left:-7px;margin-right:-7px}.memory-hand{grid-template-columns:repeat(4,1fr);gap:10px;min-height:190px;margin:20px 0 6px}.playing-card{aspect-ratio:2/2.8}.playing-card .rank{font-size:17px}.playing-card .suit{font-size:23px}.memory-hidden{min-height:190px;font-size:18px;letter-spacing:2px}.memory-choices{grid-template-columns:repeat(3,1fr);gap:9px}.memory-intro .instructions{gap:20px;font-size:10px}.memory-intro p{font-size:12px}.note-layout{display:block}.note-sidebar{display:none}.note-body{padding:27px 22px}.note-body h2{font-size:23px}.note-body p{font-size:13px}.equation{font-size:25px}.progress-stats{padding:22px 0}.progress-stats div{padding-left:15px}.progress-stats strong{font-size:33px}.progress-stats span{font-size:10px}.history-row{grid-template-columns:1fr 86px 50px;font-size:12px;gap:7px}.history-row time{font-size:10px}.empty{padding:35px 20px}.empty h2{font-size:23px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* Mobile layout: put the practice controls ahead of decorative content. */
button { touch-action: manipulation; }
@media (max-width:650px) {
  body { padding-bottom: calc(72px + env(safe-area-inset-bottom, 0px)); }
  .header-inner { min-height:72px; flex-wrap:nowrap; padding:14px 20px; gap:12px; }
  .brand { min-height:44px; font-size:22px; }
  .brand small { font-size:6px; letter-spacing:1.5px; }
  .edition { display:block; font-size:10px; padding:6px 9px; }
  .header nav {
    position:fixed; bottom:0; left:0; right:0; z-index:10;
    display:grid; grid-template-columns:repeat(3,1fr); gap:0;
    min-height:66px; width:100%; background:#f6f3ebf7;
    border-top:1px solid var(--line); backdrop-filter:blur(14px);
    padding:5px 14px calc(5px + env(safe-area-inset-bottom, 0px));
  }
  .header nav button { min-height:55px; font-size:13px; padding:14px 5px; }
  .header nav button.active:after { bottom:4px; }
  main { padding:19px 16px 30px; }
  .topline { margin-bottom:14px; font-size:11px; }
  .topline .date { font-size:9px; letter-spacing:0; }
  .hero-copy { padding:23px 24px; }
  .hero .eyebrow { font-size:8px; letter-spacing:1.4px; }
  .hero h1 { font-size:36px; margin:14px 0 11px; line-height:1.23; }
  .hero p { font-size:13px; line-height:1.7; }
  .hero .primary { margin-top:20px; width:100%; min-height:50px; font-size:15px; }
  .hero-art { display:none; }
  .overview { padding:16px 0; }
  .overview-intro { display:none; }
  .overview-stats { gap:6px; }
  .overview-stat { font-size:11px; gap:6px; }
  .overview-stat strong { font-size:24px; }
  .overview-stat+div { padding-left:12px; }
  .section-heading { margin:20px 0 12px; align-items:center; }
  .section-heading h2 { font-size:21px; }
  .text-button { min-height:44px; padding:8px 0 8px 8px; font-size:12px; }
  .tiles { gap:10px; }
  .tile { display:grid; grid-template-columns:30px minmax(0,1fr); column-gap:14px; min-height:0; padding:17px 18px 11px; }
  .tile-top { grid-column:1; grid-row:1/4; align-self:start; margin:2px 0 0; }
  .tile-index { display:none; }
  .tile h3 { grid-column:2; font-size:20px; margin:0 0 6px; }
  .tile p { grid-column:2; font-size:13px; line-height:1.65; }
  .tile-bottom { grid-column:2; padding-top:3px; gap:7px; }
  .tile-meta { font-size:10px; letter-spacing:0; }
  .tile-action { min-height:44px; flex-shrink:0; padding:10px 0 10px 8px; font-size:13px; }
  .quote-strip { margin-top:20px; padding:16px 0 0; }
  .in-session { padding-bottom:env(safe-area-inset-bottom, 0px); }
  .in-session .header nav, .in-session footer { display:none; }
  .in-session .header-inner { min-height:62px; padding-top:9px; padding-bottom:9px; }
  .in-session main { padding-top:8px; }
  .back { min-height:44px; padding:10px 4px; font-size:14px; }
  .session-top { margin-bottom:9px; }
  .exercise { padding:24px 19px; min-height:0; }
  .exercise h1 { font-size:23px; line-height:1.65; }
  .question-note { font-size:13px; line-height:1.7; margin-bottom:20px; }
  .answers { margin-top:20px; gap:11px; }
  .answer { min-height:56px; font-size:16px; }
  .feedback { padding:18px 16px; margin-top:21px; }
  .feedback p { font-size:14px; line-height:1.9; }
  .exercise-actions { margin-top:22px; gap:12px; }
  .exercise-actions .primary { width:100%; min-height:52px; font-size:15px; }
  .exercise-actions .secondary { width:100%; min-height:48px; }
  .exercise-actions small { font-size:12px; }
  .result .exercise-actions { flex-direction:column-reverse; }
  .result>p { font-size:14px; }
  .memory-intro p { font-size:14px; }
  .memory-intro>.primary { width:100%; min-height:52px; }
  .memory-intro .instructions { gap:23px; font-size:12px; margin:22px 0; }
  .memory-table { margin-top:20px; margin-bottom:20px; padding:17px 14px; }
  .memory-hand { gap:8px; }
  .memory-choices .answer { min-height:54px; }
  .note-body p { font-size:15px; line-height:1.95; }
  .note-body { padding:25px 20px; }
  .page-heading p { font-size:14px; }
  .training-note { font-size:13px; }
  .session-footnote { font-size:10px; }
  footer { margin:0 16px; padding-top:20px; }
}
