*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{border-color:var(--hairline)}.han-card{font-family:JyunsaiKaai,PingFang HK,Kaiti TC,STKaiti,serif;font-weight:400;font-synthesis:none}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-4{top:1rem}.z-50{z-index:50}.mt-auto{margin-top:auto}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-4{width:1rem;height:1rem}.h-auto{height:auto}.h-full{height:100%}.w-3\/4{width:75%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.flex-col{flex-direction:column}.gap-0{gap:0px}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-xs{border-radius:var(--r-xs)}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.bg-background{background-color:var(--paper)}.bg-black\/50{background-color:#00000080}.from-amber-400{--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-lime-400{--tw-gradient-from: #a3e635 var(--tw-gradient-from-position);--tw-gradient-to: rgb(163 230 53 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-400{--tw-gradient-from: #fb923c var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-400{--tw-gradient-from: #f87171 var(--tw-gradient-from-position);--tw-gradient-to: rgb(248 113 113 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-400{--tw-gradient-from: #fb7185 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 113 133 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-400{--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-400{--tw-gradient-from: #94a3b8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(148 163 184 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-400{--tw-gradient-from: #2dd4bf var(--tw-gradient-from-position);--tw-gradient-to: rgb(45 212 191 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-400{--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-amber-500{--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.to-blue-500{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.to-cyan-500{--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.to-green-500{--tw-gradient-to: #22c55e var(--tw-gradient-to-position)}.to-orange-500{--tw-gradient-to: #f97316 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to: #ec4899 var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to: #a855f7 var(--tw-gradient-to-position)}.to-rose-600{--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.to-slate-600{--tw-gradient-to: #475569 var(--tw-gradient-to-position)}.p-0{padding:0}.p-4{padding:1rem}.p-5{padding:1.25rem}.pb-10{padding-bottom:2.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-semibold{font-weight:600}.text-foreground{color:var(--ink)}.text-muted-foreground{color:var(--ink-muted)}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color: var(--paper)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.running{animation-play-state:running}@font-face{font-family:JyunsaiKaai;src:url(/fonts/JyunsaiKaai-subset.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"Noto Serif TC";src:url(/fonts/NotoSerifTC-subset.woff2) format("woff2");font-weight:400 900;font-style:normal;font-display:swap}@font-face{font-family:OpenHuninn;src:url(/fonts/OpenHuninn-subset.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"Noto Serif SC";src:url(/fonts/NotoSerifSC-subset.woff2) format("woff2");font-weight:400 900;font-style:normal;font-display:swap}:root{--paper: #f2ecdc;--paper-card: #fdfaf1;--card-edge: #e4dbc4;--hairline: #d8cfb6;--ink: #2c2721;--ink-muted: #706959;--ink-faint: #8f8671;--vermilion: #b23a2a;--vermilion-deep: #96301f;--amber-paper: #f7ecc9;--amber-edge: #e0cd8f;--amber-ink: #7a6420;--jade: #4a7a52;--on-vermilion: #fff8ee;--gold: #d4a017;--track: #eae2cc;--surface-glass: rgba(253, 250, 241, .94);--shell-wash: rgba(255, 253, 246, .45);--ink-wash: rgba(44, 39, 33, .05);--ink-wash-press: rgba(44, 39, 33, .075);--danger-wash: rgba(178, 58, 42, .06);--danger-edge: rgba(178, 58, 42, .35);--scrim: rgba(44, 39, 33, .32);--theme: #b23a2a;--tabbar-h: 64px;--topbar-pad-t: 13px;--topbar-pad-b: 11px;--topbar-h: calc( max(var(--topbar-pad-t), env(safe-area-inset-top, 0px)) + 44px + var(--topbar-pad-b) + 1px );--main-pad-t: 18px;--main-pad-b: 28px;--tab-gap: 28px;--fs-2xs: 12px;--fs-xs: 13px;--fs-sm: 14px;--fs-md: 15px;--fs-base: 16px;--fs-lg: 17px;--fs-xl: 20px;--fs-2xl: 24px;--fs-3xl: 28px;--r-xs: 4px;--r-sm: 6px;--r-md: 8px;--r-lg: 12px;--r-xl: 16px;--r-pill: 999px;--shadow-xs: 0 1px 2px rgba(74, 62, 38, .05);--shadow-sm: 0 1px 3px rgba(74, 62, 38, .08);--shadow-md: 0 3px 10px rgba(74, 62, 38, .12);--shadow-stack: 0 6px 16px rgba(74, 62, 38, .07);--shadow-card: 0 1px 0 rgba(255, 255, 255, .7) inset, 0 1px 2px rgba(74, 62, 38, .05), 0 10px 26px rgba(74, 62, 38, .08);--shadow-pop: 0 14px 34px rgba(74, 62, 38, .16);--shadow-up: 0 -6px 18px rgba(74, 62, 38, .06);--shadow-drawer: -14px 0 40px rgba(44, 39, 33, .18);--shadow-modal: 0 24px 60px rgba(44, 39, 33, .3);--shadow-seal: 0 2px 0 var(--vermilion-deep), 0 8px 18px rgba(178, 58, 42, .25);--shadow-seal-sm: 0 2px 0 var(--vermilion-deep), 0 4px 10px rgba(178, 58, 42, .3);--shadow-seal-pressed: 0 1px 0 var(--vermilion-deep);--dur-press: 80ms;--dur-fast: .16s;--dur-base: .28s;--dur-slow: .42s;--serif: "Noto Serif TC", "Songti TC", "PMingLiU", serif;--round: "OpenHuninn", "Noto Serif TC", "PingFang HK", serif;--grid-bg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='236' height='236'%3E%3Crect x='1.5' y='1.5' width='233' height='233' fill='none' stroke='%23cbb98f' stroke-width='2.5'/%3E%3Cline x1='118' y1='0' x2='118' y2='236' stroke='%23d8c9a2' stroke-width='1.5' stroke-dasharray='7 7'/%3E%3Cline x1='0' y1='118' x2='236' y2='118' stroke='%23d8c9a2' stroke-width='1.5' stroke-dasharray='7 7'/%3E%3Cline x1='0' y1='0' x2='236' y2='236' stroke='%23d8c9a2' stroke-width='1.5' stroke-dasharray='7 7'/%3E%3Cline x1='236' y1='0' x2='0' y2='236' stroke='%23d8c9a2' stroke-width='1.5' stroke-dasharray='7 7'/%3E%3C/svg%3E")}@media(max-height:840px){:root{--topbar-pad-t: 9px;--topbar-pad-b: 8px;--main-pad-t: 10px;--tab-gap: 12px}}body{font-family:var(--serif);color:var(--ink);background-color:var(--paper);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E");min-height:100vh}body:before{content:"學";position:fixed;right:-5rem;bottom:-7rem;font-size:28rem;font-weight:900;color:#2c27210a;pointer-events:none;z-index:0;line-height:1}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid var(--vermilion);outline-offset:3px}#root{width:100%;max-width:430px;margin:0 auto;min-height:100dvh;position:relative;z-index:1;background:var(--shell-wash);border-left:1px solid var(--hairline);border-right:1px solid var(--hairline);display:flex;flex-direction:column}@media(max-width:460px){#root{border:none}body:before{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@supports selector(:has(a)){@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3){#root:has(.tabbar),#root:has(.admin-main){max-width:860px}#root:not(:has(.tabbar)){border-color:transparent;background:none}#root:has(.legal-page){max-width:760px}}}@supports selector(:has(a)){@media screen and (min-width:1024px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){#root:has(.app-main.in-app),#root:has(.admin-main){max-width:1120px}#root:has(.app-loading),#root:has(.select-screen),#root:has(.login-screen:not(.landing)){border-color:transparent;background:none}#root:has(.legal-page){max-width:760px}#root:has(.tabbar),#root:has(.admin-main){--topbar-h: calc(60px + env(safe-area-inset-top, 0px)) ;--main-pad-t: 24px;--main-pad-b: 32px}}}@supports selector(:has(a)){@media screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-width:1023px)and (max-height:520px){#root:has(.tabbar),#root:has(.admin-main){--topbar-h: calc(48px + env(safe-area-inset-top, 0px)) ;--main-pad-t: 10px;--main-pad-b: 10px}}}.paper-card{background:var(--paper-card);border:1px solid var(--card-edge);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.is-spoken:before{content:"粵語﹕";margin-right:2px}.card-actions,.hero-actions{display:flex;flex-direction:column;gap:10px;margin-top:18px;flex-shrink:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid transparent;border-radius:var(--r-sm);font-family:var(--round);font-weight:700;line-height:1.3;text-align:center;text-decoration:none;cursor:pointer}.btn svg{flex-shrink:0}.btn:disabled{cursor:not-allowed}.btn-lg{--btn-x: 12px;--btn-track: 6px;min-height:54px;padding:8px var(--btn-x);font-size:var(--fs-xl)}.btn-md{--btn-x: 12px;--btn-track: 4px;min-height:48px;padding:8px var(--btn-x);font-size:var(--fs-lg)}.btn-sm{--btn-x: 13px;--btn-track: 2px;position:relative;flex-shrink:0;white-space:nowrap;min-height:36px;padding:5px var(--btn-x);font-size:var(--fs-md)}.btn-sm:after{content:"";position:absolute;inset:-6px 0}.btn-primary{border-radius:var(--r-lg);background:var(--vermilion);color:var(--on-vermilion);font-weight:900;letter-spacing:var(--btn-track, 0);padding-left:calc(var(--btn-x, 12px) + var(--btn-track, 0px));box-shadow:var(--shadow-seal);transition:transform var(--dur-press) ease}.btn-primary:active{transform:translateY(1px) scale(.99);box-shadow:var(--shadow-seal-pressed)}.btn-primary:disabled{opacity:.55}.btn-press{background-image:linear-gradient(#ffffff4d,#ffffff4d);background-repeat:no-repeat;background-size:0% 100%;touch-action:none;-moz-user-select:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}.btn-press.is-pressing{background-size:100% 100%;transition:background-size var(--press-ms, .6s) linear}.btn-primary.is-jade{background:var(--jade);box-shadow:0 2px color-mix(in srgb,var(--jade) 78%,#000),0 8px 18px color-mix(in srgb,var(--jade) 25%,transparent)}.btn-primary.is-jade:active{box-shadow:0 1px color-mix(in srgb,var(--jade) 78%,#000)}.btn-outline{border-color:var(--hairline);background:var(--paper-card);color:var(--ink);box-shadow:var(--shadow-sm)}.btn-outline:hover{border-color:var(--ink)}.btn-outline:disabled{color:var(--ink-faint);background:transparent;border-style:dashed;box-shadow:none}.btn-outline svg{color:var(--theme)}.btn-outline:disabled svg{color:var(--ink-faint)}.btn-outline.is-playing{border-color:var(--theme);color:var(--theme)}.btn-outline.is-danger,.btn-outline.is-jade{border-width:1.5px;border-radius:var(--r-lg);font-weight:900;letter-spacing:var(--btn-track, 0);padding-left:calc(var(--btn-x, 12px) + var(--btn-track, 0px));box-shadow:none}.btn-outline.is-danger{border-color:var(--vermilion);color:var(--vermilion)}.btn-outline.is-jade{border-color:var(--jade);color:var(--jade)}.btn-quiet{color:var(--ink-muted);font-weight:400;text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--hairline)}.btn-quiet:hover{color:var(--ink);text-decoration-color:var(--ink)}.btn-block{display:flex;width:100%}.btn-pill{border-radius:var(--r-pill)}.btn-row,.btn-pair{display:grid;grid-template-columns:1fr 1fr;gap:10px}.link,.link-quiet{border:none;background:none;padding:0;font:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.link{color:var(--vermilion)}.link-quiet{color:var(--ink-muted)}.link-quiet:hover{color:var(--ink)}.tap-44{position:relative}.tap-44:after{content:"";position:absolute;inset:-12px -10px}.input-line{flex:1;width:100%;min-width:0;min-height:44px;border:none;border-bottom:1px solid var(--hairline);border-radius:0;background:transparent;font-size:var(--fs-base);color:var(--ink);padding:6px 2px}.input-line:focus,.input-line:focus-visible{outline:none;border-bottom-color:var(--ink);box-shadow:0 1px 0 var(--ink)}.input-line[aria-invalid=true]{border-bottom-color:var(--vermilion)}.input-line[aria-invalid=true]:focus{box-shadow:0 1px 0 var(--vermilion)}.form-error{margin-top:8px;font-size:var(--fs-sm);font-weight:700;color:var(--vermilion)}.form-error.is-summary{margin:4px 0 14px;text-align:center}.notice{display:flex;gap:9px;align-items:flex-start;background:var(--amber-paper);border:1px solid var(--amber-edge);border-radius:var(--r-sm);padding:11px 13px;font-size:var(--fs-sm);line-height:1.75;color:var(--amber-ink);margin-bottom:16px;flex-shrink:0}.notice svg{flex-shrink:0;margin-top:3px}.notice.is-error{background:var(--danger-wash);border-color:var(--danger-edge);color:var(--vermilion-deep)}.notice .retry{flex-shrink:0;margin-left:auto;border:none;background:none;font-size:var(--fs-sm);font-weight:700;color:inherit;cursor:pointer;text-decoration:underline;text-underline-offset:3px;position:relative}.notice .retry:after{content:"";position:absolute;inset:-12px -8px}.modal-overlay{position:fixed;inset:0;z-index:60;background:var(--scrim);display:flex;align-items:center;justify-content:center;padding:24px;animation:overlayIn var(--dur-fast) ease-out}.modal-sheet:focus,.print-screen:focus{outline:none}.modal-sheet{background:var(--paper-card);border:1px solid var(--card-edge);border-radius:var(--r-md);box-shadow:var(--shadow-modal);width:100%;max-width:330px;padding:22px 22px 20px;text-align:center;position:relative;max-height:100%;overflow-y:auto;animation:sheetIn var(--dur-fast) cubic-bezier(.34,1.4,.64,1)}@keyframes overlayIn{0%{opacity:0}}@keyframes sheetIn{0%{opacity:0;transform:translateY(14px) scale(.95)}}.modal-sheet .m-char{font-size:var(--fs-md);color:var(--ink-muted);letter-spacing:2px;font-weight:700}.stroke-grid-bg{margin:10px auto 6px;display:block;background-image:var(--grid-bg);background-size:100% 100%;border-radius:var(--r-xs);width:240px;height:240px}.stroke-failed{padding:48px 0;font-size:var(--fs-sm);font-weight:700;color:var(--ink-muted)}.stroke-source{margin-top:10px;font-size:var(--fs-sm);line-height:1.6;color:var(--ink);text-align:center}@keyframes veilIn{0%{opacity:0}to{opacity:1}}.lazy-veil{position:fixed;inset:0;z-index:60;display:grid;place-items:center;background:var(--scrim);color:var(--on-vermilion);font-size:var(--fs-base);font-weight:700;letter-spacing:2px;animation:veilIn var(--dur-fast) ease .3s both}.modal-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.modal-actions-wide{grid-column:1 / -1}.paper-toast[data-sonner-toaster][data-sonner-theme]{--normal-bg: var(--paper-card);--normal-border: var(--card-edge);--normal-text: var(--ink);--border-radius: var(--r-md);font-family:var(--serif)}.paper-toast [data-sonner-toast]{box-shadow:var(--shadow-pop)}.paper-toast [data-sonner-toast][data-type=success]{border-left:3px solid var(--jade)}.paper-toast [data-sonner-toast][data-type=error]{border-left:3px solid var(--vermilion)}.paper-toast [data-sonner-toast] [data-description]{color:var(--ink-muted)}.confetti-layer{position:fixed;inset:0;pointer-events:none;z-index:70;overflow:hidden}.confetti-piece{position:absolute;top:30%;animation:confettiFall 1.2s ease-in forwards;will-change:transform,opacity}@keyframes confettiFall{0%{transform:translate(0) rotate(0);opacity:1}80%{opacity:1}to{transform:translate(var(--cx),58vh) rotate(var(--cr));opacity:0}}.empty-state{padding:56px 28px;text-align:center;font-size:var(--fs-base);color:var(--ink-muted);line-height:2}.empty-undo{margin:12px 0 0;font-size:var(--fs-sm)}.empty-actions{display:flex;flex-direction:column;gap:10px;margin-top:22px;text-align:left}.status-screen{align-items:center;justify-content:center}.status-screen>.empty-state{width:100%}.status-headline{margin-bottom:8px;font-size:44px;font-weight:900;line-height:1.25;color:var(--ink)}.loading-note{font-size:var(--fs-base);font-weight:700;color:var(--ink-muted)}.crash-hint{margin-top:8px;font-size:var(--fs-xs);line-height:1.7;color:var(--ink-muted)}.crash-hint a{color:var(--vermilion);text-decoration:underline;text-underline-offset:2px}.topbar{position:sticky;top:0;z-index:20;background:var(--surface-glass);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-bottom:1px solid var(--hairline);padding:max(var(--topbar-pad-t),env(safe-area-inset-top,0px)) 18px var(--topbar-pad-b);display:flex;align-items:center;justify-content:space-between;gap:10px}.brand{font-size:var(--fs-xl);font-weight:900;letter-spacing:1.5px;display:flex;align-items:center;gap:8px;min-width:0}.brand-seal{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:28px;height:28px;border-radius:var(--r-sm);background:var(--vermilion);color:var(--on-vermilion);font-size:var(--fs-base);font-weight:900;box-shadow:var(--shadow-seal-sm);transform:rotate(-3deg)}.brand-seal.big{width:38px;height:38px;font-size:var(--fs-xl);border-radius:var(--r-md)}.brand-word{flex-shrink:0}.brand-who{display:inline-flex;align-items:center;gap:3px;min-width:0;min-height:44px;margin-left:-2px;padding:0 6px;border:none;border-radius:var(--r-pill);background:none;font-size:var(--fs-sm);font-weight:600;color:var(--ink-muted);letter-spacing:1px;cursor:pointer}.brand-who svg{flex-shrink:0}.brand-who>span{min-width:0}.brand-who:hover{color:var(--ink);background:var(--ink-wash)}.brand-who:disabled{opacity:.55;cursor:wait}@media(max-width:1023px){.topbar.is-guest .brand-word{display:none}}@media(max-width:699px){.topbar.has-child .brand-word{display:none}}.topbar-right{display:flex;align-items:center;gap:10px;flex-shrink:0}.star-chip{font-family:var(--round);display:inline-flex;align-items:center;gap:5px;padding:4px 2px;font-weight:900;font-size:var(--fs-base);color:var(--ink)}.star-chip .s{color:var(--vermilion)}@keyframes starPop{0%{transform:scale(1)}40%{transform:scale(1.3)}to{transform:scale(1)}}.star-chip.pop{animation:starPop var(--dur-base) ease}.topbar .btn-parent{position:relative;min-height:44px;border-color:var(--ink-muted)}.topbar .btn-parent .new-dot{position:absolute;top:-3px;right:-3px;width:10px;height:10px;border:2px solid var(--paper-card);border-radius:50%;background:var(--vermilion)}.topbar .btn-parent svg{color:var(--ink-muted)}.topbar .btn-parent:hover{border-color:var(--ink);background:var(--paper)}.topbar .btn-parent:hover svg{color:var(--ink)}.topbar .btn-parent:active{transform:translateY(1px)}@supports selector(:has(a)){@media screen and (min-width:1024px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){#root:has(.tabbar) .topbar,#root:has(.admin-main) .topbar{height:var(--topbar-h);padding:env(safe-area-inset-top) 32px 0}#root:has(.tabbar) .brand{max-width:calc(50% - 230px)}}@media screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-width:1023px)and (max-height:520px){#root:has(.tabbar) .topbar,#root:has(.admin-main) .topbar{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}#root:has(.tabbar) .brand{max-width:calc(50% - 120px)}}}.app-main{flex:1;--page-x: 18px;padding:var(--main-pad-t) var(--page-x) var(--main-pad-b);display:flex;flex-direction:column}.app-main.in-app{padding-bottom:calc(var(--tabbar-h) + var(--tab-gap) + env(safe-area-inset-bottom))}.app-main.in-app>*{animation:tabIn var(--dur-fast) ease-out}@keyframes tabIn{0%{opacity:0;transform:translateY(8px)}}@media(max-width:380px){.app-main{--page-x: 14px}}@supports selector(:has(a)){@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3){.app-main.in-app{--page-x: 28px}}@media screen and (min-width:1024px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){.app-main.in-app,.app-main.admin-main{padding:var(--main-pad-t) 32px var(--main-pad-b)}}@media screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-width:1023px)and (max-height:520px){.app-main.in-app,.app-main.admin-main{padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}}}.tabbar{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:430px;background:var(--surface-glass);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-top:1px solid var(--hairline);display:grid;grid-template-columns:repeat(3,1fr);z-index:20;padding-bottom:env(safe-area-inset-bottom)}.tabbar button{border:none;background:none;font-family:var(--round);font-size:var(--fs-sm);font-weight:600;color:var(--ink-muted);padding:9px 0 11px;cursor:pointer;position:relative;letter-spacing:2px;display:flex;flex-direction:column;align-items:center;gap:3px}.tabbar button.active{color:var(--vermilion);font-weight:900}.tabbar button.active:before{content:"";position:absolute;top:-1px;left:30%;right:30%;height:2.5px;background:var(--vermilion)}@supports selector(:has(a)){@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3){.tabbar{max-width:860px}}@media screen and (min-width:1024px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){.tabbar{top:env(safe-area-inset-top);bottom:auto;width:auto;max-width:none;height:60px;display:flex;gap:4px;padding-bottom:0;background:none;-webkit-backdrop-filter:none;backdrop-filter:none;border-top:none;z-index:21}.tabbar button{flex-direction:row;gap:7px;padding:0 18px;font-size:var(--fs-md)}.tabbar button.active:before{inset:auto 16px 0}}}@supports selector(:has(a)){@media screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-width:1023px)and (max-height:520px){.tabbar{height:48px;gap:0}.tabbar button{padding:0 9px;font-size:var(--fs-sm);letter-spacing:0}.tabbar button svg{display:none}.tabbar button.active:before{left:8px;right:8px}}}.cards-screen{flex:1;display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto 1fr auto auto;grid-template-areas:"mode themes search" "card card card" "actions actions actions" "foot foot foot"}.cards-screen>.cards-mode{grid-area:mode}.cards-screen>.theme-bar{grid-area:themes}.cards-screen>.search-box{grid-area:search}.cards-screen>.card-stack,.cards-screen>.empty-state{grid-area:card}.cards-screen>.empty-state{align-self:start}.cards-screen>.card-actions{grid-area:actions}.cards-screen>.report-reading{grid-area:foot}.search-box{position:relative;display:flex;align-items:flex-end;margin:0 calc(var(--page-x) * -1) 12px 0;padding:2px calc(var(--page-x) - 10px) 0 2px;border-bottom:1px solid var(--hairline)}.search-toggle{width:44px;height:44px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--ink-muted);cursor:pointer}.search-field{display:none;position:relative;flex:1}.search-box.open{grid-column:1 / -1;z-index:4;min-height:47px;margin-right:0;padding:0;border-bottom-color:transparent}.search-box.open .search-toggle{display:none}.search-box.open .search-field{display:block}.cards-screen:has(>.search-box.open)>.theme-bar,.cards-screen:has(>.search-box.open)>.cards-mode{visibility:hidden}.search-field>svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--ink-muted);pointer-events:none}.search-input{width:100%;border:1px solid var(--card-edge);border-radius:var(--r-sm);background:var(--paper-card);font-size:var(--fs-base);color:var(--ink);padding:10px 38px;outline:none;box-shadow:var(--shadow-xs);-webkit-appearance:none}.search-input::-moz-placeholder{color:var(--ink-muted)}.search-input::placeholder{color:var(--ink-muted)}.search-input:focus{border-color:var(--ink-muted)}.search-input::-webkit-search-cancel-button,.search-input::-webkit-search-decoration{-webkit-appearance:none;appearance:none}.search-clear{position:absolute;right:0;top:50%;transform:translateY(-50%);border:none;background:none;color:var(--ink-muted);cursor:pointer;padding:13px;display:flex}.search-results{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:30;max-height:288px;overflow-y:auto;background:var(--paper-card);border:1px solid var(--card-edge);border-radius:var(--r-sm);box-shadow:var(--shadow-pop);padding:4px}.search-item{display:flex;align-items:center;gap:11px;width:100%;border:none;background:none;color:var(--ink);text-align:left;padding:9px 10px;border-radius:var(--r-xs);cursor:pointer}.search-item:hover{background:var(--ink-wash)}.search-item .sc{font-size:var(--fs-3xl);line-height:1;flex-shrink:0}.search-item .sbody{min-width:0;flex:1}.search-item .shint{display:block;font-size:var(--fs-md);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-item .stheme{display:block;font-size:var(--fs-xs);color:var(--ink-muted);margin-top:1px}.search-item .sdone{flex-shrink:0;font-size:var(--fs-xs);font-weight:700;color:var(--vermilion)}.search-empty{padding:16px 10px;text-align:center;font-size:var(--fs-sm);color:var(--ink-muted)}.search-locked{display:grid;justify-items:center;gap:10px}.theme-bar{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;margin:0 0 12px calc(var(--page-x) * -1);padding:2px 6px 0 var(--page-x);border-bottom:1px solid var(--hairline)}.theme-bar::-webkit-scrollbar{display:none}.theme-bar:not(.at-end){-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent)}.theme-tab{flex-shrink:0;border:none;background:none;font-family:var(--round);font-size:var(--fs-base);font-weight:600;color:var(--ink-muted);cursor:pointer;min-height:44px;padding:8px 10px 10px;position:relative;white-space:nowrap;transition:color var(--dur-fast) ease}.cards-mode{display:flex;align-items:center;margin:0 0 12px calc(var(--page-x) * -1);padding:2px 4px 0 var(--page-x);border-bottom:1px solid var(--hairline)}.cards-mode+.theme-bar{margin-left:0;padding-left:2px}.mode-chip{font-family:var(--round);padding:4px 10px;border-radius:var(--r-pill);background:var(--jade);color:var(--on-vermilion);font-size:var(--fs-xs);font-weight:700;letter-spacing:2px;white-space:nowrap}.theme-tab.locked{opacity:.45}.theme-tab .cnt{font-size:var(--fs-2xs);color:var(--ink-muted);margin-left:3px;font-weight:400}.theme-tab .theme-emoji{margin-right:4px;font-size:var(--fs-md)}.theme-tab.active{color:var(--tab-color, var(--ink));font-weight:900}.theme-tab.active:after{content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:3px;background:var(--tab-color, var(--ink));border-radius:2px}.theme-tab.active .cnt{color:var(--tab-color, var(--ink-muted))}.card-stack{position:relative;z-index:0;display:flex;flex-direction:column}.card-stack:before,.card-stack:after{content:"";position:absolute;inset:0;background:var(--paper-card);border:1px solid var(--card-edge);border-radius:var(--r-xl);box-shadow:var(--shadow-stack)}.card-stack:before{transform:rotate(-1.8deg) translate(-3px,5px);z-index:-1}.card-stack:after{transform:rotate(1.2deg) translate(4px,9px);z-index:-2;opacity:.65}@keyframes cardInRight{0%{opacity:0;transform:translate(48px) rotate(1.6deg)}to{opacity:1;transform:translate(0) rotate(0)}}@keyframes cardInLeft{0%{opacity:0;transform:translate(-48px) rotate(-1.6deg)}to{opacity:1;transform:translate(0) rotate(0)}}.flashcard{position:relative;flex:1;width:100%;min-height:300px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:48px 24px 28px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:pan-y;text-align:center;color:var(--ink);border-top:3px solid var(--theme);border-radius:var(--r-xl);animation:cardInRight var(--dur-fast) cubic-bezier(.3,.9,.4,1)}.flashcard.enter-left{animation-name:cardInLeft}.flashcard.no-image{background-color:color-mix(in srgb,var(--theme) 7%,var(--paper-card));background-image:radial-gradient(color-mix(in srgb,var(--theme) 16%,transparent) 1.5px,transparent 1.5px);background-size:22px 22px}.flashcard:active{transform:scale(.995)}.char-box{width:clamp(220px,26dvh,250px);height:clamp(220px,26dvh,250px);display:flex;align-items:center;justify-content:center;background-image:var(--grid-bg);background-size:100% 100%;border-radius:var(--r-xs)}.char-box.small{width:clamp(158px,19dvh,176px);height:clamp(158px,19dvh,176px)}.char-glyph{font-size:clamp(9rem,16dvh,10.5rem);line-height:1;text-shadow:0 2px 0 rgba(255,255,255,.6)}.char-glyph.with-image{font-size:clamp(5.2rem,10dvh,6rem)}.char-image{height:clamp(104px,13dvh,132px);aspect-ratio:1;width:auto;-o-object-fit:contain;object-fit:contain;border-radius:var(--r-xs);border:1px solid var(--card-edge);box-shadow:var(--shadow-md);filter:sepia(.18) saturate(.92)}.jyutping{font-size:var(--fs-lg);font-weight:600;color:var(--theme);letter-spacing:3px;line-height:1.25}.hint{font-size:var(--fs-base);color:var(--ink-muted);font-weight:400;line-height:1.45}.hint:before{color:var(--ink-faint);margin-right:2px}.hint:not(.is-spoken):before{content:"例﹕"}.hint-written{display:inline-block;margin:0 5px}.hint-written:before{content:"書面語﹕";color:var(--ink-faint);margin-right:2px}.card-tip{font-size:var(--fs-xs);color:var(--ink-muted);letter-spacing:1px}.card-stack>.queue-info{position:absolute;top:16px;left:50%;transform:translate(-50%);z-index:2;margin:0;font-size:var(--fs-xs);line-height:1.35;white-space:nowrap;pointer-events:none}.queue-info .qi-theme{display:none}.queue-info .qi-undo{pointer-events:auto;position:relative;margin-left:8px;padding:0 2px;border:none;background:none;font:inherit;font-family:var(--round);font-weight:700;color:var(--vermilion);text-decoration:underline;text-underline-offset:4px;cursor:pointer}.queue-info .qi-undo:after{content:"";position:absolute;inset:-15px -10px}@media(max-width:360px){.queue-info .qi-state,.queue-info.has-undo .qi-pos{display:none}.queue-info.has-undo .qi-undo{margin-left:0}}.cards-screen .card-tip{display:inline-flex;align-items:center;gap:5px}.cards-screen .card-tip svg{flex-shrink:0}.cards-screen .flashcard.speaking .card-tip{color:var(--theme)}.btn-strokes{position:absolute;top:3px;left:12px;z-index:2;min-height:44px;display:inline-flex;align-items:center;gap:4px;border:none;background:none;font-family:var(--round);font-size:var(--fs-sm);font-weight:700;color:var(--ink-muted);cursor:pointer;padding:0 4px;text-decoration:underline;text-decoration-color:var(--hairline);text-underline-offset:5px}.btn-strokes:hover{color:var(--ink);text-decoration-color:var(--ink)}.seal{position:absolute;top:16px;right:16px;border:1.5px solid var(--vermilion);color:var(--vermilion);border-radius:var(--r-xs);padding:3px 7px;font-size:var(--fs-xs);font-weight:900;letter-spacing:2px;transform:rotate(-7deg);opacity:.88;box-shadow:0 0 0 1px #b23a2a1f inset;background:var(--danger-wash)}.card-nav{display:none;position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:1px solid var(--hairline);background:var(--surface-glass);color:var(--ink-muted);font-size:var(--fs-lg);cursor:pointer;align-items:center;justify-content:center;z-index:2;box-shadow:var(--shadow-md)}@media(min-width:640px){.card-nav{display:flex}}.card-nav:hover{color:var(--ink);border-color:var(--ink)}.card-nav.prev{left:8px}.card-nav.next{right:8px}.report-reading{display:flex;align-items:center;justify-content:center;min-height:44px;font-family:var(--round);font-size:var(--fs-xs);padding:0 10px}.report-reading[aria-disabled=true]{cursor:default;text-decoration:none}.report-reading[aria-disabled=true]:hover{color:var(--ink-muted)}.queue-info{margin-top:18px;text-align:center;font-size:var(--fs-sm);color:var(--ink-muted);letter-spacing:1px;flex-shrink:0}@media(max-width:380px){.flashcard{padding-left:18px;padding-right:18px}.char-box{width:208px;height:208px}.char-glyph{font-size:8.4rem}}.card-actions{position:sticky;bottom:calc(var(--tabbar-h) + 2px + env(safe-area-inset-bottom));z-index:3;margin-top:8px;padding:8px 0 6px;border-radius:var(--r-lg);background:var(--surface-glass);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:var(--shadow-up)}@media(max-height:840px){.cards-mode,.theme-bar,.search-box{margin-bottom:8px}.flashcard{gap:10px;padding:40px 20px 16px}.char-image{height:clamp(72px,11dvh,132px)}.char-box.small{width:clamp(120px,16dvh,176px);height:clamp(120px,16dvh,176px)}.char-glyph.with-image{font-size:clamp(4rem,9dvh,6rem)}.queue-info{margin-top:10px}}@media(max-height:720px){.flashcard{padding:36px 20px 12px}.card-tip{display:none}.cards-screen .card-tip{position:absolute;right:14px;bottom:12px}.cards-screen .card-tip .tip-text{display:none}}.card-hint{display:flex;align-items:flex-start;gap:10px;padding:11px 13px;border:1px solid var(--card-edge);border-left:3px solid var(--vermilion);border-radius:var(--r-md);background:var(--paper-card);font-size:var(--fs-sm);line-height:1.6;color:var(--ink-muted)}.card-hint .hint-full{flex:1}.card-hint .hint-brief{display:none;flex:1}.card-hint .hint-link{flex:1;padding:12px 0;margin:-12px 0;font:inherit;color:inherit;text-align:left;text-decoration:underline;text-decoration-color:var(--ink-muted);text-underline-offset:3px}@media(max-height:720px)and (max-width:699px),screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3)and (max-height:1040px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-width:1023px)and (max-height:520px){.card-hint{align-items:center;padding:2px 10px;font-size:var(--fs-xs);line-height:1.5}.card-hint .hint-full{display:none}.card-hint .hint-brief{display:block}.card-hint .hint-link{padding-top:6px;margin-top:-6px}.card-actions:has(.card-hint){gap:6px;margin-top:4px;padding-top:4px}}@media(max-height:650px)and (max-width:699px){.flashcard{min-height:0;gap:8px;padding:34px 20px 10px}.cards-screen:has(.card-hint) .char-image{height:56px}}.card-hint button{flex-shrink:0;border:none;background:none;color:var(--ink-muted);font-size:var(--fs-lg);line-height:1;padding:14px;margin:-14px -12px -14px 0;cursor:pointer}@supports selector(:has(a)){@media screen and (min-width:1024px),screen and (min-width:700px)and (max-aspect-ratio:5/3),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){.cards-screen>.theme-bar{align-self:start;flex-direction:column;overflow:visible;-webkit-mask-image:none;mask-image:none;margin:0;padding:0;border-bottom:none}.cards-screen>.cards-mode{grid-area:themes;align-self:start;margin:0;padding:0 0 0 12px;border-bottom:none}.cards-screen>.cards-mode+.theme-bar{margin-top:38px;padding-left:0}.cards-screen .theme-tab{display:flex;align-items:center;padding:10px 12px;border-radius:var(--r-md);text-align:left}.cards-screen .theme-tab:hover{background:var(--ink-wash)}.cards-screen .theme-tab .cnt{margin-left:auto;padding-left:8px}.cards-screen .theme-tab.active{background:color-mix(in srgb,var(--tab-color, var(--ink)) 9%,transparent)}.cards-screen .theme-tab.active:after{inset:9px auto 9px 0;width:3px;height:auto}.cards-screen>.search-box,.cards-screen>.search-box.open{display:block;grid-area:search;min-height:0;margin:0 0 14px;padding:0;border-bottom:none}.cards-screen .search-toggle,.cards-screen .search-box.open .search-toggle{display:none}.cards-screen .search-field{display:block}.cards-screen:has(>.search-box.open)>.theme-bar,.cards-screen:has(>.search-box.open)>.cards-mode{visibility:visible}.cards-screen .qi-theme{display:inline}.cards-screen .char-image{height:clamp(104px,16dvh,160px)}.cards-screen .char-box{width:clamp(220px,34dvh,300px);height:clamp(220px,34dvh,300px)}.cards-screen .char-glyph{font-size:clamp(9rem,22dvh,12.4rem)}.cards-screen .char-box.small{width:clamp(158px,24dvh,220px);height:clamp(158px,24dvh,220px)}.cards-screen .char-glyph.with-image{font-size:clamp(5.2rem,12.6dvh,7.2rem)}}@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3){.cards-screen{grid-template-columns:184px minmax(0,1fr);grid-template-rows:auto auto auto auto 1fr;grid-template-areas:"themes search" "themes card" "themes actions" "themes foot" "themes .";-moz-column-gap:28px;column-gap:28px}.cards-screen>.card-stack{min-height:min(640px,calc(100dvh - var(--topbar-h) - var(--main-pad-t) - var(--tab-gap) - var(--tabbar-h) - env(safe-area-inset-bottom,0px) - 231px))}.cards-screen>.card-actions{margin-top:6px;padding:8px 0 0;border-radius:0;box-shadow:none}}@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3)and (max-height:1040px){.cards-screen{--fit: calc( 100dvh - var(--topbar-h) - var(--main-pad-t) - var(--tabbar-h) - env(safe-area-inset-bottom, 0px) - var(--fit-rest, 425px) )}.cards-screen .char-image{height:clamp(72px,calc(var(--fit) * .42),160px)}.cards-screen .char-box.small{--box: clamp(120px, calc(var(--fit) * .58), 220px);width:var(--box);height:var(--box)}.cards-screen .char-glyph.with-image{font-size:calc(var(--box) * .52)}}@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3)and (max-height:840px){.cards-screen{--fit-rest: 376px}}@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3)and (max-height:640px){.cards-screen>.card-actions{position:static}}@media screen and (min-width:1024px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){.cards-screen{grid-template-columns:220px minmax(0,1fr) 240px;grid-template-rows:auto auto auto 1fr;grid-template-areas:"themes search ." "themes card actions" "themes foot ." "themes . .";-moz-column-gap:40px;column-gap:40px}.cards-screen>.card-stack{min-height:min(620px,calc(100dvh - var(--topbar-h) - var(--main-pad-t) - var(--main-pad-b) - 120px))}.cards-screen>.card-actions{align-self:start;top:calc(var(--topbar-h) + var(--main-pad-t));bottom:auto;margin-top:0;padding:0;border-radius:0;background:none;-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none}.cards-screen .btn-row{grid-template-columns:1fr}.cards-screen .btn-pair{grid-template-columns:1fr;gap:8px}}}@supports selector(:has(a)){@media screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-width:1023px)and (max-height:520px){.cards-screen{--card-h: calc( 100dvh - var(--topbar-h) - var(--main-pad-t) - var(--main-pad-b) - 6px );--box: clamp(132px, calc(var(--card-h) - 124px), 220px);grid-template-columns:148px minmax(0,1fr) 216px;grid-template-rows:auto auto auto minmax(0,1fr);grid-template-areas:"themes card search" "themes card actions" "themes card foot" "themes card .";-moz-column-gap:16px;column-gap:16px}.cards-screen:has(>.card-stack){flex:none;height:var(--card-h)}.cards-screen>.theme-bar{position:sticky;top:calc(var(--topbar-h) + var(--main-pad-t));height:var(--card-h);overflow-y:auto;scrollbar-width:none}.cards-screen>.cards-mode+.theme-bar{height:calc(var(--card-h) - 38px)}.cards-screen .card-nav{display:none}.cards-screen .theme-tab{padding:8px;font-size:var(--fs-sm)}.cards-screen>.search-box,.cards-screen>.search-box.open{margin-bottom:8px}.cards-screen>.card-stack{min-height:0}.cards-screen .flashcard{min-height:0;padding:34px 14px 10px;gap:6px}.cards-screen .flashcard:not(.no-image){display:grid;grid-template-columns:auto auto;grid-template-rows:auto auto auto;justify-content:center;align-content:center;justify-items:center;-moz-column-gap:14px;column-gap:14px}.cards-screen .flashcard:not(.no-image) .char-image{grid-column:1;grid-row:1 / span 3;align-self:center;height:clamp(84px,calc(var(--box) * .6),120px)}.cards-screen .flashcard:not(.no-image)>:not(.char-image):not(.seal):not(.card-tip){grid-column:2}.cards-screen .char-box,.cards-screen .char-box.small{width:var(--box);height:var(--box)}.cards-screen .char-glyph,.cards-screen .char-glyph.with-image{font-size:calc(var(--box) * .66)}.cards-screen .qi-theme{display:none}.cards-screen .btn-row{grid-template-columns:1fr 1fr;gap:8px}.cards-screen .btn-row .btn{--btn-x: 4px;font-size:var(--fs-md);letter-spacing:0;white-space:nowrap}.cards-screen .btn-pair .btn-lg{min-height:48px}}}@media(orientation:landscape)and (max-height:520px)and (max-width:779px),(orientation:landscape)and (max-height:520px)and (max-width:1023px)and (max-aspect-ratio:7/4)and (min-aspect-ratio:5/3){.card-actions{position:static}}.progress-owner{text-align:center;font-size:var(--fs-sm);color:var(--ink-muted);letter-spacing:2px;margin-bottom:12px}.progress-owner b{color:var(--ink);font-weight:900}.progress-hero{padding:26px 22px 22px;text-align:center;margin-bottom:16px;border-top:3px solid var(--vermilion)}.progress-hero .big{font-size:56px;font-weight:900;line-height:1.1}.progress-hero .big .of{font-size:var(--fs-xl);color:var(--ink-muted);font-weight:400}.progress-hero .label{font-size:var(--fs-sm);color:var(--ink-muted);letter-spacing:3px;margin-top:4px}.bar-track{height:8px;border-radius:var(--r-xs);background:var(--track);overflow:hidden;margin-top:18px}.bar-fill{height:100%;background:var(--vermilion);border-radius:var(--r-xs);transition:width .6s ease}.progress-note{margin-top:14px;font-size:var(--fs-sm);color:var(--ink-muted)}.progress-hero .hero-actions{margin-top:18px}.card-section{padding:20px 22px;margin-bottom:16px}.card-section>h3{font-size:var(--fs-md);font-weight:900;letter-spacing:2px;margin-bottom:14px;display:flex;align-items:center;justify-content:space-between;gap:10px}.week-chip{flex-shrink:0;border:1px solid var(--hairline);border-radius:var(--r-pill);padding:3px 10px;font-size:var(--fs-xs);font-weight:700;color:var(--ink-muted);letter-spacing:0}.char-chips{display:flex;flex-wrap:wrap;gap:8px}.char-chip{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--card-edge);border-radius:var(--r-xs);background:var(--paper);color:var(--ink);cursor:pointer;min-width:44px;min-height:44px;justify-content:center;padding:5px 9px}.char-chip:hover{border-color:var(--ink-muted)}.char-chip .cc{font-size:var(--fs-xl);line-height:1}.char-chip .cd{font-size:var(--fs-2xs);color:var(--ink-muted)}.section-note{font-size:var(--fs-sm);color:var(--ink-muted)}.tp-row{margin-bottom:16px}.tp-row:last-child{margin-bottom:0}.tp-head{display:flex;justify-content:space-between;font-size:var(--fs-sm);margin-bottom:5px;gap:8px}.tp-head .dot{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:7px;transform:rotate(45deg) translateY(-1px)}.tp-head .r{color:var(--ink-muted);font-size:var(--fs-xs);flex-shrink:0}.tp-row .bar-track{height:5px;margin-top:0}.seg-bar{display:flex;gap:3px}.seg-bar .seg{flex:1;height:10px;border-radius:var(--r-xs);transition:background var(--dur-base) ease}.tp-head .tp-emoji{margin-right:5px}.milestones{display:flex;justify-content:space-between;margin-top:14px;padding:0 2px}.milestone{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:var(--fs-2xs);font-weight:600;color:var(--ink-faint)}.milestone .m-star{font-size:var(--fs-2xl);line-height:1.2;color:var(--hairline);transition:color var(--dur-base) ease,transform var(--dur-base) ease}.milestone.lit{color:var(--amber-ink)}.milestone.lit .m-star{color:var(--gold);text-shadow:0 2px 8px color-mix(in srgb,var(--gold) 40%,transparent);transform:scale(1.12)}.tp-chars{margin-top:9px}.tp-chars>.lbl{display:block;font-size:var(--fs-2xs);color:var(--ink-muted);letter-spacing:2px;margin-bottom:6px}.tp-lists{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:9px}.tp-lists>.tp-more[open],.tp-lists>.tp-more:only-child{grid-column:1 / -1}.tp-more{border:1px dashed var(--hairline);border-radius:var(--r-sm);padding:0 11px}.tp-more[open]{padding-bottom:11px}.tp-more>summary{display:flex;align-items:center;min-height:44px;cursor:pointer;font-size:var(--fs-sm);font-weight:700;color:var(--ink-muted);list-style:none}.tp-more>summary::-webkit-details-marker{display:none}.tp-more>summary:before{content:"＋ ";color:var(--ink-faint)}.tp-more[open]>summary:before{content:"－ "}.page-notes{margin-top:18px;text-align:center;font-size:var(--fs-sm);color:var(--ink-muted);letter-spacing:1px}.page-notes>p+p{margin-top:10px}.confirm-inline{display:grid;grid-template-columns:1fr 1fr;gap:10px}@supports selector(:has(a)){@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3){.progress-screen>.card-section+.card-section{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 28px;align-items:start}.progress-screen>.card-section+.card-section>h3{grid-column:1 / -1;margin-bottom:0}.progress-screen .tp-row{margin-bottom:0}}@media screen and (min-width:1024px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){.progress-screen{display:grid;grid-template-columns:380px minmax(0,1fr);grid-template-rows:auto auto auto auto 1fr;-moz-column-gap:32px;column-gap:32px;align-items:start}.progress-screen>.progress-owner{grid-column:1 / -1;grid-row:1}.progress-screen>.progress-hero{grid-column:1;grid-row:2}.progress-screen>.card-section{grid-column:1;grid-row:3}.progress-screen>.card-section+.card-section{grid-column:2;grid-row:2 / -1;margin-bottom:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 28px;align-items:start}.progress-screen>.card-section+.card-section>h3{grid-column:1 / -1;margin-bottom:0}.progress-screen .tp-row{margin-bottom:0}.progress-screen>.page-notes{grid-column:1;grid-row:4;margin-top:0}}}.game-screen[hidden]{display:none}.game-screen{flex:1;min-height:0;display:flex;flex-direction:column}.game-head{padding:18px 20px;text-align:center;margin-bottom:16px;border-top:3px solid var(--vermilion)}.game-head h2{font-size:var(--fs-xl);font-weight:900;letter-spacing:3px}.game-head p{margin-top:6px;font-size:var(--fs-sm);color:var(--ink-muted)}.game-board{padding:10px;margin-bottom:16px}.game-target{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:10px;border:none;background:none;color:var(--ink);cursor:pointer;padding:2px 6px;border-radius:var(--r-md);transition:transform var(--dur-press) ease}.game-target:active{transform:scale(.94)}.game-target-label{font-family:var(--round);font-size:var(--fs-xs);font-weight:700;letter-spacing:3px;color:var(--ink-muted)}.game-target .gc{font-size:clamp(2rem,8vw,2.8rem);line-height:1;width:1.6em;height:1.6em;display:flex;align-items:center;justify-content:center;background-image:var(--grid-bg);background-size:100% 100%;border-radius:var(--r-xs)}.game-grid{display:grid;grid-template-columns:repeat(var(--gcols, 3),1fr);grid-template-rows:repeat(var(--grows, 4),1fr);gap:6px;aspect-ratio:var(--gcols, 3) / var(--grows, 4);width:min(100%,max(150px,calc((100dvh - var(--topbar-h) - var(--main-pad-t) - var(--tab-gap) - var(--tabbar-h) - env(safe-area-inset-bottom,0px) - 341px) * var(--gcols, 3) / var(--grows, 4))));height:auto;margin:0 auto}.game-cell{aspect-ratio:1;border:1px solid var(--card-edge);border-radius:50%;background:var(--paper-card);color:var(--ink);cursor:pointer;display:flex;align-items:center;justify-content:center;position:relative;min-width:0;box-shadow:var(--shadow-sm);transition:transform var(--dur-press) ease,background var(--dur-press) ease}.game-cell{container-type:size}.game-cell .gch{font-size:min(2.2rem,52cqmin);line-height:1}.game-cell:hover:not(:disabled){border-color:var(--ink-muted)}.game-cell:active:not(:disabled){transform:scale(.88)}.game-cell.picked{cursor:default;font-weight:700;animation:cell-pop var(--dur-base) cubic-bezier(.34,1.56,.64,1)}@keyframes cell-pop{0%{transform:scale(.86)}60%{transform:scale(1.07)}to{transform:scale(1)}}.game-cell.wrong{background:#b23a2a29;border-color:var(--vermilion);border-width:2px;color:var(--vermilion);animation:cell-shake var(--dur-slow) ease}@keyframes cell-shake{0%,to{transform:translate(0) scale(.96)}20%{transform:translate(-6px) scale(.96)}45%{transform:translate(5px) scale(.96)}70%{transform:translate(-3px) scale(.96)}}.game-cell:disabled{cursor:default}.game-cell .tick,.game-cell .cross{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;background:var(--paper-card);border:1px solid currentColor;display:flex;align-items:center;justify-content:center;animation:mark-pop var(--dur-base) cubic-bezier(.34,1.56,.64,1)}.game-cell .cross{background:var(--vermilion);border-color:var(--vermilion);color:var(--paper-card)}.game-status{text-align:center;min-height:86px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px}.game-status p{font-family:var(--round);font-size:var(--fs-base);font-weight:700;color:var(--ink-muted);letter-spacing:1px}.game-status p.done{color:var(--jade)}.game-status p.miss{color:var(--vermilion)}.game-actions{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:14px}.game-skip{min-height:44px;color:var(--ink-muted)}.game-skip svg{color:inherit}@keyframes mark-pop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}.game-status .btn-primary{min-width:180px}@media(max-height:720px){#root:has(.game-screen:not([hidden])){height:100dvh}.app-main:has(.game-screen:not([hidden])){min-height:0}.game-head{padding:12px 16px;margin-bottom:10px}.game-head p{display:none}.game-board{flex:1;min-height:0;margin-bottom:10px;display:flex;flex-direction:column;align-items:center}.game-grid{flex:1;min-height:0;height:auto;width:auto;max-width:100%;margin:0}.game-status{min-height:0;flex-shrink:0}.game-target .gc{font-size:clamp(1.4rem,6vh,2.2rem)}.game-target{margin-bottom:6px}}@media(max-height:720px)and (min-width:430px){.game-screen{display:grid;grid-template-columns:1fr 160px;grid-template-rows:auto 1fr;grid-template-areas:"board target" "board status";gap:10px;padding:6px 0}.game-head{display:none}.game-board{grid-area:board;margin:0;min-height:0}.game-target{grid-area:target;align-self:end;margin-bottom:0}.game-status{grid-area:status;align-self:start;min-height:0}.game-actions{flex-direction:column;gap:10px;width:100%}.game-status .btn-primary,.game-skip{min-width:0;width:100%;padding-left:12px;padding-right:12px}}@media(max-height:500px)and (min-width:430px){.game-grid{grid-template-columns:repeat(var(--grows, 4),1fr);grid-template-rows:repeat(var(--gcols, 3),1fr);aspect-ratio:var(--grows, 4) / var(--gcols, 3)}}@media(max-height:560px){.game-head{display:none}}@media(max-height:480px){.game-target .gc{font-size:clamp(1.2rem,5vh,1.8rem)}}@supports selector(:has(a)){@media screen and (min-width:700px)and (max-width:1023px)and (max-aspect-ratio:5/3){.game-cell .gch{font-size:46cqmin}}@media screen and (min-width:1024px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){.game-screen{display:grid;grid-template-columns:auto 300px;grid-template-rows:1fr auto auto auto 1fr;grid-template-areas:"board ." "board head" "board target" "board status" "board .";justify-content:center;-moz-column-gap:48px;column-gap:48px;row-gap:0;padding:0}.game-head{grid-area:head;margin-bottom:16px}.game-target{grid-area:target;align-self:auto;margin-bottom:14px}.game-status{grid-area:status;align-self:start}.game-board{grid-area:board;align-self:center;display:block;flex:none;margin:0;padding:14px}.game-grid{flex:none;width:max(150px,min(420px,calc((100dvh - var(--topbar-h) - var(--main-pad-t) - var(--main-pad-b) - 48px) * var(--gcols, 3) / var(--grows, 4))));max-width:none;height:auto;margin:0}.game-cell .gch{font-size:min(3.4rem,46cqmin)}.game-actions{flex-direction:column;gap:10px;width:100%}.game-status .btn-primary,.game-skip{width:100%;min-width:0}}@media screen and (min-width:1024px)and (max-height:500px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:500px){.game-grid{width:max(150px,min(420px,calc((100dvh - var(--topbar-h) - var(--main-pad-t) - var(--main-pad-b) - 48px) * var(--grows, 4) / var(--gcols, 3))))}}@media screen and (min-width:1024px)and (min-height:561px){.game-head,.game-head p{display:block}}}.select-screen{padding-top:54px}.select-screen h2{font-size:var(--fs-2xl);font-weight:900;letter-spacing:2px;text-align:center}.select-screen .sub{text-align:center;color:var(--ink-muted);font-size:var(--fs-sm);margin-top:8px}.child-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:30px}.child-card{padding:24px 16px 18px;text-align:center;cursor:pointer;transition:transform var(--dur-press) ease;position:relative;font-family:var(--round);color:var(--ink)}.child-card.deal-in{animation:child-deal var(--dur-slow) cubic-bezier(.34,1.4,.64,1) backwards}@keyframes child-deal{0%{opacity:0;transform:translateY(16px) scale(.9)}}.child-card:active:not(:disabled){transform:scale(.94)}.child-card:hover{transform:translateY(-2px)}.child-card:disabled{opacity:.55;cursor:wait}.select-pending{margin-top:18px;text-align:center}.child-card .avatar{width:52px;height:52px;border-radius:50%;margin:0 auto 10px;display:flex;align-items:center;justify-content:center;font-size:var(--fs-2xl);font-weight:900;border:1.5px solid}.child-card .avatar .avatar-emoji{font-size:var(--fs-3xl);line-height:1;font-weight:400}.child-card .cname{font-size:var(--fs-xl);font-weight:900;letter-spacing:2px}.child-card.add{border:1.5px dashed var(--hairline);background:transparent;box-shadow:none;color:var(--ink-muted);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:138px;font-size:var(--fs-md);font-weight:700}.child-card.add .plus{font-size:var(--fs-2xl);font-weight:400}.login-screen{padding-top:72px}.login-screen .logo{position:relative}.login-screen .logo:before,.login-screen .logo:after{content:"★";position:absolute;top:-6px;font-size:var(--fs-xs);color:var(--gold);animation:star-twinkle 2.6s ease-in-out infinite}.login-screen .logo:before{left:-18px}.login-screen .logo:after{right:-18px;animation-delay:1.3s}@keyframes star-twinkle{0%,to{opacity:.35;transform:scale(.85)}50%{opacity:1;transform:scale(1.1)}}.login-screen .logo{text-align:center;font-size:var(--fs-3xl);font-weight:900;letter-spacing:3px;display:flex;align-items:center;justify-content:center;gap:10px;width:-moz-fit-content;width:fit-content;margin-inline:auto}.login-screen .sub{text-align:center;color:var(--ink-muted);font-size:var(--fs-sm);margin:12px 0 34px;letter-spacing:2px}.login-form{padding:28px 24px}.field{margin-bottom:22px}.field label{display:block;font-size:var(--fs-sm);color:var(--ink-muted);letter-spacing:2px;margin-bottom:6px}.field .note{margin-top:6px;font-size:var(--fs-xs);color:var(--ink-muted)}.login-form .btn{margin-top:8px}.login-alt{font-family:var(--round);text-align:center;margin-top:20px;font-size:var(--fs-sm);color:var(--ink-muted)}.login-alt .link{margin:0 3px}.login-sent{font-size:var(--fs-md);line-height:1.8;color:var(--ink);margin:0 0 18px}.pw-wrap{position:relative;display:block}.pw-wrap input{padding-right:36px}.pw-eye{position:absolute;right:0;top:50%;transform:translateY(-50%);border:none;background:none;padding:14px;cursor:pointer;color:var(--ink-muted);display:flex;align-items:center}.pw-eye:hover{color:var(--ink)}.drawer-confirm .pw-wrap{margin-top:8px}.login-facts{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:14px 0 22px;padding:0;list-style:none}.login-facts li{font-family:var(--round);font-size:var(--fs-xs);color:var(--ink-muted);background:var(--paper-card);border:1px solid var(--card-edge);border-radius:var(--r-pill);padding:5px 12px}.login-more{margin-top:18px;text-align:center}.login-more>summary{display:inline-flex;align-items:center;min-height:44px;padding:0 10px;cursor:pointer;list-style:none;font-size:var(--fs-sm);color:var(--ink-muted);text-decoration:underline;text-decoration-color:var(--hairline);text-underline-offset:4px}.login-more>summary::-webkit-details-marker{display:none}.login-claims{text-align:left;margin:4px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px;font-size:var(--fs-xs);line-height:1.7;color:var(--ink-muted)}.login-claims li:before{content:"・";color:var(--ink-faint)}.login-google{margin-top:14px;display:flex;flex-direction:column;align-items:center;gap:7px}.login-google .note{font-size:var(--fs-xs);color:var(--ink-muted);margin:0}.login-try{margin-top:22px;display:flex;flex-direction:column;align-items:center;gap:7px}.login-try .note{font-size:var(--fs-xs);color:var(--ink-muted);margin:0}.login-screen.landing{padding-top:36px}.landing-fan{position:relative;height:296px;margin:2px 0 18px}.landing-fan .flashcard{position:absolute;top:0;left:50%;width:204px;flex:none;min-height:0;gap:8px;padding:16px 18px 12px;animation:none;transform:translate(-50%) translate(var(--fan-x, 0px)) rotate(var(--fan-r, 0deg)) scale(var(--fan-s, 1));transition:transform var(--dur-base) ease,box-shadow var(--dur-base) ease}.landing-fan .flashcard:active{transform:translate(-50%) translate(var(--fan-x, 0px)) rotate(var(--fan-r, 0deg)) scale(calc(var(--fan-s, 1) * .97))}.fan-card.fan-0{--fan-x: 0px;--fan-r: -1.5deg;z-index:3}.fan-card.fan-1{--fan-x: 72px;--fan-r: 8deg;--fan-s: .8;z-index:2}.fan-card.fan-2{--fan-x: -72px;--fan-r: -8deg;--fan-s: .8;z-index:1}@media(max-width:340px){.fan-card.fan-1{--fan-x: 58px}.fan-card.fan-2{--fan-x: -58px}}.fan-card:not(.fan-0){filter:saturate(.8);box-shadow:var(--shadow-xs),var(--shadow-stack)}.fan-card:not(.fan-0) .jyutping,.fan-card:not(.fan-0) .hint,.fan-card:not(.fan-0) .card-tip{visibility:hidden}.fan-card.fan-0:hover,.fan-card.fan-0.speaking{--fan-r: 0deg;--fan-s: 1.02}.landing-fan .char-image{height:74px}.landing-fan .char-box.small{width:108px;height:108px}.landing-fan .char-glyph.with-image{font-size:3.8rem}.landing-fan .card-tip{display:inline-flex;align-items:center;gap:4px}.landing-steps{display:flex;justify-content:center;gap:8px;margin:0 0 12px;padding:0;list-style:none}.landing-steps li{flex:1;max-width:116px;display:flex;flex-direction:column;align-items:center;gap:7px;font-family:var(--round);font-size:var(--fs-2xs);font-weight:700;line-height:1.5;text-align:center;color:var(--ink-muted)}.landing-steps li>span{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--vermilion);color:var(--paper-card);font-size:var(--fs-xs);font-weight:900}.landing-signin{margin-top:16px;text-align:center;font-size:var(--fs-xs);color:var(--ink-muted)}.landing-signin a{display:inline-block;padding:14px 10px;margin:-14px 0}.landing-themes{margin-top:26px}.landing-themes h2{font-family:var(--round);font-size:var(--fs-xs);font-weight:700;letter-spacing:1px;text-align:center;color:var(--ink-muted);margin-bottom:10px}.landing-themes ul{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;padding:0;list-style:none}.landing-themes a{display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 4px 8px;border:1px solid var(--card-edge);border-top:3px solid var(--theme);border-radius:var(--r-md);background:var(--paper-card);text-decoration:none;font-family:var(--round)}.landing-themes img{width:48px;height:48px;-o-object-fit:contain;object-fit:contain;filter:sepia(.18) saturate(.92)}.landing-theme-name{font-size:var(--fs-sm);font-weight:700;color:var(--ink)}.landing-theme-count{font-size:var(--fs-2xs);color:var(--ink-faint)}@media(min-width:900px){#root:has(.landing){max-width:940px}.login-screen.landing{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);-moz-column-gap:48px;column-gap:48px;align-items:start;padding-top:72px}.login-screen.landing .logo{justify-content:flex-start;margin-inline:0;font-size:34px}.login-screen.landing .sub{text-align:left;font-size:var(--fs-md);margin:14px 0 30px}.login-screen.landing .landing-steps{justify-content:flex-start;margin-bottom:26px}.login-screen.landing .landing-steps li{align-items:flex-start;text-align:left;max-width:128px}.login-screen.landing .login-try{align-items:flex-start;margin-top:0}.login-screen.landing .login-try .btn{max-width:300px}.login-screen.landing .landing-signin{text-align:left}.login-screen.landing .login-facts{justify-content:flex-start}.login-screen.landing .landing-fan{grid-column:2;grid-row:1 / span 6;align-self:center;height:372px;margin:0}.login-screen.landing .landing-fan .flashcard{width:236px;padding:20px 22px 16px}.login-screen.landing .landing-fan .char-image{height:92px}.login-screen.landing .landing-fan .char-box.small{width:136px;height:136px}.login-screen.landing .landing-fan .char-glyph.with-image{font-size:4.6rem}.login-screen.landing .fan-1{--fan-x: 92px}.login-screen.landing .fan-2{--fan-x: -92px}.login-screen.landing .landing-themes,.login-screen.landing .login-legal{grid-column:1 / -1}.login-screen.landing .landing-themes{margin-top:44px}.login-screen.landing .landing-themes ul{grid-template-columns:repeat(9,minmax(0,1fr))}}.login-legal{font-family:var(--round);margin-top:26px;text-align:center;font-size:var(--fs-2xs);color:var(--ink-faint);line-height:1.7}.login-legal a{display:inline-block;padding:14px 6px;margin:-14px 0}.hans-page{--hans: "Noto Serif SC", "Songti SC", "Noto Serif CJK SC", "SimSun", serif;--site-serif: var(--serif);--site-round: var(--round);font-family:var(--hans)}.hans-page>*{--serif: var(--hans);--round: var(--hans)}.hans-page [lang=zh-Hant-HK]{--serif: var(--site-serif);--round: var(--site-round);font-family:var(--serif)}.hans-site{display:contents}.parent-drawer{width:min(380px,92vw);background:var(--paper);color:var(--ink);box-shadow:var(--shadow-drawer)}.parent-drawer:focus{outline:none}[data-slot=sheet-overlay]{background:var(--scrim)}.drawer-title{font-size:var(--fs-lg);font-weight:900;letter-spacing:3px;color:var(--ink)}.drawer-section{margin-top:26px}.drawer-section>.sec-title{font-size:var(--fs-xs);color:var(--ink-muted);letter-spacing:3px;margin-bottom:8px;font-weight:600}details.drawer-section{margin-top:14px}details.drawer-section:not([open])+details.drawer-section{margin-top:0}details.drawer-section>.sec-title{display:flex;align-items:center;gap:10px;min-height:44px;margin-bottom:0;cursor:pointer;list-style:none}details.drawer-section>.sec-title::-webkit-details-marker{display:none}details.drawer-section>.sec-title:after{content:"＋";content:"＋" / "";margin-left:auto;letter-spacing:0;color:var(--ink-faint)}details.drawer-section[open]>.sec-title:after{content:"－";content:"－" / ""}details.drawer-section>.sec-title:hover{color:var(--ink)}details.drawer-section>.sec-title:focus-visible{outline:2px solid var(--vermilion);outline-offset:3px}.sec-hint{font-size:var(--fs-2xs);font-weight:400;letter-spacing:0}details.drawer-section[open] .sec-hint{display:none}.parent-drawer>button{top:10px;right:10px;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;border-radius:var(--r-pill);opacity:1;color:var(--ink-muted)}.parent-drawer>button svg{width:20px;height:20px}.parent-drawer>button:hover{color:var(--ink);background:var(--ink-wash)}.row-list{background:var(--paper-card);border:1px solid var(--card-edge);border-radius:var(--r-sm);overflow:hidden}.row-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;min-height:52px;font-size:var(--fs-base);font-weight:600;border-bottom:1px solid var(--card-edge);cursor:pointer;width:100%;background:none;border-left:none;border-right:none;border-top:none;color:var(--ink);text-align:left}.row-item:last-child{border-bottom:none}.row-item:hover:not(.static):not(.disabled):not(:disabled){background:var(--ink-wash)}.row-item:active:not(.static):not(.disabled):not(:disabled){background:var(--ink-wash-press)}.row-item .r{margin-left:auto;color:var(--ink-muted);font-size:var(--fs-sm);font-weight:400;white-space:nowrap}.row-item.go:after{content:"›" / "";margin-left:8px;font-size:var(--fs-xl);line-height:1;color:var(--ink-faint)}.row-item .sub{display:block;font-size:var(--fs-2xs);font-weight:400;color:var(--ink-muted);margin-top:2px}.row-item.danger{color:var(--vermilion)}.row-item.disabled{color:var(--ink-faint);cursor:not-allowed}.row-item.static{cursor:default}.drawer-confirm{padding:12px 16px;background:var(--danger-wash);font-size:var(--fs-sm);color:var(--vermilion-deep);line-height:1.7;border-bottom:1px solid var(--card-edge)}.drawer-confirm:last-child{border-bottom:none}.drawer-confirm:focus{outline:none}.drawer-confirm.neutral{background:var(--ink-wash);color:var(--ink)}.drawer-confirm .confirm-inline{margin-top:10px}.drawer-confirm .feedback-text{display:block;margin-top:8px;padding:8px 10px;border:1px solid var(--hairline);border-radius:8px;font-family:inherit;line-height:1.6;resize:vertical}.drawer-confirm .feedback-reply{display:block;margin-top:8px;font-size:var(--fs-xs);color:var(--ink-muted)}.drawer-confirm .feedback-text:focus,.drawer-confirm .feedback-text:focus-visible{border-color:var(--ink);box-shadow:none}.code-field{margin-top:8px;display:flex;flex-direction:column;gap:6px}.code-field .code-sent{color:var(--ink-muted)}.gate-answer{margin-top:8px;display:flex;align-items:center;gap:10px}.gate-sum{font-size:var(--fs-lg);font-weight:700;letter-spacing:2px;color:var(--ink);white-space:nowrap}.gate-answer .input-line{font-size:var(--fs-lg);font-weight:700;letter-spacing:2px}.switch{position:relative;width:44px;min-width:44px;height:25px;flex-shrink:0;cursor:pointer}.switch input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.switch input:focus-visible{outline:none}.switch input:focus-visible~.track{outline:2px solid var(--vermilion);outline-offset:2px}.switch .track{position:absolute;inset:0;border-radius:var(--r-pill);background:var(--hairline);transition:background var(--dur-fast) ease}.switch .knob{position:absolute;top:2.5px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--paper-card);border:1px solid var(--hairline);box-shadow:0 1px 3px #2c272133;transition:left var(--dur-fast) ease}.switch input:checked~.track{background:var(--vermilion)}.switch input:checked~.knob{left:21px}.account-email{word-break:break-all}.legal-page{max-width:100%;display:flex;flex-direction:column;gap:22px;padding-bottom:40px}.legal-page>.btn{align-self:flex-start}.legal-page h1{font-size:var(--fs-2xl);font-weight:900;letter-spacing:2px;color:var(--ink);margin:0}.legal-lede{margin:-10px 0 0;font-size:var(--fs-md);line-height:1.85;color:var(--ink-muted)}.legal-page .legal-updated{margin-top:-14px;font-size:var(--fs-xs)}.legal-page section{display:flex;flex-direction:column;gap:9px}.legal-page h2{font-family:var(--round);font-size:var(--fs-md);font-weight:700;letter-spacing:1px;color:var(--ink);margin:0;padding-bottom:7px;border-bottom:1px solid var(--hairline)}.legal-page p{margin:0;font-size:var(--fs-md);line-height:1.85;color:var(--ink-muted)}.legal-page ul{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:8px}.legal-page li{font-size:var(--fs-md);line-height:1.8;color:var(--ink-muted)}.legal-page b{color:var(--ink);font-weight:700}.legal-page a:not([class]){color:var(--vermilion);text-decoration:underline;text-underline-offset:3px}.legal-alt{margin-top:6px;text-align:center}.charlist-themes,.charlist-chars{list-style:none;padding-left:0!important}.charlist-themes a{display:grid;grid-template-columns:1fr auto;gap:2px 10px;padding:13px 15px;border:1px solid var(--card-edge);border-left:4px solid var(--theme);border-radius:var(--r-md);background:var(--paper-card);text-decoration:none}.charlist-theme-name{font-size:var(--fs-lg);font-weight:700;color:var(--ink)}.charlist-theme-count{font-size:var(--fs-xs);color:var(--ink-faint);align-self:center}.charlist-theme-preview{grid-column:1 / -1;font-size:var(--fs-2xl);letter-spacing:2px;color:var(--ink-muted)}.legal-page .charlist-chars{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}.charlist-chars button{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 4px 9px;border:1px solid var(--card-edge);border-radius:var(--r-md);background:var(--paper-card);font-family:inherit;cursor:pointer}.charlist-chars button:active{transform:translateY(1px)}.charlist-char{font-size:44px;line-height:1.15;color:var(--ink)}.charlist-jyut{font-size:var(--fs-sm);font-weight:600;letter-spacing:1px;color:var(--theme)}.charlist-hint{font-size:var(--fs-xs);color:var(--ink-muted)}.charlist-cta{padding:16px;border-radius:var(--r-lg);background:var(--amber-paper);border:1px solid var(--amber-edge)}.legal-page .charlist-cta p{color:var(--amber-ink)}.legal-page .charlist-note{font-size:var(--fs-xs);text-align:center}.charlist-others{display:flex;flex-wrap:wrap;gap:6px 16px}.legal-page section>.btn{align-self:flex-start}.print-preview{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.print-preview-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 4px 22px;border:1px dashed #bbb;border-radius:var(--r-sm);background:#fff}.print-preview-card .han-card{width:64px;height:64px;display:flex;align-items:center;justify-content:center;background-image:var(--grid-bg);background-size:100% 100%;font-size:50px;line-height:1;color:#000}.print-preview-jyut{font-size:var(--fs-xs);letter-spacing:1px;color:#444}.print-preview-hint{font-size:var(--fs-2xs);color:#666}.print-preview-qr{position:absolute;right:6px;bottom:5px;color:#000}.admin-note{font-size:var(--fs-sm);line-height:1.45;color:var(--ink-muted)}.admin-foot{margin-top:12px;font-size:var(--fs-2xs);line-height:1.35;color:var(--ink-muted)}.admin-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}@media(min-width:640px){.admin-stats{grid-template-columns:repeat(3,minmax(0,1fr))}}.admin-stat{padding:12px 16px;border:1px solid var(--hairline);border-radius:var(--r-xl);background:var(--paper)}.admin-stat .v{font-size:var(--fs-2xl);line-height:32px;font-weight:900;color:var(--ink)}.admin-stat .l{margin-top:4px;font-size:var(--fs-2xs);line-height:1.35;color:var(--ink-muted)}.admin-table-wrap{overflow-x:auto}.admin-table{width:100%;text-align:left;font-size:var(--fs-sm);line-height:1.45}.admin-table th,.admin-table td{padding:8px 12px 8px 0}.admin-table th:last-child,.admin-table td:last-child{padding-right:0}.admin-table th{font-size:var(--fs-2xs);font-weight:700;color:var(--ink-muted);white-space:nowrap}.admin-table tr{border-bottom:1px solid var(--hairline)}.admin-table tbody tr:last-child{border-bottom:none}.admin-table .num{text-align:right}.admin-table .nowrap{white-space:nowrap}.admin-table td.admin-empty{padding:24px 0;text-align:center;color:var(--ink-muted)}.admin-feedback tr.is-handled{color:var(--ink-faint)}.admin-feedback td{vertical-align:top}.admin-feedback-body{min-width:220px;white-space:pre-wrap;overflow-wrap:anywhere}.admin-feedback-body p{color:var(--ink)}.admin-feedback tr.is-handled .admin-feedback-body p{color:inherit}.admin-feedback-body .k{margin-right:6px;font-size:var(--fs-2xs);color:var(--ink-muted)}.admin-tag{margin-left:4px;font-size:var(--fs-2xs);color:var(--ink-muted)}@supports selector(:has(a)){@media screen and (min-width:1024px),screen and (min-width:780px)and (min-aspect-ratio:7/4)and (max-height:520px){.admin-main .admin-stats{grid-template-columns:repeat(5,minmax(0,1fr))}}}.print-screen{position:fixed;inset:0;z-index:60;overflow:auto;background:#fff;padding:0 0 40px}.print-bar{position:sticky;top:0;z-index:1;display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--hairline);background:var(--paper);font-size:var(--fs-xs);color:var(--ink-muted)}.print-bar-actions{display:flex;gap:8px;align-items:center;flex-shrink:0;white-space:nowrap}.print-note,.print-empty{margin:14px auto;max-width:190mm;padding:0 6mm;font-size:var(--fs-xs);line-height:1.8;color:var(--ink-faint)}.print-page{width:190mm;margin:0 auto 10mm}@media screen{.print-page{zoom:var(--print-zoom, 1)}}.print-cards{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:80mm;gap:4mm}.print-foot{margin-top:3mm;height:12mm;display:flex;align-items:center;justify-content:space-between;gap:4mm;font-size:3mm;line-height:1.5;color:#555}.print-foot b{color:#000}.print-foot-qr{flex-shrink:0;width:12mm;height:12mm}.print-foot-qr svg{width:100%;height:100%;display:block}.print-card{position:relative;border:1px dashed #bbb;border-radius:2mm;padding:3mm;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2mm;background:#fff;color:#000}.print-grid{width:42mm;height:42mm;background-image:var(--grid-bg);background-size:100% 100%;display:flex;align-items:center;justify-content:center}.print-grid .han-card{font-size:34mm;line-height:1;color:#000}.print-meta{display:flex;flex-direction:column;align-items:center;gap:1mm;text-align:center}.print-jyut{font-family:var(--mono, ui-monospace, Menlo, monospace);font-size:4mm;letter-spacing:.5mm;color:#444}.print-hint{font-size:3.4mm;color:#666}.print-qr{position:absolute;right:3mm;bottom:3mm;width:16mm;height:16mm}.print-qr svg{width:100%;height:100%;display:block}@media print{body.printing-cards{overflow:visible!important}body.printing-cards>*:not(#root),body.printing-cards #root>*:not(.print-screen){display:none!important}body.printing-cards:before{display:none!important}body.printing-cards #root{max-width:none;width:auto;min-height:0;margin:0;display:block;background:none;border:0}.print-bar,.print-note,.print-empty{display:none!important}.print-screen{position:static;overflow:visible;padding:0}.print-page{width:auto;margin:0;-moz-column-break-after:page;break-after:page}.print-page:last-child{-moz-column-break-after:auto;break-after:auto}.print-card{-moz-column-break-inside:avoid;break-inside:avoid}.print-grid{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.hover\:opacity-100:hover{opacity:1}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: var(--vermilion)}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--card-edge)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}@media(min-width:640px){.sm\:max-w-sm{max-width:24rem}}
