:root{--bg:#f8fafc;--cyan:#2563eb;--purple:#8B5CF6;--t1:#F3F4F6;--t2:#9CA3AF;--t3:#4B5563;--card:rgba(7,20,40,.78);--bdr:rgba(37,99,235,.1);--cyan-soft:rgba(37,99,235,.05);--cyan-soft-2:rgba(37,99,235,.12);--cyan-soft-bd:rgba(37,99,235,.25);--amber:#FFB74D;--t-dim:#6B7280;--overlay:rgba(0,0,0,.7);--card-strong:rgba(7,20,40,.98);--shadow:rgba(0,0,0,.5);--btn-text:#fff}
body{background:var(--bg);color:#D1D5DB;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;margin:0}
/* 浅色主题：header-user.js 依据白天时段/?theme=light 挂 body.light —— 变量级整体换肤 */
body.light{--bg:#F6F8FB;--cyan:#0E7A6A;--purple:#6D28D9;--t1:#1F2937;--t2:#4B5563;--t3:#9CA3AF;--card:rgba(255,255,255,.95);--bdr:rgba(14,122,106,.2);--cyan-soft:rgba(0,150,120,.06);--cyan-soft-2:rgba(0,150,120,.15);--cyan-soft-bd:rgba(14,122,106,.3);--amber:#92400E;--t-dim:#5B6472;--overlay:rgba(15,23,42,.55);--card-strong:rgba(255,255,255,.98);--shadow:rgba(15,23,42,.16);--btn-text:#fff;color:#374151}
body.light .form-input{background:#fff}
body.light .part-item{background:rgba(2,8,18,.03)}
body.light .output-tab{background:rgba(2,8,18,.03)}
body.light .output-content{background:#fff}
body.light .expr-rep-row{background:rgba(2,8,18,.03)}
body.light .warn-item{background:rgba(245,158,11,.1);border-left-color:#D97706;color:#92400E}
body.light .expr-sci-note{background:rgba(255,193,7,.1);color:#7A6210;border-color:rgba(217,119,6,.35)}
body.light .btn-primary{background:linear-gradient(135deg,rgba(14,122,106,.12),rgba(109,40,217,.1))}
body.light .btn-primary:hover{background:linear-gradient(135deg,rgba(14,122,106,.2),rgba(109,40,217,.16));box-shadow:0 0 30px rgba(14,122,106,.12)}

/* JS 驱动的交互类：颜色一律走 CSS 变量，随 body.light 自适应，不内联硬编码 */
.sel-item{display:inline-flex;align-items:center;gap:6px;padding:9px 14px;border:2px solid var(--bdr);border-radius:8px;cursor:pointer;font-size:.85rem}
.sel-item input{accent-color:var(--cyan)}
.sel-item.sel-reco{border-color:var(--cyan);background:var(--cyan-soft)}
.sel-sub{color:var(--t3);font-size:.75rem}
.repair-list{margin-top:8px;font-size:.76rem;color:var(--t3);line-height:1.8}
.repair-tag{display:inline-block;padding:2px 8px;margin:2px 4px 0 0;border:1px solid var(--cyan-soft-bd);border-radius:10px;background:var(--cyan-soft)}
.sel-warn{margin-top:6px;font-size:.78rem;color:var(--amber)}

/* 模板驱动的类：模式卡片 / 使用教程框 / 登录弹窗（原为模板内联暗色样式，已类化） */
.mode-card{position:relative;flex:1;min-width:200px;padding:14px;border:2px solid var(--bdr);border-radius:10px;cursor:pointer;background:transparent;transition:border-color .2s,background .2s,box-shadow .2s;display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.mode-card .mode-radio{width:16px;height:16px;margin:0;flex:0 0 auto;accent-color:var(--cyan);cursor:pointer}
.mode-card .mc-title{font-size:.95rem;color:var(--t1);line-height:1.3}
.mode-card .mc-desc{font-size:.78rem;color:var(--t-dim);margin-top:2px;flex-basis:100%;padding-left:24px}
.mode-card.mode-sel{border-color:var(--cyan);background:var(--cyan-soft-2);box-shadow:0 0 0 1px var(--cyan-soft-bd),0 0 16px var(--cyan-soft)}
.mode-card.mode-sel .mc-title{color:var(--cyan)}
.mode-card.mode-sel::after{content:'✓ 已选';margin-left:auto;flex:0 0 auto;font-size:.72rem;color:var(--cyan);font-weight:600;border:1px solid var(--cyan-soft-bd);background:var(--cyan-soft);border-radius:8px;padding:2px 8px}
.tutorial-box{max-width:860px;margin:32px auto 0;background:var(--card);border:1px solid var(--bdr);border-radius:16px;padding:28px;backdrop-filter:blur(14px);line-height:1.8;color:var(--t2)}
.tutorial-box h3{color:var(--t1);margin:0 0 14px}
.login-modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background:var(--overlay);justify-content:center;align-items:center}
.login-modal .modal-box{background:var(--card-strong);border:1px solid var(--bdr);border-radius:16px;padding:40px;text-align:center;max-width:400px;width:90%;box-shadow:0 20px 60px var(--shadow)}
.login-modal .modal-icon{font-size:3rem;margin-bottom:16px}
.login-modal .modal-box h3{color:var(--t1);margin:0 0 8px;font-size:1.2rem}
.login-modal .modal-box p{color:var(--t-dim);font-size:.88rem;margin:0 0 24px;line-height:1.6}
.login-modal .login-btn{display:inline-block;padding:12px 40px;background:var(--cyan);color:var(--btn-text);border-radius:10px;text-decoration:none;font-weight:600;font-size:.95rem}
.login-modal .modal-cancel{display:block;margin:16px auto 0;background:none;border:none;color:var(--t-dim);cursor:pointer;font-size:.82rem;padding:8px 24px}
a{text-decoration:none}

.tool-hero{text-align:center;padding:40px 24px 20px;position:relative;z-index:10}
.tool-hero h1{font-size:1.8rem;color:var(--t1);margin:0 0 6px}
.tool-hero .sub{font-size:.9rem;color:var(--t2);max-width:600px;margin:0 auto}

.tool-wrap{max-width:900px;margin:0 auto;padding:0 24px 48px;position:relative;z-index:10}

/* Host selector */
.host-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;margin-bottom:20px}
.host-card{padding:12px;background:var(--card);border:2px solid var(--bdr);border-radius:10px;cursor:pointer;transition:all .2s;text-align:center}
.host-card:hover{border-color:rgba(37,99,235,.3);transform:translateY(-1px)}
.host-card.active{border-color:var(--cyan);background:rgba(37,99,235,.08)}
.host-card .hn{font-size:.9rem;color:var(--t1);font-weight:600;margin-bottom:2px}
.host-card .hd{font-size:.75rem;color:var(--t3);line-height:1.3}

/* Form area */
.form-section{background:var(--card);border:1px solid var(--bdr);border-radius:12px;padding:24px;margin-bottom:16px}
.form-section h3{font-size:.95rem;color:var(--t1);margin:0 0 12px;display:flex;align-items:center;gap:8px}
.form-label{display:block;font-size:.82rem;color:var(--t2);margin-bottom:6px}
.form-input{width:100%;padding:10px 14px;background:rgba(2,8,18,.6);border:1px solid var(--bdr);border-radius:8px;color:var(--t1);font-size:.88rem;font-family:monospace;resize:vertical;box-sizing:border-box;transition:border-color .2s}
.form-input:focus{outline:none;border-color:var(--cyan)}
.form-textarea{min-height:100px;line-height:1.5}
.form-select{appearance:none;cursor:pointer}

.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:14px;background:linear-gradient(135deg,rgba(37,99,235,.15),rgba(139,92,246,.15));border:1px solid var(--cyan);border-radius:10px;color:var(--cyan);font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s}
.btn-primary:hover{background:linear-gradient(135deg,rgba(37,99,235,.25),rgba(139,92,246,.25));box-shadow:0 0 30px rgba(37,99,235,.15)}
.btn-primary:disabled{opacity:.5;cursor:not-allowed}
.btn-download{padding:8px 16px;background:rgba(37,99,235,.1);border:1px solid var(--bdr);border-radius:6px;color:var(--cyan);font-size:.85rem;cursor:pointer;transition:all .15s}
.btn-download:hover{background:rgba(37,99,235,.2)}

/* Progress */
.progress-wrap{display:none;background:var(--card);border:1px solid var(--bdr);border-radius:12px;padding:20px;margin-bottom:16px;text-align:center}
.progress-bar{height:4px;background:rgba(37,99,235,.1);border-radius:2px;margin:12px 0;overflow:hidden}
.progress-bar-fill{height:100%;background:linear-gradient(90deg,var(--cyan),var(--purple));border-radius:2px;transition:width .3s;width:0}
.progress-msg{font-size:.85rem;color:var(--t2)}
.progress-elapsed{font-size:.78rem;color:var(--t3);margin-top:4px}

/* Results */
.result-wrap{display:none;background:var(--card);border:1px solid var(--bdr);border-radius:12px;padding:24px;margin-bottom:16px}
.result-section{margin-bottom:20px}
.result-section:last-child{margin-bottom:0}
.result-section h4{font-size:.9rem;color:var(--t1);margin:0 0 8px;padding-bottom:6px;border-bottom:1px solid var(--bdr)}
.rationale{font-size:.88rem;color:var(--t2);line-height:1.6;padding:10px 14px;background:rgba(37,99,235,.04);border-radius:8px}

/* Module bar visualization */
.module-bar{display:flex;gap:2px;margin:12px 0;height:36px;border-radius:6px;overflow:hidden}
.module-seg{display:flex;align-items:center;justify-content:center;font-size:.68rem;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-shadow:0 1px 2px rgba(0,0,0,.5)}
.module-seg:hover{filter:brightness(1.3)}
.seg-P{background:#2196F3}.seg-R{background:#FF9800}.seg-S{background:#E91E63}
.seg-N{background:#9C27B0}.seg-L{background:#607D8B}.seg-C{background:#4CAF50}
.seg-T{background:#F44336}.seg-tag{background:#795548}
.seg-colors{display:flex;gap:10px;flex-wrap:wrap;margin:8px 0;font-size:.72rem;color:var(--t3)}

/* Parts list */
.parts-list{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.part-item{padding:8px 12px;background:rgba(2,8,18,.4);border-radius:6px;font-size:.82rem}
.part-item .pi-label{color:var(--t3);font-size:.72rem}
.part-item .pi-value{color:var(--t1);font-weight:500}
.part-item .pi-reason{color:var(--t2);font-size:.75rem;margin-top:2px}

/* Output tabs */
.output-tabs{display:flex;gap:4px;margin-bottom:12px}
.output-tab{padding:6px 14px;background:rgba(2,8,18,.4);border:1px solid var(--bdr);border-radius:6px 6px 0 0;color:var(--t2);font-size:.82rem;cursor:pointer}
.output-tab.active{background:var(--card);border-bottom-color:transparent;color:var(--cyan)}
.output-content{background:rgba(2,8,18,.6);border:1px solid var(--bdr);border-radius:0 8px 8px 8px;padding:16px;max-height:400px;overflow:auto;font-size:.78rem;font-family:monospace;color:var(--t2);line-height:1.5;white-space:pre-wrap;word-break:break-all}
.output-content::-webkit-scrollbar{width:6px}
.output-content::-webkit-scrollbar-thumb{background:rgba(37,99,235,.15);border-radius:3px}

.balance-bar{font-size:.8rem;color:var(--t3);text-align:center;margin-bottom:16px}
.balance-bar span{color:var(--cyan)}

.warn-item{padding:6px 10px;background:rgba(255,152,0,.08);border-left:3px solid #FF9800;border-radius:0 4px 4px 0;font-size:.82rem;color:#FFB74D;margin-bottom:4px}
/* 预计消耗提示（通用工具页同款样式） */
.tool-cost-hint{margin:0 0 12px;font-size:.82rem;color:#6B7280;line-height:1.6}
body.light .tool-cost-hint{color:#8B7355}

/* 科研诚信升级：声明横幅 / 密码子优化报告 / 元件来源追溯 */
.expr-sci-note{background:rgba(255,193,7,.06);color:#EBD9A6;border:1px solid rgba(255,193,7,.22)}
.part-item .pi-src{display:inline-block;color:var(--t3);font-size:.7rem;margin-top:2px;word-break:break-all;line-height:1.5}
.part-item .pi-src-link{color:var(--cyan);text-decoration:underline;text-underline-offset:2px;word-break:break-all}
.part-item .pi-src-link:hover{opacity:.85}
.part-item .pi-src.pi-codon{color:var(--cyan)}
body.light .part-item .pi-src-link{color:#0E7A6A}
body.light .part-item .pi-src.pi-codon{color:#0E7A6A}
.expr-rep{display:flex;flex-direction:column;gap:6px;font-size:.8rem}
.expr-rep-row{display:flex;flex-wrap:wrap;gap:6px 14px;padding:6px 10px;background:rgba(2,8,18,.4);border-radius:6px;color:var(--t2);line-height:1.7}
.expr-rep-k{font-weight:600;color:var(--t1);min-width:9em}
.expr-cst{font-weight:600;color:var(--t1)}
.expr-cst-desc{color:var(--t2)}
.expr-rep-warn{border-left:3px solid #FF9800;background:rgba(255,152,0,.08);color:#FFB74D}
.expr-warn-line{line-height:1.7}
body.light .expr-cst{color:#1F2937}
body.light .expr-cst-desc{color:#4A5568}
body.light .expr-rep-warn{border-left-color:#D97706;background:rgba(245,158,11,.08);color:#92400E}

/* ===== 表达模块设计器 SEO 信任徽标 + 正文区块（2026-08-16）===== */
.trust-badges{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:12px 0 0}
.trust-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 14px;background:rgba(37,99,235,.05);border:1px solid rgba(37,99,235,.18);border-radius:20px;color:var(--t2);font-size:.78rem;line-height:1.7;white-space:nowrap}
.trust-badge::before{content:"\2713";color:var(--cyan);font-weight:700}
body.light .trust-badge{background:rgba(0,150,120,.05);border-color:rgba(0,150,120,.25);color:#4A5568}
body.light .trust-badge::before{color:#0E7A6A}
.tool-seo{max-width:960px;margin:44px auto 12px;padding:26px 20px 8px;border-top:1px solid var(--bdr)}
.tool-seo h2{font-size:1.12rem;color:var(--t1);margin:24px 0 8px;line-height:1.6;font-weight:600}
.tool-seo p{font-size:.87rem;color:var(--t2);line-height:1.95;margin:0 0 4px}
.tool-seo a{color:var(--cyan);text-decoration:underline;text-underline-offset:2px}
body.light .tool-seo h2{color:#1F2937}
body.light .tool-seo p{color:#4A5568}
body.light .tool-seo a{color:#0E7A6A}

/* ── 纯 TU 模块扩增引物（2026-08-17 追加）── */
.expr-primer-seq{font-family:'Courier New',Consolas,monospace;color:var(--cyan);letter-spacing:.3px;word-break:break-all}
.expr-rep-note{margin-top:6px;padding:8px 10px;font-size:.74rem;color:var(--t3);background:rgba(2,8,18,.35);border:1px solid var(--bdr);border-radius:6px;line-height:1.7}
body.light .expr-rep-note{background:rgba(2,8,18,.03)}

/* ── 组装：最终载体骨架 + 单一抗性标记 下拉（2026-08-17 追加）── */
.asm-parts-grid{display:flex;flex-wrap:wrap;gap:14px;margin-top:8px}
.asm-parts-field{display:flex;flex-direction:column;gap:6px;font-size:.8rem;font-weight:600;color:var(--t2);min-width:280px}
.asm-parts-field .form-select{width:100%}
.asm-parts-field select option{color:#0e1626;background:#f5f7fa}

/* ── 组装：最终环形通路质粒展示（2026-08-17 追加）── */
.asm-plasmid-head{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;font-size:.82rem;color:var(--t2);margin:4px 0 10px}
.asm-plasmid-badge{display:inline-block;padding:2px 10px;border:1px solid var(--cyan);color:var(--cyan);border-radius:999px;font-size:.72rem}
.asm-plasmid-bar{display:flex;width:100%;height:34px;border-radius:8px;overflow:hidden;border:1px solid var(--bdr);margin:6px 0 8px}
.asm-plasmid-part{display:flex;align-items:center;justify-content:center;color:#fff;font-size:.68rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.asm-plasmid-legend{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:.76rem;color:var(--t2)}
.asm-warn{margin:6px 0;padding:8px 12px;border-left:3px solid #FF9800;background:rgba(255,152,0,.08);color:#FFB74D;border-radius:4px;font-size:.8rem}
body.light .asm-warn{border-left-color:#D97706;color:#92400E}

/* ── 抗性选择网格 + 输出模式网格（2026-08-18 追加）── */
.sel-grid{display:flex;flex-wrap:wrap;gap:8px}
.sel-hint{font-size:.78rem;color:var(--t3);margin:0 0 10px;line-height:1.6}
.mode-grid{display:flex;gap:12px;flex-wrap:wrap}
body.light .sel-hint{color:#6B7280}
/* ── 抗性选择 + 输出模式：补充样式（2026-08-18）── */
.sel-item.sel-chk{border-color:var(--cyan);background:var(--cyan-soft)}
.sel-item.sel-reco .sel-sub{color:var(--cyan)}
.sel-reco-badge{margin-left:2px;font-size:.68rem;color:var(--cyan);border:1px solid var(--cyan-soft-bd);background:var(--cyan-soft);border-radius:10px;padding:1px 6px;white-space:nowrap}
.sel-loading{font-size:.8rem;color:var(--t3)}
body.light .sel-loading{color:#6B7280}
.expr-rep-row .expr-warn-line{flex-basis:100%}
