/* crochetpatternmaker.com — design tokens from the approved canvas */
:root{
  --cream:#f7f2e7; --linen:#f1eadb; --paper:#fffdf8; --ink:#22304a;
  --body:#4d4a42; --muted:#6f6a5e; --mut2:#5c5750; --terra:#a94f32; --terra-d:#8c3f26;
  --line:#ddd3c0; --line-soft:#eee5d2;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--cream);color:var(--body);font:16px/1.55 'Karla','Avenir Next',system-ui,sans-serif}
h1,h2,h3,.serif{font-family:'Instrument Serif',Georgia,serif;font-weight:400;color:var(--ink);margin:0}
h1{font-size:clamp(29px,7.4vw,44px);line-height:1.1}
h1.xl{font-size:clamp(32px,8.6vw,54px)}
h2{font-size:clamp(23px,5.4vw,30px);margin:0 0 16px}
h3{font-size:19px}
p{margin:0 0 14px}
a{color:var(--terra);text-decoration:none}
/* 正文内联链接必须有下划线,不能只靠颜色区分 */
main p a,main li a,main td a,.disclaimer a{text-decoration:underline;text-underline-offset:2px}
a:hover{color:var(--terra-d)}
img{max-width:100%;height:auto}
.wrap{max-width:1180px;margin:0 auto;padding:0 18px}
@media(min-width:720px){.wrap{padding:0 24px}}

/* header */
header{background:var(--paper);border-bottom:1px solid var(--line)}
header .wrap{display:flex;align-items:center;justify-content:space-between;gap:6px;flex-wrap:wrap;min-height:60px}
.logo{display:flex;align-items:center;gap:9px;font-family:'Instrument Serif',Georgia,serif;font-size:20px;color:var(--ink);min-height:44px}
.logo svg{flex:none}
header nav{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0 -10px}
header nav a{color:var(--ink);font-size:15px;font-weight:600;min-height:44px;display:inline-flex;align-items:center;padding:0 10px;border-radius:6px}
header nav a.on{color:var(--terra)}
@media(min-width:720px){
  header .wrap{height:72px;flex-wrap:nowrap;min-height:0}
  .logo{font-size:22px}
  header nav{gap:18px;margin:0}
}

/* buttons & chips */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--terra);color:var(--paper);font-weight:700;font-size:16px;padding:13px 22px;min-height:48px;border-radius:6px;border:0;cursor:pointer;font-family:inherit;-webkit-tap-highlight-color:transparent}
.btn:hover{background:var(--terra-d);color:var(--paper)}
.btn.sec{background:transparent;border:1.5px solid var(--ink);color:var(--ink)}
.btn.sec:hover{background:var(--linen)}
.btn.sm{padding:10px 16px;font-size:14.5px;min-height:44px}
.tag{display:inline-block;background:var(--linen);color:var(--mut2);font-size:12px;font-weight:700;letter-spacing:.08em;padding:4px 10px;border-radius:4px}
.tag.dark{background:var(--ink);color:var(--paper)}
.tag.hot{background:var(--terra);color:var(--paper)}
.chip{display:inline-flex;align-items:center;min-height:44px;border:1px solid var(--line);background:var(--paper);color:var(--body);font-size:14px;font-weight:600;padding:8px 16px;border-radius:999px}
.chip.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}

/* cards */
.card{background:var(--paper);border:1px solid var(--line);border-radius:8px}
.grid3{display:grid;grid-template-columns:1fr;gap:16px}
.grid4{display:grid;grid-template-columns:1fr;gap:14px}
@media(min-width:600px){.grid3,.grid4{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}}
@media(min-width:960px){.grid3{grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}.grid4{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}}
.pcard{overflow:hidden;display:flex;flex-direction:column;color:var(--body)}
.pcard .im{background:var(--paper);border-bottom:1px solid var(--line);height:min(60vw,290px);display:flex;align-items:center;justify-content:center;padding:14px;position:relative}
@media(min-width:600px){.pcard .im{height:290px}}
.pcard .im img{max-height:100%;width:auto}
.pcard .tx{padding:15px 18px}
.pcard b{color:var(--ink);font-size:16.5px}
.meta{font-size:14px;color:var(--muted)}
@media(min-width:720px){.meta{font-size:13.5px}}

/* hero */
.hero{padding:32px 0 28px}
.hero.sub{padding:22px 0 20px}
.hero.split{display:grid;grid-template-columns:1fr;gap:28px;align-items:start}
.hero .pitch{display:flex;flex-direction:column;gap:14px}
@media(min-width:900px){
  .hero{padding:56px 0 48px}
  .hero.sub{padding:34px 0 26px}
  .hero.split{grid-template-columns:minmax(0,1fr) minmax(0,470px);gap:56px}
}
.crumb{font-size:13.5px;color:var(--muted);margin:0 0 14px}
.lede{font-size:18px;line-height:1.55;max-width:640px}

/* sections */
section{margin:0 0 40px}
@media(min-width:720px){section{margin:0 0 56px}}
.callout{background:var(--linen);border:1px solid var(--line);border-radius:8px;padding:14px 16px;display:flex;gap:12px;align-items:flex-start;font-size:15px}
.facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media(min-width:900px){.facts{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}}
.fact{background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:14px 16px}
.fact b{display:block;color:var(--ink);font-size:18px}
.fact span{font-size:13px;color:var(--muted)}
.spec{padding:4px 16px}
@media(min-width:720px){.spec{padding:4px 20px}}
.spec .row{display:flex;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px solid var(--line-soft);font-size:15px}
.spec .row:last-child{border-bottom:0}
.spec .row span:first-child{color:var(--mut2);font-weight:600}
.spec .row span:last-child{color:var(--ink);text-align:right}
.steps{list-style:none;counter-reset:s;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}
.steps li{counter-increment:s;display:flex;gap:14px;align-items:flex-start}
.steps li::before{content:counter(s);flex:none;width:28px;height:28px;border-radius:50%;background:var(--ink);color:var(--paper);font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;margin-top:1px}
.tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:var(--paper)}
table{border-collapse:collapse;width:100%;font-size:14.5px}
th,td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--line-soft)}
th{color:var(--ink);background:var(--linen)}
tr:last-child td{border-bottom:0}
kbd,code,.mono{font-family:Menlo,Consolas,monospace;font-size:.92em}
code{background:var(--linen);padding:2px 6px;border-radius:4px}
.rows{background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:16px;font-family:Menlo,Consolas,monospace;font-size:13px;line-height:1.85;color:#3d3a33;overflow-wrap:anywhere}
@media(min-width:720px){.rows{padding:20px 24px;font-size:13.5px;line-height:1.9}}
.rows strong{color:var(--terra);font-weight:700}
details.rows-fold summary{cursor:pointer;font-weight:700;color:var(--ink);font-family:'Karla',sans-serif;font-size:15px;padding:12px 0;min-height:44px;display:flex;align-items:center}
.more{display:grid;grid-template-columns:1fr;gap:12px}
@media(min-width:600px){.more{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}}
.more a{background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:16px 18px;color:var(--body);display:flex;flex-direction:column;gap:6px}
.more a b{color:var(--ink)}
.more a span{font-size:13.5px;color:var(--muted)}
.disclaimer{font-size:14px;color:var(--muted);border-top:1px solid var(--line);padding-top:18px;line-height:1.6}




/* ===== chart studio ===== */
.srcbox{display:flex;align-items:center;gap:12px;margin:0 0 12px;padding:8px 12px;
  background:var(--linen);border-radius:8px}
.srcbox img{max-height:76px;width:auto;border:1px solid var(--line);border-radius:6px;background:var(--paper)}
.symrow{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:0 0 12px;
  padding:8px 12px;background:var(--linen);border-radius:8px}
.symrow .fcheck{font-size:14px;color:var(--ink)}
.studio-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:start}
.studio-grid>*{min-width:0}
@media(min-width:900px){.studio-grid{grid-template-columns:minmax(0,1fr) 330px;gap:26px}}

.toolbar{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.toolbar.sub{margin-bottom:14px}
.tbtn{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  min-width:52px;min-height:52px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;
  background:var(--paper);color:var(--ink);font-family:inherit;font-size:11px;font-weight:600;
  cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .12s,border-color .12s}
.tbtn svg{width:20px;height:20px}
.tbtn:hover:not(:disabled){background:var(--linen)}
.tbtn.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.tbtn:disabled{opacity:.35;cursor:default}
.tbtn span{line-height:1}

#canvas-wrap{overflow:auto;-webkit-overflow-scrolling:touch;background:var(--paper);
  border:1px solid var(--line);border-radius:8px;padding:2px;max-height:74vh;max-width:100%}
#chart-canvas{display:block;touch-action:none;image-rendering:pixelated;cursor:crosshair}
#chart-canvas:focus-visible{outline:3px solid var(--terra);outline-offset:2px}

.saved{display:flex;gap:8px;align-items:stretch;margin-bottom:8px}
.saved-open{flex:1;display:flex;flex-direction:column;gap:2px;align-items:flex-start;text-align:left;
  min-height:52px;padding:9px 12px;border:1px solid var(--line);border-radius:8px;background:var(--paper);
  color:var(--body);font-family:inherit;cursor:pointer}
.saved-open:hover{background:var(--linen)}
.saved-open b{color:var(--ink);font-size:15px}
.saved-del{flex:0 0 auto;min-height:52px}

#t-toast{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);z-index:60;
  background:var(--ink);color:var(--paper);font-size:14.5px;font-weight:600;
  padding:12px 18px;border-radius:8px;box-shadow:0 4px 18px rgba(34,48,74,.25);max-width:calc(100vw - 32px)}

#t-rows[readonly]{background:var(--paper);color:#3d3a33}

/* ===== print sheet ===== */
#print-area{display:none}
@media print{
  header,footer,nav,.tool,.tabs,.toolbar,#canvas-wrap,.studio-grid,.disclaimer,
  .hero,.ex-grid,section h2,section h3,#t-toast,.pat-actions,#t-rows,.meta{display:none!important}
  main,body{margin:0;padding:0;background:#fff}
  #print-area{display:block!important;padding:0}
  #print-area h1{font-family:Georgia,serif;font-size:22pt;margin:0 0 12pt;color:#000}
  #print-area h2{font-family:Georgia,serif;font-size:14pt;margin:16pt 0 8pt;color:#000;display:block!important}
  #print-area table.ps{width:100%;border-collapse:collapse;margin-bottom:14pt;font-size:10pt}
  #print-area table.ps th{text-align:left;width:38%;padding:3pt 0;color:#333;font-weight:600}
  #print-area table.ps td{padding:3pt 0}
  #print-area .pchart{margin:0 0 14pt;page-break-inside:avoid}
  #print-area .pchart svg{max-width:100%;height:auto}
  #print-area pre{white-space:pre-wrap;font-size:9pt;line-height:1.5;margin:0}
  #print-area .pfoot{margin-top:14pt;font-size:8pt;color:#666}
  @page{margin:14mm}
}

/* worked examples */
.ex-grid{display:grid;grid-template-columns:1fr;gap:16px;margin-bottom:18px}
@media(min-width:860px){.ex-grid{grid-template-columns:1fr 1fr;gap:20px}}
.card.ex{padding:16px}
.ex-pair{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}
.ex-pair figure{margin:0;flex:1 1 140px;max-width:220px;text-align:center}
.ex-pair.wide figure{flex:1 1 100%;max-width:100%}
.ex-pair img{width:100%;height:auto;border:1px solid var(--line);border-radius:6px;background:var(--paper)}
.ex-pair figcaption{font-size:12.5px;color:var(--muted);margin-top:6px}
.ex-arrow{font-size:22px;color:var(--terra);flex:none}
.ex-note{margin:14px 0 0;font-size:14.5px;line-height:1.55}
.ex-note b.good{color:#3f6b4a}
.ex-note b.warn{color:var(--terra)}
.ex-note b.bad{color:#8c3f26}

/* tool tabs */
.tabs{display:flex;gap:0;border-bottom:1px solid var(--line);margin-bottom:16px}
.tab{appearance:none;background:none;border:0;border-bottom:2.5px solid transparent;font-family:inherit;font-size:15.5px;font-weight:600;color:var(--muted);padding:12px 14px;min-height:48px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.tab.on{color:var(--ink);font-weight:700;border-bottom-color:var(--terra)}
.tab:hover{color:var(--ink)}

/* maker tool */
.pat-top{display:grid;grid-template-columns:1fr;gap:24px;align-items:start}
@media(min-width:900px){.pat-top{grid-template-columns:minmax(0,520px) minmax(0,1fr);gap:40px}}
.pat-actions{display:flex;gap:10px;flex-wrap:wrap}
.pat-actions .btn{flex:1 1 200px}

.tool{background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:24px;box-shadow:0 2px 14px rgba(34,48,74,.07)}
.drop{border:2px dashed #c9bda3;border-radius:8px;background:#faf6ec;display:flex;flex-direction:column;align-items:center;gap:8px;padding:30px 18px;text-align:center;cursor:pointer}
.drop.on{border-color:var(--terra);background:#faf0e6}
.field{border:1px solid var(--line);border-radius:6px;background:var(--paper);padding:11px 12px;font-size:16px;min-height:48px;color:var(--ink);width:100%;font-family:inherit}
label.f{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:700;color:var(--mut2)}
.tool-split{display:grid;grid-template-columns:1fr;gap:20px;align-items:start}
.tool-split>#chartout{order:-1}
@media(min-width:900px){.tool-split>#chartout{order:0}}
@media(min-width:900px){.tool-split{grid-template-columns:440px minmax(0,1fr);gap:28px}}
.fgrid{display:grid;grid-template-columns:1fr;gap:12px}
@media(min-width:430px){.fgrid{grid-template-columns:1fr 1fr}}
.fcheck{display:flex;flex-direction:row;align-items:center;gap:10px;min-height:44px;font-size:14px;font-weight:600;color:var(--mut2)}
.fcheck{cursor:pointer;-webkit-tap-highlight-color:transparent}
.fcheck input{width:28px;height:28px;accent-color:var(--terra);flex:none;cursor:pointer}
#chartout{overflow:auto;-webkit-overflow-scrolling:touch;max-height:70vh;border:1px solid var(--line);border-radius:8px;background:var(--paper);padding:12px}
#chartout svg{display:block;max-width:none;touch-action:pan-x pan-y pinch-zoom}

/* stitch-along — mobile first: focused current row, list is secondary */
.stitch-bar{position:sticky;top:0;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:12px 14px;z-index:5;margin-bottom:14px;box-shadow:0 2px 10px rgba(34,48,74,.06)}
.stitch-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.stitch-head strong{color:var(--ink);font-size:16px}
.stitch-tools{display:flex;gap:8px;flex-wrap:wrap}
.progress{height:8px;background:#e8dfcc;border-radius:4px;overflow:hidden}
.progress i{display:block;height:8px;background:var(--terra);transition:width .18s ease}

/* focused card */
.now{border:2px solid var(--terra);background:#faf0e6;border-radius:12px;padding:16px;display:flex;flex-direction:column;gap:14px;margin-bottom:14px}
.now .lbl{font-size:12.5px;font-weight:700;letter-spacing:.07em;color:var(--mut2);display:flex;justify-content:space-between;gap:10px}
.now .txt{font-family:Menlo,Consolas,monospace;font-size:16px;line-height:1.75;color:#2f2d28;overflow-wrap:anywhere}
.now .txt b{color:var(--ink);font-family:'Karla',sans-serif;font-size:18px}
.now-nav{display:flex;gap:10px}
.now-nav .btn{flex:1 1 auto;min-height:56px;font-size:17px}
.now-nav .btn.icon{flex:0 0 64px;padding:0}
.next-up{font-size:13.5px;color:var(--muted);overflow-wrap:anywhere}
.stitch-all{margin-top:6px}
.stitch-all summary{cursor:pointer;font-weight:700;color:var(--ink);font-size:15px;min-height:44px;display:flex;align-items:center;gap:8px}
.rowitem{display:flex;gap:14px;align-items:flex-start;padding:14px;min-height:56px;border:1px solid var(--line);border-radius:8px;background:var(--paper);margin-bottom:10px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.rowitem.done{opacity:.5}
.rowitem.cur{border:2px solid var(--terra);background:#faf0e6}
.rowitem input{width:26px;height:26px;accent-color:var(--terra);margin:0;flex:none}
.rowitem .rtx{font-size:14.5px;line-height:1.65;overflow-wrap:anywhere}
@media(min-width:720px){
  .now .txt{font-size:17px}
  .rowitem .rtx{font-size:15px}
}

/* footer */
footer{background:var(--ink);color:#c8c2b4;margin-top:64px}
footer .wrap{padding:40px 24px 28px;display:flex;flex-direction:column;gap:24px}
footer a{color:#c8c2b4}
footer a:hover{color:var(--paper)}
.fcols{display:flex;gap:28px;flex-wrap:wrap}
@media(min-width:720px){.fcols{gap:70px}}
.fcols>div{display:flex;flex-direction:column;gap:2px;font-size:14px}
.fcols>div a{min-height:40px;display:flex;align-items:center}
.fcols .h{font-weight:700;color:var(--paper);font-size:12.5px;letter-spacing:.08em}
.fbot{border-top:1px solid #3a4a68;padding-top:16px;font-size:12.5px;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}

@media(min-width:900px){
  .hero.split .lede{font-size:19px}
}

/* ===== cross stitch additions ===== */
.swatches{display:flex;flex-wrap:wrap;gap:6px}
.swatch{width:40px;height:40px;min-height:40px;border:2px solid var(--line);border-radius:6px;
  font-family:Menlo,monospace;font-size:15px;font-weight:700;cursor:pointer;padding:0;
  -webkit-tap-highlight-color:transparent}
.swatch.on{border-color:var(--terra);box-shadow:0 0 0 2px rgba(169,79,50,.28)}
.swatch:hover{transform:scale(1.06)}
span.sw{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border:1px solid var(--line);border-radius:4px;font-family:Menlo,monospace;font-size:13px;font-weight:700}
#x-floss table{font-size:14px}
#x-floss td:last-child,#x-floss th:last-child{text-align:right}
