@font-face{font-family:Edu QLD Beginner;font-style:normal;font-display:swap;font-weight:400;src:url(/tools/handwriting-tracing-book-generator/assets/edu-qld-beginner-latin-400-normal-CXlCLwdT.woff2)format("woff2"),url(/tools/handwriting-tracing-book-generator/assets/edu-qld-beginner-latin-400-normal-SA0bx4xQ.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Edu NSW ACT Foundation;font-style:normal;font-display:swap;font-weight:400;src:url(/tools/handwriting-tracing-book-generator/assets/edu-nsw-act-foundation-latin-400-normal-Cl2FzTS2.woff2)format("woff2"),url(/tools/handwriting-tracing-book-generator/assets/edu-nsw-act-foundation-latin-400-normal-ByeYMbqZ.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Edu SA Beginner;font-style:normal;font-display:swap;font-weight:400;src:url(/tools/handwriting-tracing-book-generator/assets/edu-sa-beginner-latin-400-normal-5WjeAIaK.woff2)format("woff2"),url(/tools/handwriting-tracing-book-generator/assets/edu-sa-beginner-latin-400-normal-BoyDjI6R.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg:#f1f3f6;--panel:#fff;--border:#dcdfe5;--text:#222;--muted:#777;--primary:#2f6fdb;--danger:#c0392b;--drawer-w:440px;color:var(--text);font-family:system-ui,Microsoft YaHei,PingFang SC,sans-serif;font-size:13px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg)}.app{height:100%;display:flex}.dock{z-index:30;gap:8px;display:flex;position:fixed;bottom:16px;left:16px}.dock-btn{background:var(--panel);border:1px solid var(--border);color:#444;border-radius:10px;flex-direction:column;align-items:center;gap:2px;min-width:64px;padding:8px 10px 6px;font-size:12px;display:flex;position:relative;box-shadow:0 2px 10px #0000001f}.dock-btn:hover:not(:disabled){background:#f6f8fc}.dock-btn.on{border-color:var(--primary);color:var(--primary);background:#eaf1fd;font-weight:600}.dock-icon{font-family:KaiTi,楷体,STKaiti,system-ui,sans-serif;font-size:18px;line-height:1}.dock-btn .dot{background:#e67e22;border-radius:50%;width:8px;height:8px;position:absolute;top:6px;right:8px}.drawer{width:var(--drawer-w);background:var(--panel);border:1px solid var(--border);z-index:29;border-radius:12px;flex-direction:column;max-width:calc(100vw - 32px);max-height:calc(100vh - 100px);animation:.15s ease-out rise;display:flex;position:fixed;bottom:80px;left:16px;box-shadow:0 8px 30px #0000002e}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.drawer-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:10px 14px;font-size:14px;display:flex}.drawer-head button.icon{color:var(--muted);background:0 0;border:none;padding:2px 6px;font-size:18px;line-height:1}.drawer-head button.icon:hover{color:var(--text);background:#f0f0f0}.drawer-body{flex:1;padding:10px 14px 24px;overflow-y:auto}.stepper{gap:4px;margin:0 0 10px;padding:0;list-style:none;display:flex}.stepper li{flex:1}.stepper button{text-align:left;background:#f6f7f9;border-color:#0000;border-radius:8px;align-items:center;gap:8px;width:100%;padding:6px 8px;display:flex}.stepper li.on button{border-color:var(--primary);background:#eaf1fd}.stepper li.done button .step-no{background:#3f9d5a}.step-no{color:#fff;background:#aab;border-radius:50%;flex:0 0 22px;justify-content:center;align-items:center;height:22px;font-size:12px;font-weight:700;display:flex}.stepper li.on .step-no{background:var(--primary)}.step-label{flex-direction:column;line-height:1.2;display:flex}.step-label small{color:var(--muted);font-size:11px}.step-nav{border-top:1px solid var(--border);justify-content:space-between;gap:8px;margin-top:16px;padding-top:10px;display:flex}.subtabs{border-bottom:1px solid var(--border);gap:2px;margin-bottom:8px;display:flex}.subtabs button{color:var(--muted);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;flex:1;padding:7px 0}.subtabs button.on{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}.source{margin-bottom:6px}.help{color:#888;cursor:help;vertical-align:middle;-webkit-user-select:none;user-select:none;border:1px solid #bbb;border-radius:50%;flex:none;justify-content:center;align-items:center;width:15px;height:15px;margin-left:4px;font-size:10px;font-weight:700;line-height:1;display:inline-flex;position:relative}.help:hover,.help:focus{border-color:var(--primary);color:var(--primary);outline:none}.help:after{content:attr(data-tip);color:#fff;text-align:left;white-space:normal;opacity:0;pointer-events:none;z-index:40;background:#333;border-radius:6px;width:max-content;max-width:260px;padding:6px 9px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .12s;position:absolute;top:calc(100% + 6px);left:0;box-shadow:0 2px 8px #0003}.help:hover:after,.help:focus:after{opacity:1}.help.end:after{left:auto;right:0}button.link{color:var(--primary);font-size:inherit;background:0 0;border:none;padding:0;text-decoration:underline}.panel h3{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--border);margin:18px 0 8px;padding-bottom:4px;font-size:12px}.panel h3:first-child{margin-top:4px}.row{flex-wrap:wrap;gap:6px;margin:6px 0;display:flex}button{font:inherit;border:1px solid var(--border);cursor:pointer;background:#fafafa;border-radius:5px;padding:5px 10px}button:hover:not(:disabled){background:#f0f0f0}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--primary);border-color:var(--primary);color:#fff}button.primary:hover:not(:disabled){background:#245cc0}button.danger{color:var(--danger)}button.big{width:100%;padding:10px;font-size:15px}textarea,input:not([type=checkbox]):not([type=range]),select{font:inherit;border:1px solid var(--border);background:#fff;border-radius:5px;width:100%;padding:5px 7px}textarea{resize:vertical;margin:6px 0}.field{align-items:center;gap:8px;margin:5px 0;display:flex}.field>span:first-child{color:#444;flex:0 0 90px}.field input,.field select{flex:1;min-width:0}.field-input{flex:1;align-items:center;gap:6px;display:flex}.field-input em{color:var(--muted);font-style:normal}.field.check{gap:6px}.field.check input[type=checkbox]{flex:none;width:auto;margin:0}.field.check span{flex:1}.hint{color:var(--muted);margin:4px 0;font-size:12px;line-height:1.5}.hint code{background:#f3f3f3;border-radius:3px;padding:1px 4px}.muted{color:var(--muted)}.flash{color:#1d7a3a;margin:4px 0}.error{color:var(--danger);white-space:pre-wrap;margin:8px 0}.chips{flex-wrap:wrap;gap:4px;max-height:200px;margin:6px 0;display:flex;overflow-y:auto}.chip{background:#fff;border-radius:12px;padding:3px 8px}.chip.on{border-color:var(--primary);color:var(--primary);background:#e3ecfb}.chip small{color:var(--muted)}.chip.used{color:#999;background:#f6f6f6;text-decoration:line-through}.chip.used.on{color:var(--primary)}.banner{background:#eef7ea;border:1px solid #b7d3a8;border-radius:6px;margin:8px 0;padding:10px;line-height:1.5}.banner.warn{background:#fff7e6;border-color:#f0c987}.word-list{margin:6px 0;padding:0;list-style:none}.word-item{border-bottom:1px dashed #eee;align-items:center;gap:6px;padding:4px 0;display:flex}.progress{background:#eee;border-radius:3px;height:6px;margin:6px 0;overflow:hidden}.progress>div{background:var(--primary);height:100%;transition:width .2s}.progress.indeterminate>div{width:30%;animation:1.2s ease-in-out infinite slide}@keyframes slide{0%{margin-left:0}50%{margin-left:70%}to{margin-left:0}}.progress-wrap{margin:6px 0}.progress-label{color:#444;justify-content:space-between;margin-bottom:2px;font-size:12px;display:flex}.status-box{border:1px solid var(--border);background:#f8f9fb;border-radius:6px;margin:8px 0;padding:6px 10px}.status-box p{margin:4px 0}.thumb-actions{justify-content:center;gap:2px;margin-top:2px;display:flex}.thumb-actions button{padding:0 5px;font-size:11px}.word-item .badge{text-align:center;color:#fff;background:#999;border-radius:3px;flex:0 0 22px;padding:1px 0;font-size:10px}.word-item.lang-zh .badge{background:#c0392b}.word-item.lang-en .badge{background:#2f6fdb}.word-item .word-text{flex:none;min-width:40px;font-weight:600}.word-item .pinyin-input,.word-item .meaning-input{flex:60px;min-width:50px;font-size:12px}.word-item .sentence-input{flex:2 120px;min-width:80px;font-size:12px}.word-list.rows .meaning-input{flex:60px}.list-head{color:var(--muted);align-items:center;gap:6px;padding:2px 0;font-size:11px;display:flex}.list-head .badge-space{flex:0 0 22px}.list-head .word-text{flex:none;min-width:40px;font-weight:400}.list-head .sentence-input,.list-head .meaning-input{border:none;align-items:center;padding:0 7px;display:flex}.list-head .meaning-input{flex:60px}.list-head .sentence-input{flex:2 120px}.word-list.compact .word-item{padding:2px 0}.image-grid{grid-template-columns:repeat(4,1fr);gap:6px;margin:6px 0;display:grid}.image-grid figure{border:1px solid var(--border);text-align:center;border-radius:4px;margin:0;padding:3px;font-size:11px}.image-grid figure.skip{opacity:.6;border-style:dashed}.image-grid .image-slot{aspect-ratio:1;background:#fff;border:1px dashed #ccc;border-radius:3px;justify-content:center;align-items:center;width:100%;padding:0;font-size:11px;display:flex;overflow:hidden}.image-grid .image-slot img{object-fit:contain;width:100%;height:100%;display:block}.image-grid figcaption{margin-top:2px;font-weight:600}.details{margin:8px 0}.details summary{cursor:pointer;color:var(--muted)}.test-image{object-fit:contain;border:1px solid var(--border);border-radius:4px;width:96px;height:96px;margin:4px 0;display:block}.word-item .actions{gap:2px;margin-left:auto;display:flex}.word-item .actions button{padding:2px 6px}.main{flex:1;padding:16px;overflow:auto}.preview-status{color:var(--muted);flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:10px;display:flex}.preview-brand strong{color:var(--text);font-size:14px}.preview-stats{flex:1}.zoom-ctl{align-items:center;gap:6px;display:flex}.zoom-ctl input[type=range]{width:120px}.zoom-ctl span{text-align:right;min-width:36px}.main{padding-bottom:90px}.pages{flex-direction:column;align-items:center;gap:16px;display:flex}.page{color:#111;background:#fff;flex-direction:column;display:flex;position:relative;overflow:hidden;box-shadow:0 1px 6px #00000026}.page-header{border-bottom:.4mm solid #333;justify-content:space-between;align-items:flex-end;margin-bottom:1.5mm;padding-bottom:1.5mm;display:flex}.page-title{font-family:KaiTi,楷体,STKaiti,Microsoft YaHei,serif;font-size:5.5mm;font-weight:700}.page-meta{color:#333;gap:5mm;font-size:3.6mm;display:flex}.page-content{overflow:hidden}.page-footer{color:#666;justify-content:center;align-items:flex-end;font-size:3.2mm;display:flex}.block-section{color:#333;align-items:center;font-family:KaiTi,楷体,STKaiti,Microsoft YaHei,serif;font-size:5mm;font-weight:700;display:flex}.zh-cell{flex:none}.pinyin-box{white-space:nowrap;justify-content:center;align-items:flex-end;padding-bottom:.6mm;font-family:Arial,Helvetica,Noto Sans,sans-serif;line-height:1;display:flex;overflow:hidden}.card-row{background:0 0;border:.25mm solid #999;border-radius:1.5mm;align-items:stretch;gap:3mm;padding:1.2mm;display:flex}.card-chars{flex:none;display:flex}.card-image{background:0 0;border:.25mm dashed #aaa;border-radius:1mm;flex:none;justify-content:center;align-items:center;display:flex;overflow:hidden}.card-image img{object-fit:contain;width:100%;height:100%;display:block}.card-text{flex-direction:column;flex:auto;justify-content:center;gap:1mm;min-width:0;display:flex;overflow:hidden}.card-word-en{white-space:nowrap;color:#111;line-height:1}.card-pinyin{color:#333;font-family:Arial,Helvetica,Noto Sans,sans-serif}.card-meaning{color:#222;white-space:nowrap;text-overflow:ellipsis;font-family:Microsoft YaHei,PingFang SC,Noto Sans CJK SC,sans-serif;overflow:hidden}.card-sentence{color:#444;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}@media print{.no-print,.dock,.drawer,.preview-status{display:none!important}html,body,#root,.app,.main{background:#fff;height:auto;margin:0;padding:0;overflow:visible}.pages{gap:0;display:block;zoom:1!important}.page{box-shadow:none;break-after:page;page-break-after:always}.page-content>div,.card-row,.zh-row,.en-row{break-inside:avoid;page-break-inside:avoid}.page:last-child{break-after:auto;page-break-after:auto}}
