:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#172033;background:#eef3fb;--blue:#2458d6;--line:#dce4f0;--muted:#68758a}
*{box-sizing:border-box}
body{margin:0}
button,input,textarea{font:inherit}
button{cursor:pointer}
.app{display:flex;min-height:100vh}
.sidebar{width:236px;flex:none;background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;padding:22px 13px}
.brand{display:flex;align-items:center;gap:9px;font-weight:750;font-size:14px;padding:0 10px 28px}
.mark{background:var(--blue);color:white;border-radius:8px;width:29px;height:29px;display:grid;place-items:center;font-weight:800}
.sidebar nav{display:grid;gap:7px}
.nav{display:flex;align-items:center;gap:12px;border:0;border-radius:10px;padding:13px 14px;background:transparent;color:#5b687b;text-align:left;font-size:14px}
.nav.active,.mobile-nav button.active{background:#e8efff;color:var(--blue);font-weight:700}
.account{margin-top:auto}
.account button{width:100%;border:1px solid var(--line);border-radius:10px;background:#fff;padding:12px;font-weight:650}
.main{flex:1;max-width:100%;padding:38px clamp(20px,5vw,80px)}
.page{display:none;max-width:800px;margin:auto}
.page.active{display:block}
h1{font-size:28px;letter-spacing:-.03em;margin:0 0 22px}
.card{background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 10px 25px rgba(31,54,104,.05);padding:22px}
.converter textarea{display:block;width:100%;min-height:155px;resize:vertical;border:0;border-bottom:2px solid var(--blue);outline:none;font-family:"PingFang SC","Noto Sans SC",sans-serif;font-size:25px;line-height:1.6;color:#172033}
.result-row{border-bottom:1px solid var(--line);padding:19px 0 12px}
.result-heading{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:12px;font-weight:750;text-transform:uppercase;letter-spacing:.06em}
.eye{border:1px solid var(--line);background:#fff;color:#587092;border-radius:8px;width:31px;height:31px}
.eye.on{background:#e8efff;color:var(--blue);border-color:#bfd0ff}
.pinyin{min-height:42px;color:var(--blue);font-size:24px;font-weight:650;line-height:1.5;padding-top:5px}
.translation{min-height:38px;padding-top:9px;font-size:15px;line-height:1.55}
.hidden{display:none!important}
.actions,.exports{display:flex;gap:9px;flex-wrap:wrap;margin-top:18px}
.primary,.secondary{border-radius:10px;min-height:42px;padding:0 15px;font-weight:650}
.primary{border:0;background:var(--blue);color:#fff}
.secondary{border:1px solid var(--line);background:#fff;color:#27364e}
.primary:hover{background:#193f9d}
.secondary:hover{background:#f7f9fd}
.status{margin:10px 0 0;color:#157a51;min-height:1em;font-size:13px}
.title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}
.title-row h1{margin-bottom:0}
.title-row p{margin:3px 0 0;color:var(--muted);font-size:13px}
.title-row .exports{margin:0}
.vocab-row{display:grid;grid-template-columns:1fr 1fr 2fr auto;align-items:center;gap:12px;padding:15px 0;border-bottom:1px solid var(--line);font-size:14px}
.vocab-row:last-child{border:0}
.vocab-row .hanzi{font-size:21px}
.vocab-row .py{color:var(--blue)}
.vocab-row .meaning{color:#4f5c70}
.vocab-row button{border:0;background:#f1f5fc;color:#52617a;border-radius:8px;padding:7px}
.empty{color:var(--muted);padding:28px 4px}
.exercise-tabs{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:14px}
.exercise-tabs button,.formats button{border:1px solid var(--line);border-radius:9px;background:#fff;color:#4d5c71;padding:9px 13px}
.exercise-tabs button.active,.formats button.active{background:#e8efff;border-color:#b9ccff;color:var(--blue);font-weight:750}
.exercise-card{max-width:600px;margin:0}
.prompt{font-size:36px;min-height:68px;margin:16px 0 20px;font-family:"PingFang SC",sans-serif}
.exercise-card input{display:block;width:100%;border:1px solid var(--line);border-radius:10px;padding:13px;margin-bottom:14px}
.exercise-card #next{float:right}
.exercise-card::after{content:"";display:block;clear:both}
.feedback{min-height:30px;margin:14px 0;color:#157a51}
.feedback.wrong{color:#b74141}
.reveal{margin:10px 0 18px;padding:14px;border-radius:12px;background:#f5f8fd;line-height:1.8}
.reveal .hanzi{font-size:26px}
.setting{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px 0;border-bottom:1px solid var(--line)}
.setting:last-child{border:0}
.formats{display:flex;flex-wrap:wrap;gap:6px}
.switch{width:43px;height:25px;border:0;border-radius:20px;background:#c9d4e7;position:relative}
.switch:after{content:"";position:absolute;top:3px;left:3px;width:19px;height:19px;border-radius:50%;background:#fff;transition:left .18s}
.switch.on{background:var(--blue)}
.switch.on:after{left:21px}
.login-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--line);border-radius:10px;background:#fff;padding:11px 12px;font-weight:650;font-size:13px;color:#27364e}
.login-btn:before{content:"G";display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:linear-gradient(135deg,#4285f4 0%,#34a853 33%,#fbbc05 66%,#ea4335 100%);color:#fff;font-weight:800;font-size:11px}
.login-btn:hover{background:#f0f4ff}
.user-pill{display:flex;align-items:center;gap:9px;padding:8px 6px;border:1px solid var(--line);border-radius:10px;background:#f8fbff}
.user-avatar{width:32px;height:32px;border-radius:50%;background:var(--blue);color:#fff;display:grid;place-items:center;font-weight:750;font-size:14px;flex:none}
.user-info{display:flex;flex-direction:column;overflow:hidden;flex:1;min-width:0}
.user-name{font-size:13px;font-weight:650;color:#172033;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.user-email{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.logout-btn{border:0;background:transparent;color:var(--muted);padding:4px 6px;border-radius:6px;font-size:13px;flex:none}
.logout-btn:hover{background:#f1f5fc;color:#b74141}
.tone-guide{margin:2px 0 16px;padding:14px 16px;border-radius:14px;background:#f5f8fd;border:1px solid var(--line)}
.tone-guide p{margin:0 0 12px;font-size:13px;color:#3a4a63;line-height:1.5}
.tone-guide b{color:#172033}
.tone-guide code{background:#fff;padding:2px 7px;border-radius:6px;color:#1e50c6;font-weight:650;font-family:ui-monospace,SFMono-Regular,monospace;border:1px solid var(--line)}
.tone-table{display:grid;grid-template-columns:repeat(5,1fr);gap:7px}
.tone-table div{display:flex;flex-direction:column;align-items:center;gap:3px;padding:10px 4px;border-radius:10px;background:#fff;border:1px solid var(--line)}
.tone-mark{font-size:21px;font-weight:700;color:var(--blue);font-family:"PingFang SC",sans-serif}
.tone-num{font-size:11px;color:var(--muted);font-weight:750}
.mic-visualizer{display:none;align-items:center;gap:10px;margin:12px 0;padding:9px 13px;border-radius:10px;background:#f1f5fc;color:var(--blue);font-size:12px;font-weight:650}
.mic-visualizer:not(.hidden){display:flex}
.mic-bars{display:flex;align-items:center;gap:3px;height:20px}
.mic-bars i{display:block;width:3px;height:100%;border-radius:2px;background:var(--blue);transform:scaleY(.15);transition:transform .09s ease-out}
.signin-prompt{text-align:center;padding:40px 20px;color:var(--muted)}
.signin-prompt p{margin:0 0 16px;font-size:14px;line-height:1.5}
@keyframes ctp-pulse{0%,100%{box-shadow:0 0 0 0 rgba(36,88,214,.4)}
50%{box-shadow:0 0 0 8px rgba(36,88,214,0)}
}
.login-btn.pulse{animation:ctp-pulse .8s ease-out 2}
.mobile-nav{display:none}
@media(max-width:680px){.sidebar{display:none}
.app{display:block}
.main{padding:23px 15px 96px}
.page{max-width:none}
h1{font-size:23px;margin-bottom:16px}
.card{padding:17px;border-radius:14px}
.converter textarea{font-size:22px;min-height:125px}
.pinyin{font-size:21px}
.title-row{display:block}
.title-row .exports{margin:14px 0}
.vocab-row{grid-template-columns:1fr 1fr auto}
.vocab-row .meaning{grid-column:1 / -1}
.mobile-nav{position:fixed;z-index:10;bottom:0;left:0;right:0;display:grid;grid-template-columns:repeat(4,1fr);background:#fff;border-top:1px solid var(--line);padding:7px 4px max(7px,env(safe-area-inset-bottom))}
.mobile-nav button{border:0;background:transparent;color:#66758a;border-radius:9px;display:grid;gap:2px;place-items:center;padding:5px 0;font-size:19px}
.mobile-nav span{font-size:10px}
.setting{display:block}
.setting .formats{margin-top:12px}
.setting .switch{float:right}
.tone-guide{padding:12px}
.tone-mark{font-size:18px}
}

/* Shared converter UI: the website mirrors the popup's interlinear reading layout. */
.converter textarea{min-height:118px;border-bottom:1px solid var(--line);font-size:22px}
.toggle-row{display:flex;flex-wrap:wrap;gap:8px;margin:15px 0 12px}
.toggle-chip{height:32px;padding:0 13px;border:1px solid var(--line);border-radius:9px;background:#fff;color:#172033;font-size:13px;font-weight:650}
.toggle-chip.is-on{border-color:#8eb0ff;background:#e8efff;color:var(--blue)}
.interlinear-output{min-height:170px;max-height:370px;overflow:auto;padding:15px 2px 8px;border-top:1px solid var(--line);border-bottom:2px solid var(--blue);line-height:1}
.chunk{display:inline-block;vertical-align:top;max-width:100%;margin:0 4px 18px 0}
.gloss-en{margin-bottom:5px;color:#3a4a63;font-size:13px;line-height:1.35;overflow-wrap:anywhere}
.gloss-en.placeholder{color:#b3bdcc;font-style:italic}
.gloss-zh{font-family:"PingFang SC","Noto Sans SC",sans-serif;font-size:26px;line-height:1.35;color:#172033;white-space:pre-wrap}
.gloss-zh ruby{ruby-align:center}
.gloss-zh rt{color:var(--blue);font-size:12px;font-weight:650}
.py-only{font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:18px;font-weight:650;color:var(--blue);line-height:1.55}
.tools{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:17px 0 0}
.tools button{min-height:68px;padding:7px 4px;border:1px solid var(--line);border-radius:11px;background:#fff;color:#68758a;display:grid;place-items:center;font-size:17px}
.tools button span{font-size:11px;line-height:1.25}
.tools button:hover,.tools button.saved{border-color:#8eb0ff;background:#e8efff;color:var(--blue)}
.converter-footer{display:flex;align-items:center;gap:10px;padding-top:13px}
.rating{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:11px;font-weight:750}
.stars{display:flex;gap:1px}
.stars button{padding:0;border:0;background:transparent;color:#b4c0d1;font-size:19px;line-height:1;transition:color .12s,transform .12s}
.stars button:hover,.stars button.lit{color:#f5b819;transform:scale(1.08)}
.link{margin-left:auto;border:0;background:transparent;color:var(--blue);font-size:12px;font-weight:750}
.composer{margin:0 0 12px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#f7f9fe}
.composer-row{display:flex;gap:6px}
.composer-row input{flex:1;min-width:0;height:36px;padding:0 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:#172033;font-size:13px}
.composer-row input:focus{outline:2px solid #c7d8ff;border-color:#8eb0ff}
.composer-row button{height:36px;white-space:nowrap}
.composer-row button:disabled{opacity:.45;cursor:default}
.composer-preview{min-height:34px;margin-top:8px;font-family:"PingFang SC","Noto Sans SC",sans-serif;font-size:22px;line-height:1.45;color:#172033;overflow-wrap:anywhere}
.composer-preview:empty:before{content:attr(data-placeholder);color:#b3bdcc}
.composer-preview .seg{padding:0 1px;margin:0;border:0;border-bottom:2px dotted #b8c7e6;border-radius:3px 3px 0 0;background:transparent;color:inherit;font:inherit;cursor:pointer}
.composer-preview .seg:hover{background:#eef3ff}
.composer-preview .seg.active{border-bottom:2px solid var(--blue);background:#e8efff}
.composer-candidates{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.composer-candidates:empty{display:none}
.composer-candidates .cand{min-width:32px;height:30px;padding:0 9px;border:1px solid var(--line);border-radius:8px;background:#fff;color:#172033;font-family:"PingFang SC","Noto Sans SC",sans-serif;font-size:16px}
.composer-candidates .cand:hover{border-color:#8eb0ff;background:#eef3ff}
.composer-candidates .cand.active{border-color:#8eb0ff;background:#e8efff;color:var(--blue)}
.composer-candidates .cand.split{border-style:dashed;color:var(--muted);font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-size:12px;font-weight:650}
@media(max-width:680px){.interlinear-output{min-height:145px}.tools{grid-template-columns:repeat(2,minmax(0,1fr))}.tools button{min-height:58px}.converter-footer{padding-bottom:2px}}
.reveal-pinyin{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 6px}
.reveal-way{display:inline-flex;flex-direction:column;gap:2px;padding:6px 10px;border-radius:10px;background:#fff;border:1px solid var(--line)}
.reveal-way code{font-family:ui-monospace,SFMono-Regular,monospace;font-weight:650;font-size:15px;color:#1e50c6}
.reveal-way small{font-size:10px;font-weight:750;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.reveal-meaning{color:#3a4a63}
.tools button.is-on{border-color:#8eb0ff;background:#e8efff;color:var(--blue)}
