/* 伴学项目页 · exam-paper aesthetic: exercise-book paper, navy ink, mint (from icon.svg), red grading pen. */
@font-face{font-family:"Smiley Sans";src:url("fonts/SmileySans-Oblique.otf.woff2") format("woff2");font-display:swap}
:root{
  --paper:#f6f1e6;--paper-2:#ede5d4;--card:#fffdf8;--ink:#17212b;--ink-2:#4b5766;--ink-3:#7d8794;
  --mint:#6fd3ae;--mint-ink:#1f8a68;--red:#d4363f;--grid:#d5e1ee;--shadow:0 1px 0 #17212b14,0 14px 30px -18px #17212b55;
  --display:"Smiley Sans","PingFang SC","Hiragino Sans GB",sans-serif;
  --body:"LXGW WenKai Screen","PingFang SC","Hiragino Sans GB","Microsoft YaHei",serif;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:84px}
body{margin:0;color:var(--ink);font:18px/1.75 var(--body);
  background:
    linear-gradient(90deg,transparent 71px,#e8a3a355 71px 73px,transparent 73px),
    repeating-linear-gradient(0deg,transparent 0 33px,var(--grid) 33px 34px),
    var(--paper);
  background-attachment:local}
a{color:var(--mint-ink);text-underline-offset:3px}
a:hover{color:var(--red)}
code{font:0.86em/1.5 var(--mono);background:#17212b0d;border-radius:5px;padding:1px 6px}
:focus-visible{outline:3px solid var(--red);outline-offset:3px}
.skip{position:absolute;left:-999px}.skip:focus{left:12px;top:12px;z-index:99;background:var(--card);padding:8px 14px}

/* top bar */
.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:12px clamp(16px,5vw,64px);background:#f6f1e6e8;backdrop-filter:blur(8px);border-bottom:2px solid var(--ink)}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink);font:24px/1 var(--display)}
.brand small{font:14px var(--body);color:var(--ink-3);margin-left:4px}
.top nav{display:flex;gap:clamp(10px,2.4vw,28px);flex-wrap:wrap}
.top nav a{color:var(--ink);text-decoration:none;font-weight:700}
.top nav a:hover{color:var(--red)}
.top .gh{border:2px solid var(--ink);border-radius:999px;padding:2px 14px;box-shadow:3px 3px 0 var(--ink)}

.hero>*,.loop-body>*,.two>*,.install>*,.grid6>*,.cards>*,.steps>li{min-width:0}
main{max-width:1180px;margin:0 auto;padding:0 clamp(18px,5vw,48px) 40px;overflow-x:clip}
section{padding:72px 0 24px}

/* section header = exam section */
.sec-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;border-bottom:2px solid var(--ink);padding-bottom:8px;margin-bottom:32px}
.sec-head .num{font:40px/1 var(--display);color:var(--red)}
.sec-head h2{font:clamp(30px,4vw,42px)/1.2 var(--display);margin:0}
.sec-head .pts{margin-left:auto;color:var(--ink-3);font-size:16px}
.sec-head .pts::before{content:"（";}.sec-head .pts::after{content:"）"}

/* hero */
.hero{display:grid;grid-template-columns:1.12fr .88fr;gap:56px;align-items:center;padding-top:64px}
.kicker{display:inline-block;margin:0 0 18px;padding:4px 14px;border:2px solid var(--ink);border-radius:999px;background:var(--mint);font-weight:700;font-size:15px}
h1{font:clamp(44px,6.4vw,82px)/1.12 var(--display);margin:0 0 22px;letter-spacing:.5px}
.strike{position:relative;white-space:nowrap}
.strike svg{position:absolute;left:-4%;top:42%;width:108%;height:.42em;overflow:visible}
.strike path{fill:none;stroke:var(--red);stroke-width:7;stroke-linecap:round;stroke-dasharray:320;stroke-dashoffset:320;animation:draw .6s .7s ease-out forwards}
.fix{font:italic 700 .5em/1 var(--body);color:var(--red);display:inline-block;transform:translate(-.2em,-1.3em) rotate(-8deg);opacity:0;animation:pop .35s 1.25s ease-out forwards}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes pop{from{opacity:0;transform:translate(-.2em,-1.0em) rotate(-8deg) scale(.6)}to{opacity:1;transform:translate(-.2em,-1.3em) rotate(-8deg) scale(1)}}
.lede{font-size:20px;color:var(--ink-2);max-width:36em}
.install-box{margin:28px 0 22px;padding:16px 18px;background:var(--card);border:2px solid var(--ink);border-radius:14px;box-shadow:5px 5px 0 var(--ink)}
.install-box .label{display:block;font-size:15px;color:var(--ink-3);margin-bottom:6px}
.copy-row{display:flex;gap:10px;align-items:stretch}
.copy-row code{flex:1;min-width:0;overflow-x:auto;white-space:nowrap;padding:10px 12px;font-size:15px;background:#17212b0f;border-radius:8px}
.copy-row.small code{white-space:normal;font:15px/1.6 var(--body);background:#fffdf8;border:1px dashed var(--ink-3)}
.copy{flex:none;font:700 15px var(--body);color:var(--card);background:var(--ink);border:0;border-radius:8px;padding:0 16px;cursor:pointer}
.copy:hover{background:var(--mint-ink)}.copy.done{background:var(--mint-ink)}
.cta{display:flex;gap:12px;flex-wrap:wrap}
.btn{display:inline-block;padding:10px 22px;border:2px solid var(--ink);border-radius:12px;color:var(--ink);text-decoration:none;font-weight:700;background:var(--card);
  box-shadow:4px 4px 0 var(--ink);transition:transform .12s,box-shadow .12s}
.btn:hover{color:var(--ink);transform:translate(2px,2px);box-shadow:2px 2px 0 var(--ink)}
.btn.primary{background:var(--red);color:#fff}.btn.primary:hover{color:#fff}
.btn.ghost{background:transparent;box-shadow:none}

/* exam paper card */
.paper{position:relative;margin:0;padding:26px 30px 22px;background:var(--card);border:2px solid var(--ink);border-radius:6px;
  transform:rotate(1.6deg);box-shadow:10px 12px 0 var(--paper-2),10px 12px 0 2px var(--ink)}
.paper::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0 31px,#d5e1ee99 31px 32px);pointer-events:none;border-radius:6px}
.paper-head,.paper-foot{display:flex;justify-content:space-between;font-size:15px;color:var(--ink-3)}
.paper-head{border-bottom:1.5px solid var(--ink);padding-bottom:6px;margin-bottom:14px;font-weight:700;color:var(--ink)}
.q{font-weight:700;font-size:20px;margin:0 0 10px;padding-right:96px}
.ans{margin:0;font-size:19px;color:#2b4a8b;padding-right:96px}
.mark-ul{display:block;width:62%;height:14px;margin:-6px 0 0 38%}
.mark-ul path{fill:none;stroke:var(--red);stroke-width:3;stroke-linecap:round;stroke-dasharray:220;stroke-dashoffset:220;animation:draw .5s 1.6s ease-out forwards}
.note{margin:10px 0 16px;color:var(--red);font-size:17px;line-height:1.6;transform:rotate(-1.2deg);opacity:0;animation:fade .4s 2s forwards}
.score{position:absolute;right:22px;top:46px;width:96px;height:96px;border:4px solid var(--red);border-radius:50%;color:var(--red);
  display:flex;align-items:center;justify-content:center;font:52px/1 var(--display);transform:rotate(-12deg) scale(0);animation:stamp .3s 2.4s cubic-bezier(.3,1.6,.6,1) forwards}
.score small{font-size:20px;margin-top:22px}
.paper-foot span{border:1.5px solid var(--mint-ink);color:var(--mint-ink);border-radius:999px;padding:0 10px}
.paper figcaption{position:absolute;left:0;right:0;bottom:-46px;text-align:center;font-size:13px;color:var(--ink-3);transform:rotate(-1.6deg)}
@keyframes fade{to{opacity:1}}
@keyframes stamp{to{transform:rotate(-12deg) scale(1)}}

/* loop */
.loop-body{display:grid;grid-template-columns:470px 1fr;gap:48px;align-items:center}
.ring{position:relative;list-style:none;margin:80px auto;padding:0;width:300px;height:300px;border:3px dashed var(--mint-ink);border-radius:50%;animation:spin 60s linear infinite}
.ring li{position:absolute;left:50%;top:50%;width:140px;height:140px;margin:-70px;border-radius:50%;background:var(--card);border:2px solid var(--ink);
  box-shadow:4px 4px 0 var(--ink);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:12px;
  transform:rotate(calc(var(--i) * 90deg - 90deg)) translate(150px) rotate(calc(90deg - var(--i) * 90deg));animation:unspin 60s linear infinite}
.ring b{font:30px/1.1 var(--display)}.ring span{font-size:14px;line-height:1.35;color:var(--ink-2)}
@keyframes spin{to{rotate:360deg}}
@keyframes unspin{to{rotate:-360deg}}
.loop-copy{font-size:20px}
.loop-copy b{background:linear-gradient(transparent 62%,#6fd3ae88 62%)}

/* features */
.grid6{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.q-card{position:relative;background:var(--card);border:2px solid var(--ink);border-radius:12px;padding:22px 22px 18px;box-shadow:var(--shadow)}
.q-card h3{display:flex;align-items:center;gap:10px;margin:0 0 8px;font:26px/1.2 var(--display)}
.q-card h3 i{font:22px/1 var(--display);font-style:normal;width:36px;height:36px;border-radius:50%;background:var(--ink);color:var(--paper);display:flex;align-items:center;justify-content:center}
.q-card h3 em{font:14px var(--body);font-style:normal;color:var(--ink-3);border:1px solid var(--ink-3);border-radius:999px;padding:0 8px}
.q-card p{margin:0;color:var(--ink-2);font-size:17px}
.q-card::after{content:"✓";position:absolute;right:16px;top:6px;font:44px/1 var(--display);color:var(--red);opacity:0;transform:scale(1.8) rotate(-10deg);transition:.35s cubic-bezier(.3,1.6,.6,1)}
.q-card.in::after{opacity:1;transform:scale(1) rotate(-10deg)}

/* flow lanes */
.lanes{background:var(--card);border:2px solid var(--ink);border-radius:14px;padding:22px clamp(14px,3vw,30px) 26px;box-shadow:var(--shadow)}
.lane-h{display:grid;grid-template-columns:1fr 1fr;gap:24px;font-weight:700;border-bottom:1.5px dashed var(--ink-3);padding-bottom:10px;margin-bottom:6px}
.lane-h span:last-child{text-align:right}
.steps{list-style:none;counter-reset:s;margin:0;padding:0;position:relative}
.steps::before{content:"";position:absolute;left:50%;top:0;bottom:0;border-left:2px dashed var(--ink-3)}
.steps li{counter-increment:s;position:relative;width:calc(50% - 34px);margin:16px 0;padding:14px 18px 14px 56px;background:var(--paper);border:1.5px solid var(--ink);border-radius:10px}
.steps li.r{margin-left:calc(50% + 34px)}
.steps li::before{content:counter(s);position:absolute;left:14px;top:14px;width:30px;height:30px;border-radius:50%;background:var(--red);color:#fff;font:18px/30px var(--display);text-align:center}
.steps li::after{content:"";position:absolute;top:28px;width:34px;border-top:2px solid var(--ink)}
.steps li.l::after{right:-35px}.steps li.r::after{left:-35px}
.steps b{display:block;font:22px/1.3 var(--display);margin-bottom:2px}
.steps u{text-decoration-color:var(--red);text-decoration-thickness:2px}
.steps .copy-row{margin-top:10px}

/* method index cards */
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.idx{position:relative;background:var(--card);border:2px solid var(--ink);border-radius:4px;padding:30px 22px 18px;box-shadow:var(--shadow);
  background-image:linear-gradient(var(--red),var(--red));background-size:100% 2px;background-position:0 58px;background-repeat:no-repeat;transition:transform .2s}
.idx:nth-child(odd){transform:rotate(-1deg)}.idx:nth-child(even){transform:rotate(1.2deg)}
.idx:hover{transform:rotate(0) translateY(-4px)}
.idx::before{content:"";position:absolute;top:10px;left:50%;width:14px;height:14px;margin-left:-7px;border-radius:50%;background:var(--paper);border:2px solid var(--ink)}
.idx h3{font:26px/1 var(--display);margin:8px 0 20px}
.idx .tag{font-size:19px;margin:0 0 10px}
.idx .when{margin:0;font-size:15px;color:var(--ink-3)}

/* video */
.player{position:relative;aspect-ratio:16/9;border:2px solid var(--ink);border-radius:12px;overflow:hidden;box-shadow:6px 6px 0 var(--ink);background:#000}
.player iframe{position:absolute;inset:0;width:100%;height:100%;border:0}

/* install */
.install{display:grid;grid-template-columns:1fr 1fr;gap:26px 36px}
.install .pre,.install .check{background:var(--card);border:2px solid var(--ink);border-radius:12px;padding:18px 22px;box-shadow:var(--shadow)}
.install .pre{grid-row:span 2}
.install h3{font:24px/1.2 var(--display);margin:0 0 10px}
.tabs{display:flex;gap:6px;align-self:end}
.tabs button{font:700 16px var(--body);color:var(--ink);background:var(--paper-2);border:2px solid var(--ink);border-bottom:0;border-radius:10px 10px 0 0;padding:8px 14px;cursor:pointer}
.tabs button[aria-selected="true"]{background:var(--ink);color:var(--paper)}
.tab{grid-column:2;margin-top:-26px;background:var(--card);border:2px solid var(--ink);border-radius:0 12px 12px 12px;padding:16px 22px;box-shadow:var(--shadow)}
.tab ol{margin:0;padding-left:1.4em}.tab li{margin:6px 0}.tab .copy-row{margin:6px 0}
.hint{font-size:15px;color:var(--ink-3);margin:10px 0 0}
.check{grid-column:1/-1}
.check ul{list-style:none;margin:0;padding:0}
.check li{position:relative;padding-left:34px;margin:6px 0}
.check li::before{content:"";position:absolute;left:0;top:6px;width:20px;height:20px;border:2px solid var(--ink);border-radius:4px}
.check li::after{content:"✓";position:absolute;left:3px;top:-6px;font:28px/1 var(--display);color:var(--red)}

/* data + limits */
.two{display:grid;grid-template-columns:1fr 1fr;gap:48px}
.tree{margin:0 0 16px;padding:16px 18px;background:var(--ink);color:#e9f2ff;border-radius:12px;font:14px/1.7 var(--mono);overflow-x:auto}
.tree i{color:var(--mint);font-style:normal}
.plain{padding-left:1.2em;color:var(--ink-2)}
.limits ul{list-style:none;padding:0;margin:0}
.limits li{position:relative;margin:0 0 16px;padding:12px 16px 12px 20px;border-left:4px solid var(--red);background:#d4363f0d;color:var(--ink-2)}
.limits b{color:var(--red)}

footer{border-top:2px solid var(--ink);padding:28px clamp(18px,5vw,64px) 40px;font-size:15px;color:var(--ink-3);text-align:center}
footer p{margin:6px 0}footer img{vertical-align:-6px}

/* reveal */
.reveal{opacity:0;transform:translateY(18px);transition:opacity .5s,transform .5s}
.reveal.in{opacity:1;transform:none}

@media (max-width:960px){
  body{background:repeating-linear-gradient(0deg,transparent 0 33px,var(--grid) 33px 34px),var(--paper)}
  .hero,.loop-body,.two,.install{grid-template-columns:minmax(0,1fr)}
  .paper{margin:10px 6px 56px}
  .ring{width:220px;height:220px}.ring li{width:116px;height:116px;margin:-58px;transform:rotate(calc(var(--i) * 90deg - 90deg)) translate(110px) rotate(calc(90deg - var(--i) * 90deg))}
  .ring b{font-size:24px}.ring span{font-size:12px}
  .loop-body{gap:24px}.ring{margin:70px auto}
  .grid6,.cards{grid-template-columns:1fr 1fr}
  .install .pre{grid-row:auto}.tab{grid-column:1}.tabs{flex-wrap:wrap}
  .steps::before{left:14px}.steps li,.steps li.r{width:auto;margin-left:34px}
  .steps li.l::after,.steps li.r::after{left:-35px;right:auto}
  .lane-h{grid-template-columns:1fr;gap:4px}.lane-h span:last-child{text-align:left}
}
@media (max-width:620px){
  .copy-row.small{flex-direction:column}.copy-row.small .copy{padding:10px}
  .q,.ans{padding-right:0}.score{position:static;margin:0 0 10px auto;width:76px;height:76px;font-size:40px}
  .paper{padding:20px}
  body{font-size:17px}.grid6,.cards{grid-template-columns:1fr}
  .top nav a:not(.gh){display:none}
  .sec-head .pts{margin-left:0;width:100%}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-delay:0s!important;transition:none!important}
  .reveal{opacity:1;transform:none}
}
