:root{--gold:#f0c75e;--gd:#d4a843;--bg:#1a0a2e;--card:#2d1b4e;--card2:#1e0f3d;
--bdr:#3d2a5c;--txt:#e8d5b7;--mut:#8a7a9a;--sub:#b8a080;--inp:#0f0520;--err:#e74c3c;
--m1:#4A148C;--m2:#FFB300;--s1:#1B3A5C;--s2:#FF8F00;--f1:#2E7D4F;--f2:#D4A574}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;
background:var(--bg);color:var(--txt);min-height:100vh;padding-bottom:80px}
.ctn{max-width:960px;margin:0 auto;padding:0 16px}
.promo{background:linear-gradient(135deg,#d4a843,#f0c75e,#d4a843);color:#1a0a2e;
text-align:center;padding:10px 44px 10px 16px;font-size:.93em;font-weight:600;
position:relative;display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap}
.promo .cd{font-variant-numeric:tabular-nums;background:rgba(0,0,0,.13);padding:2px 8px;border-radius:4px}
.promo .xb{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:none;
border:none;font-size:1.3em;cursor:pointer;color:#1a0a2e;opacity:.5;min-width:44px;min-height:44px;
display:flex;align-items:center;justify-content:center}
.promo .xb:hover{opacity:1}
.promo.hidden{display:none}
header{text-align:center;padding:24px 0 4px}
header h1{font-size:1.8em;color:var(--gold);text-shadow:2px 2px 4px rgba(0,0,0,.5);letter-spacing:2px}
header p{color:var(--sub);margin-top:6px;font-size:.95em}

/* 顶部主菜单 */
.main-tabs{display:flex;gap:20px;justify-content:center;margin:20px 0 30px;border-bottom:2px solid var(--bdr);padding-bottom:0px;}
.tab-btn{background:transparent;border:none;color:var(--mut);font-size:1.1em;font-weight:600;padding:12px 24px;cursor:pointer;border-radius:8px 8px 0 0;transition:all .3s;position:relative;margin-bottom:-2px;}
.tab-btn:hover{color:var(--txt);background:rgba(255,255,255,0.03);}
.tab-btn.active{color:var(--gold);background:linear-gradient(180deg, rgba(240,199,94,0.1) 0%, transparent 100%);border-bottom:2px solid var(--gold);}
.badge-new{background:#e74c3c;color:#fff;font-size:0.65em;padding:2px 6px;border-radius:10px;position:absolute;top:2px;right:-10px;transform:scale(0.9);}

.stepper{display:flex;align-items:center;justify-content:center;padding:18px 0 20px;gap:0;overflow-x:auto}
.step-item{display:flex;align-items:center;cursor:pointer;gap:6px;padding:6px 2px;white-space:nowrap;min-height:44px}
.step-num{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;
font-weight:700;font-size:.9em;border:2px solid var(--bdr);color:var(--mut);background:transparent;
transition:all .3s;flex-shrink:0}
.step-label{font-size:.85em;color:var(--mut);transition:color .3s}
.step-line{width:32px;height:2px;background:var(--bdr);flex-shrink:0;transition:background .3s}
.step-item.active .step-num{border-color:var(--gold);color:var(--bg);background:var(--gold)}
.step-item.active .step-label{color:var(--gold);font-weight:600}
.step-item.done .step-num{border-color:var(--gold);color:var(--gold)}
.step-item.done .step-label{color:var(--gold)}
.step-line.done{background:var(--gold)}
.wizard-step{display:none;animation:fadeUp .35s ease}
.wizard-step.active{display:block}
@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
.tpl-grid{display:grid;grid-template-columns:1fr;gap:14px;margin:8px 0}
.tpl-card{background:linear-gradient(135deg,var(--card),var(--card2));border:2px solid var(--bdr);
border-radius:12px;padding:18px;cursor:pointer;transition:all .3s;position:relative;overflow:hidden;min-height:44px}
.tpl-card:hover{border-color:var(--gold);transform:translateY(-3px);box-shadow:0 6px 20px rgba(240,199,94,.15)}
.tpl-card.selected{border-color:var(--gold);background:linear-gradient(135deg,var(--bdr),var(--card));
box-shadow:0 0 15px rgba(240,199,94,.2)}
.tpl-card .badge{position:absolute;top:0;right:0;background:linear-gradient(135deg,#2ecc71,#27ae60);
color:#fff;font-size:.7em;padding:3px 10px;border-radius:0 10px 0 10px;font-weight:600}
.tpl-card .tpl-icon{font-size:2em;margin-bottom:6px}
.tpl-card h3{color:var(--gold);margin-bottom:4px;font-size:1.05em}
.tpl-card p{color:var(--sub);font-size:.88em;line-height:1.4}
.tpl-card .tags{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap}
.tpl-card .tags span{font-size:.72em;padding:2px 8px;border-radius:10px;background:rgba(240,199,94,.1);
color:var(--gold);border:1px solid rgba(240,199,94,.2)}
.sec-title{color:var(--gold);font-size:1.2em;margin-bottom:14px}
.opt-grid{display:flex;gap:12px;flex-wrap:wrap}
.opt-card{background:linear-gradient(135deg,var(--card),var(--card2));border:2px solid var(--bdr);
border-radius:10px;padding:14px 20px;cursor:pointer;transition:all .3s;text-align:center;
min-width:120px;flex:1;min-height:44px}
.opt-card:hover{border-color:var(--gold);transform:translateY(-2px)}
.opt-card.selected{border-color:var(--gold);background:linear-gradient(135deg,var(--bdr),var(--card));
box-shadow:0 0 12px rgba(240,199,94,.2)}
.opt-card .oi{font-size:1.8em;margin-bottom:4px}
.opt-card .ol{color:var(--txt);font-size:.92em;font-weight:bold}
.opt-card .od{color:var(--mut);font-size:.78em;margin-top:3px}
.house-card.selected{border-color:var(--gold);box-shadow:0 0 15px rgba(240,199,94,.2)}
.form-section{margin-top:16px}
.form-section label{color:var(--gold);font-size:1em;display:block;margin-bottom:6px}
.form-section input[type="text"],.form-section textarea{width:100%;padding:12px;border:2px solid var(--bdr);
border-radius:8px;background:var(--inp);color:var(--txt);font-size:1em;transition:border-color .3s}
.form-section input:focus,.form-section textarea:focus{outline:none;border-color:var(--gold)}
.form-section textarea{min-height:110px;resize:vertical}
.form-section textarea::placeholder{color:#6b5a7a}
.exercise-info{background:var(--inp);border:2px solid var(--bdr);border-radius:8px;padding:14px;
color:var(--sub);line-height:1.5}
.hint{color:var(--mut);font-size:.83em;margin-top:5px}
.warn{color:var(--err);margin-top:8px;display:none;font-size:.93em}
.warn.show{display:block}
.gen-row{display:flex;align-items:center;gap:14px;margin-top:18px;flex-wrap:wrap}
.btn-gen{padding:13px 36px;background:linear-gradient(135deg,var(--gold),var(--gd));color:var(--bg);
border:none;border-radius:8px;font-size:1.05em;font-weight:700;cursor:pointer;transition:all .3s;min-height:44px}
.btn-gen:hover{background:linear-gradient(135deg,#ffd76e,#e0b84e);transform:translateY(-1px)}
.btn-gen:disabled{opacity:.55;cursor:not-allowed;transform:none}
.gen-count{color:var(--mut);font-size:.85em}
.err-msg{background:#3b1020;border:1px solid var(--err);border-radius:8px;padding:12px;margin-top:14px;
color:#f5a0a0;display:none}
.err-msg.show{display:block}
.nav-row{display:flex;gap:10px;margin-top:18px}
.btn-nav{padding:10px 24px;border-radius:8px;font-size:.95em;cursor:pointer;min-height:44px;
border:2px solid var(--bdr);background:transparent;color:var(--txt);transition:all .3s}
.btn-nav:hover{border-color:var(--gold);color:var(--gold)}
.btn-nav.primary{background:linear-gradient(135deg,var(--gold),var(--gd));color:var(--bg);border:none;font-weight:600}
.btn-nav.primary:hover{background:linear-gradient(135deg,#ffd76e,#e0b84e)}
/* 成功结果区 */
.result-area{display:none;text-align:center;padding:24px 0}
.result-area.show{display:block}
.result-area .ok-icon{font-size:3em;margin-bottom:10px}
.result-area .ok-msg{color:var(--gold);font-size:1.2em;font-weight:600;margin-bottom:6px}
.result-area .ok-sub{color:var(--sub);font-size:.9em;margin-bottom:18px}
.result-btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.result-btns .btn-dl{padding:12px 32px;background:linear-gradient(135deg,var(--gold),var(--gd));
color:var(--bg);border:none;border-radius:8px;font-size:1em;font-weight:600;cursor:pointer;
text-decoration:none;min-height:44px;display:inline-flex;align-items:center;gap:6px;transition:all .3s}
.result-btns .btn-dl:hover{background:linear-gradient(135deg,#ffd76e,#e0b84e)}
.result-btns .btn-again{padding:12px 24px;border:2px solid var(--bdr);background:transparent;
color:var(--txt);border-radius:8px;font-size:.95em;cursor:pointer;min-height:44px;transition:all .3s}
.result-btns .btn-again:hover{border-color:var(--gold);color:var(--gold)}
.result-btns .btn-share{padding:12px 24px;border:2px solid var(--bdr);background:transparent;
color:var(--txt);border-radius:8px;font-size:.95em;cursor:pointer;min-height:44px;transition:all .3s;display:none}
.result-btns .btn-share:hover{border-color:var(--gold);color:var(--gold)}
/* 加载遮罩 */
.loading{display:none;position:fixed;top:0;left:0;width:100%;height:100%;
background:rgba(10,5,20,.88);z-index:100;justify-content:center;align-items:center;flex-direction:column}
.loading.show{display:flex}
.spinner{width:48px;height:48px;border:4px solid var(--bdr);border-top-color:var(--gold);
border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.loading .ltxt{color:var(--gold);margin-top:16px;font-size:1.05em;transition:opacity .3s}
/* 页脚 */
.footer{text-align:center;padding:20px 16px;color:var(--mut);font-size:.8em;border-top:1px solid var(--bdr);
margin-top:40px}
.footer a{color:var(--sub);text-decoration:none}
.footer a:hover{color:var(--gold)}
/* 鉴权状态横幅 */
.auth-banner{text-align:center;padding:8px 16px;font-size:.9em;font-weight:600;display:none}
.auth-banner.show{display:block}
.auth-banner.trial{background:linear-gradient(135deg,var(--card),var(--card2));color:var(--sub);border-bottom:1px solid var(--bdr)}
.auth-banner.licensed{background:linear-gradient(135deg,#1b5e20,#2e7d32);color:#a5d6a7;border-bottom:1px solid #388e3c}
/* 响应式 */
@media(min-width:640px){
.tpl-grid{grid-template-columns:repeat(2,1fr)}
.promo{font-size:1em}
}
@media(min-width:1024px){
.tpl-grid{grid-template-columns:repeat(3,1fr)}
.stepper .step-label{font-size:.9em}
}
@media(max-width:639px){
.stepper .step-label{display:none}
.step-line{width:20px}
.btn-gen{width:100%}
.gen-row{flex-direction:column;align-items:stretch}
.gen-count{text-align:center}
.result-btns{flex-direction:column;align-items:stretch}
.result-btns .btn-dl,.result-btns .btn-again,.result-btns .btn-share{width:100%;justify-content:center}
.opt-grid{flex-direction:column}
.opt-card{min-width:unset}
.nav-row{flex-direction:column}
.btn-nav{width:100%;text-align:center}
}

/* Header 布局优化 */
.header-top { display: flex; justify-content: space-between; align-items: center; }
.logo-area { text-align: left; }
.logo-area h1 { font-size: 1.8em; color: var(--gold); text-shadow: 2px 2px 4px rgba(0,0,0,.5); letter-spacing: 2px; }
.logo-area p { color: var(--sub); margin-top: 6px; font-size: .95em; }
.user-actions { display: flex; align-items: center; gap: 15px; }
.user-info { display: flex; align-items: center; gap: 10px; color: var(--txt); font-size: 0.95em; }

/* 按钮通用样式 */
.btn-outline { padding: 8px 16px; border: 1px solid var(--gold); background: transparent; color: var(--gold); border-radius: 6px; cursor: pointer; transition: all 0.3s; font-size: 0.9em; font-weight: 500; }
.btn-outline:hover { background: rgba(240, 199, 94, 0.1); }
.btn-primary { padding: 10px 20px; background: linear-gradient(135deg, var(--gold), var(--gd)); color: var(--bg); border: none; border-radius: 6px; cursor: pointer; transition: all 0.3s; font-size: 1em; font-weight: 600; }
.btn-primary:hover { background: linear-gradient(135deg, #ffd76e, #e0b84e); transform: translateY(-1px); }
.btn-secondary { padding: 10px 16px; background: var(--card2); border: 1px solid var(--bdr); color: var(--txt); border-radius: 6px; cursor: pointer; transition: all 0.3s; font-size: 0.9em; white-space: nowrap; }
.btn-secondary:hover { border-color: var(--gold); color: var(--gold); }
.btn-text { background: none; border: none; color: var(--mut); cursor: pointer; font-size: 0.9em; transition: color 0.3s; padding: 0; }
.btn-text:hover { color: var(--err); }
.full-width { width: 100%; }

/* 登录弹窗 (Modal) */
.modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(10, 5, 20, 0.85); z-index: 1000; display: flex; align-items: center; justify-content: center; backdrop-filter: blur(4px); }
.modal-content { background: var(--card); border: 2px solid var(--bdr); border-radius: 16px; width: 90%; max-width: 400px; padding: 30px; position: relative; box-shadow: 0 10px 30px rgba(0,0,0,0.5); }
.modal-close { position: absolute; top: 15px; right: 15px; background: none; border: none; color: var(--mut); font-size: 1.5em; cursor: pointer; transition: color 0.3s; line-height: 1; }
.modal-close:hover { color: var(--txt); }

.login-tabs { display: flex; border-bottom: 1px solid var(--bdr); margin-bottom: 20px; gap: 20px; }
.login-tab-btn { background: none; border: none; color: var(--mut); padding: 10px 0; font-size: 1.1em; font-weight: 600; cursor: pointer; position: relative; }
.login-tab-btn.active { color: var(--gold); }
.login-tab-btn.active::after { content: ''; position: absolute; bottom: -1px; left: 0; width: 100%; height: 2px; background: var(--gold); }

.form-group { margin-bottom: 15px; }
.row-group { display: flex; gap: 10px; }
.full-input, .flex-input { padding: 12px 15px; background: var(--inp); border: 1px solid var(--bdr); border-radius: 8px; color: var(--txt); font-size: 1em; transition: border-color 0.3s; }
.full-input { width: 100%; }
.flex-input { flex: 1; min-width: 0; }
.full-input:focus, .flex-input:focus { outline: none; border-color: var(--gold); }

.login-hint { color: var(--mut); font-size: 0.85em; text-align: center; margin-top: 15px; }
.login-error { color: var(--err); font-size: 0.9em; margin-top: 15px; text-align: center; background: rgba(231, 76, 60, 0.1); padding: 8px; border-radius: 6px; }

/* 滑块验证样式 */
.captcha-area { margin-bottom: 15px; background: var(--inp); padding: 15px; border-radius: 8px; border: 1px solid var(--bdr); }
.captcha-hint { color: var(--sub); font-size: 0.9em; margin-bottom: 10px; text-align: center; }
.captcha-box { position: relative; width: 300px; height: 150px; margin: 0 auto 15px; background: #333; border-radius: 6px; overflow: hidden; }
.captcha-box img { display: block; }
#captcha-bg { width: 100%; height: 100%; object-fit: cover; }
#captcha-slider { position: absolute; top: 0; left: 0; height: 100%; width: 50px; object-fit: contain; z-index: 2; pointer-events: none; }
.captcha-range { -webkit-appearance: none; width: 100%; height: 40px; background: var(--card2); border-radius: 20px; outline: none; border: 1px solid var(--bdr); }
.captcha-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 40px; height: 40px; border-radius: 50%; background: var(--gold); cursor: pointer; box-shadow: 0 0 10px rgba(0,0,0,0.3); }

/* 评分布局优化 */
.word-item { flex-direction: column; align-items: stretch; gap: 10px; padding: 15px; }
.word-item .w-txt { font-size: 1.1em; font-weight: 600; text-align: center; margin-bottom: 5px; }
.rating-btns { display: flex; gap: 8px; justify-content: center; }
.btn-rate { flex: 1; padding: 6px 0; border: 1px solid var(--bdr); background: var(--card2); border-radius: 6px; color: var(--mut); font-size: 0.9em; cursor: pointer; transition: all 0.2s; }
.btn-rate:hover { background: var(--card); color: var(--txt); }
.btn-rate.selected.rate-0 { background: rgba(231, 76, 60, 0.2); border-color: var(--err); color: var(--err); }
.btn-rate.selected.rate-1 { background: rgba(243, 156, 18, 0.2); border-color: #f39c12; color: #f39c12; }
.btn-rate.selected.rate-2 { background: rgba(46, 204, 113, 0.2); border-color: #2ecc71; color: #2ecc71; }
/* Auth banner actions */
.auth-banner-actions{margin-left:12px;display:inline-flex;gap:8px;align-items:center}
.btn-passcode-toggle{background:none;border:1px solid currentColor;border-radius:4px;padding:3px 10px;
color:inherit;font-size:.85em;cursor:pointer;opacity:.8;transition:opacity .3s}
.btn-passcode-toggle:hover{opacity:1}
.btn-logout{background:none;border:1px solid currentColor;border-radius:4px;padding:3px 10px;
color:inherit;font-size:.85em;cursor:pointer;opacity:.8;transition:opacity .3s}
.btn-logout:hover{opacity:1}

/* Auth banner actions */
.ebb-container{max-width:640px;margin:20px auto 0;}
.ebb-card{background:var(--card);border:2px solid var(--bdr);border-radius:12px;padding:30px;text-align:center;}
.ebb-card h2{color:var(--gold);margin-bottom:10px;font-size:1.5em;}
.ebb-card p{color:var(--sub);margin-bottom:20px;line-height:1.6;}
.word-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(130px, 1fr));gap:12px;margin-top:15px;text-align:left;}
.word-item{background:var(--inp);border:2px solid var(--bdr);border-radius:8px;padding:12px 14px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:all .3s;}
.word-item:hover{transform:translateY(-2px);box-shadow:0 4px 10px rgba(0,0,0,0.2);}
.word-item .w-txt{font-weight:bold;color:var(--txt);font-size:1.1em;}
.word-item .w-st{font-size:1.2em;}
.word-item.good{border-color:#2ecc71;}
.word-item.hard{border-color:var(--gold);background:rgba(255, 215, 110, 0.12);}
.word-item.again{border-color:var(--err);background:rgba(231,76,60,0.1);}
.ebb-divider{height:1px;background:var(--bdr);margin:30px 0;}
.help-tip{position:relative;user-select:none;outline:none}
.help-tip::after{content:attr(data-tip);position:absolute;left:50%;top:calc(100% + 10px);transform:translateX(-50%);background:var(--card2);border:1px solid var(--bdr);color:var(--txt);padding:8px 10px;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,0.35);width:min(300px,70vw);line-height:1.4;font-size:12px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s ease,visibility .12s ease;z-index:9999}
.help-tip::before{content:"";position:absolute;left:50%;top:calc(100% + 4px);transform:translateX(-50%);border:6px solid transparent;border-bottom-color:var(--bdr);opacity:0;visibility:hidden;pointer-events:none;transition:opacity .12s ease,visibility .12s ease;z-index:9998}
.help-tip:hover::after,.help-tip:focus::after,.help-tip:hover::before,.help-tip:focus::before{opacity:1;visibility:visible}
