/* ReportForge V0.4.0 样式
   对比度修订（UI-05，2026-11-02 复算，WCAG AA ≥4.5:1）：
   --muted #728094→#5b6b80 (5.44:1/#fff) · .hint族 #8491a4→#5d6e83 (5.22:1/#fff)
   footer #9aa6b7→#616e85 (4.79:1/#f4f7fb) · .empty-state p #8491a4→#5b6c81 (5.23:1/#fafcff)
   .top-label #748198→#5c6c81 (5.36:1/#fff) · .hero p #64748b→#536174 (5.87:1/#f4f7fb)
   主按钮渐变浅端 #1987bb→#1478ab（白字 4.02→4.88:1，运行时审计补获） */
:root{--ink:#182c46;--muted:#5b6b80;--line:#e1e7ee;--blue:#1759ba;--teal:#21ab9d;--bg:#f4f7fb;--light:#eef6ff;--shadow:0 18px 60px rgba(24,44,70,.045);--ok:#1f7b64;--err-bg:#a02d38;--over:#c0392b}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft Yahei",sans-serif;line-height:1.55}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
.noscript-banner{margin:16px;padding:14px 18px;border:1px solid #d3c38b;background:#fdf6e3;color:#6a5a1f;font-size:13px;border-radius:10px}
.topbar{height:76px;background:#fff;border-bottom:1px solid var(--line)}
.top-inner{max-width:1320px;padding:0 24px;margin:auto;height:100%;display:flex;align-items:center;justify-content:space-between}
.brand{display:flex;align-items:center;gap:12px}
.logo{width:41px;height:41px;border-radius:12px;color:white;background:#174e9a;font-size:19px;font-weight:900;text-align:center;line-height:41px;letter-spacing:-2px}
.logo span{color:#73d2be}
.brand b{display:block;font-size:17px;letter-spacing:-.4px}
.brand small{display:block;color:var(--muted);font-size:11px}
.top-label{font-size:10px;letter-spacing:1.4px;font-weight:800;color:#5c6c81}
.top-dot{display:inline-block;background:var(--teal);width:6px;height:6px;border-radius:50%}
.container{max-width:1320px;margin:auto;padding:36px 24px 20px}
.hero{padding:16px 0 30px}
.eyebrow{letter-spacing:2.7px;font-size:11px;color:#0e6f74;font-weight:800}
.hero h1{font-size:clamp(25px,3vw,39px);line-height:1.25;margin:8px 0 10px;letter-spacing:-1.2px}
.hero p{color:#536174;font-size:14px;margin:0}
.hero strong{color:#20548d}
.app-grid{display:grid;grid-template-columns:minmax(320px,1fr) minmax(420px,1.05fr);gap:18px;align-items:start}
.left-stack{display:grid;gap:18px}
.panel{background:#fff;border:1px solid #e6ebf1;box-shadow:var(--shadow);border-radius:17px;padding:26px}
#panel-input.drop-ongoing{outline:2px dashed var(--blue);outline-offset:-8px}
.section-title{display:flex;align-items:flex-start;gap:13px;margin-bottom:22px}
.step{font-size:13px;font-weight:800;background:#ebf3ff;color:var(--blue);padding:5px 10px;border-radius:9px}
.section-title h2{font-size:18px;margin:0 0 2px;line-height:1.4}
.section-title p{font-size:12px;color:var(--muted);margin:0}
.field-label{display:block;font-size:12px;color:#516278;font-weight:700;margin:14px 0 7px}
textarea,input:not([type=checkbox]),select{width:100%;border:1px solid #dce5ed;border-radius:9px;background:#fbfdff;color:#26364c;padding:11px 13px;font-size:13px;outline:none;font-family:inherit;resize:vertical;transition:border-color .15s,box-shadow .15s}
textarea:focus,input:focus,select:focus{border-color:#5698e5;box-shadow:0 0 0 3px #5698e525}
textarea.over-limit,input.over-limit{border-color:var(--over);background:#fff6f5}
#source{min-height:185px}
.input-footer{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:8px;color:var(--muted);font-size:11px;flex-wrap:wrap}
.upload-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.upload-button{border:none;background:none;color:#1d5baa;font-weight:750;cursor:pointer;font-size:12px;font-family:inherit;padding:2px 0}
.upload-button:hover{text-decoration:underline}
.text-button{border:none;background:none;color:#1d5baa;font-weight:650;cursor:pointer;font-size:12px;font-family:inherit;padding:2px 0}
.text-button:hover{text-decoration:underline}
.text-danger{color:#a02d38}
#reset-all.armed{color:#fff;background:var(--err-bg);border-radius:6px;padding:2px 8px}
#chars.over{color:var(--over);font-weight:700}
.upload-hint{font-size:11px;color:#5d6e83;line-height:1.7;margin:7px 0 0}
.file-list{margin-top:8px}
.file-item{display:flex;align-items:center;gap:8px;font-size:12px;color:#466b87;line-height:1.8;flex-wrap:wrap}
.file-item .file-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-item .file-size{color:var(--muted);font-size:11px;white-space:nowrap}
.file-parsing{color:var(--muted)}
.file-remove{border:1px solid #e3d5d7;background:#fff;color:#a02d38;border-radius:6px;cursor:pointer;font-size:11px;padding:1px 8px;font-family:inherit}
.file-remove:hover{background:#fbeaea}
.file-preview{flex:0 0 100%;order:9}
.file-preview summary{cursor:pointer;color:#1d5baa;font-size:11px;font-weight:700;display:inline-block}
.file-preview-body{margin-top:6px;border:1px solid #e4eaf1;background:#fbfdff;border-radius:9px;padding:9px 11px}
.file-preview-meta{font-size:11px;color:var(--muted);margin:0 0 6px}
.file-preview-text{margin:0;max-height:190px;overflow:auto;white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:11px;line-height:1.7;color:#33455c}
.files-clear{border:none;background:none;color:#a02d38;font-size:11px;cursor:pointer;font-family:inherit;text-decoration:underline;padding:0}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.tpl-preview{margin:14px 0 0}
.tpl-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.tpl-card{border:1px solid #dbe4ee;background:#fbfdff;border-radius:10px;padding:8px;cursor:pointer;font-family:inherit;text-align:center}
.tpl-card[aria-pressed="true"]{border-color:var(--blue);box-shadow:0 0 0 2px #5698e540}
.tpl-thumb{display:block;aspect-ratio:16/9;border-radius:6px;padding:7px;margin-bottom:6px}
.tpl-blue{background:#eaf1fb}.tpl-green{background:#e9f6f2}.tpl-slate{background:#eceff3}.tpl-gn{background:#f1efed}
.tpl-bar{display:block;height:8px;border-radius:3px;margin-bottom:6px}
.tpl-blue .tpl-bar{background:#1759ba}.tpl-green .tpl-bar{background:#0f8f7f}.tpl-slate .tpl-bar{background:#46586e}.tpl-gn .tpl-bar{background:#253746}
.tpl-line{display:block;height:4px;border-radius:2px;background:#b8c4d4;margin-top:4px}
.tpl-name{font-size:11px;color:#42536a;font-weight:650}
.tpl-note{font-size:11px;color:#5d6e83;margin:7px 0 0}
.tpl-details summary{cursor:pointer;color:#1d5baa;font-size:11px}
.tpl-details img{display:block;max-width:100%;margin-top:8px;border:1px solid var(--line);border-radius:8px}
.model-status{font-size:12px;padding:11px 13px;border-radius:10px;background:#eff8f5;color:var(--ok);font-weight:650}
.model-status.warn{background:#fff6e8;color:#7a4c0c}
.code-row{display:flex;gap:8px;align-items:center}
.code-row input{flex:1}
.field-hint{font-size:11px;color:#5d6e83;margin:6px 0 0;line-height:1.7}
.consent{display:flex;gap:9px;align-items:flex-start;font-size:12px;color:#42536a;margin:18px 0 12px;cursor:pointer}
.consent input{accent-color:var(--blue);margin:3px 0 0;flex-shrink:0}
.button-group{display:flex;gap:10px;flex-wrap:wrap}
.btn{border:none;padding:12px 17px;border-radius:10px;font-family:inherit;font-weight:800;font-size:12px;cursor:pointer;transition:transform .15s,opacity .15s;white-space:nowrap}
.btn:hover:not(:disabled){transform:translateY(-1px)}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn-primary{color:#fff;background:linear-gradient(110deg,#1558b7,#1478ab);box-shadow:0 5px 13px #1558b72a}
.btn-outline{background:#f2f6fc;color:#22528d;border:1px solid #dbe7f5}
.btn-dark{background:#233a57;color:#fff}
#analyze.loading::before{content:"";display:inline-block;width:11px;height:11px;margin-inline-end:8px;vertical-align:-1px;border-radius:50%;border:2px solid rgba(255,255,255,.45);border-top-color:#fff;animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
#analyze-reason:empty{display:none}
.hint{font-size:11px;color:#5d6e83;line-height:1.8;margin:13px 0 0}
.output-pills{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:18px}
.output-pills span{background:#edf3fa;border-radius:6px;font-size:10px;letter-spacing:.7px;font-weight:850;padding:5px 9px;color:#3d5c78}
.empty-state{margin:38px 0 90px;min-height:205px;display:flex;align-items:center;justify-content:center;flex-direction:column;border:1px dashed #d3deec;border-radius:12px;background:#fafcff;text-align:center;padding:25px;gap:6px}
.empty-icon{font-size:38px;color:#2e6cae}
.empty-state h3{font-size:15px;margin:8px 0 5px}
.empty-state p{font-size:12px;color:#5b6c81;margin:0;max-width:280px}
.empty-state .btn{margin-top:10px}
.only-mobile{display:none}
.restore-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:14px 0 0;padding:12px 16px;border:1px solid #d9e3c3;background:#f7fade;color:#5c5330;font-size:12px;border-radius:11px}
.restore-bar .btn{padding:8px 13px}
.draft-fields label{display:block;font-size:12px;color:#5c6b7f;font-weight:750;margin-bottom:11px}
.draft-fields label input,.draft-fields label textarea{margin-top:5px;font-weight:400}
.field-counter{display:block;font-size:11px;color:var(--muted);margin-top:3px}
.field-counter.over{color:var(--over);font-weight:700}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.mini-group h3{margin:9px 0 5px;font-size:12px;color:#476079}
.mini-group textarea{width:100%}
.draft-fields details{border:1px solid #e4eaf1;padding:12px 14px;border-radius:11px;margin:14px 0}
details summary{cursor:pointer;font-size:12px;font-weight:750;color:#265f99}
.struct-preview{border:1px solid #e4eaf1;padding:10px 14px;border-radius:11px;margin-bottom:14px}
.struct-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:10px}
.struct-slide{border:1px solid #dbe4ee;border-radius:8px;padding:10px 12px;background:#fbfdff}
.struct-slide h4{margin:0 0 6px;font-size:12px;color:#33506e}
.struct-slide ul{margin:0;padding-inline-start:16px;font-size:11px;color:#42536a}
.struct-slide li{margin:2px 0}
.export-area{display:flex;flex-wrap:wrap;gap:10px;margin-top:19px;padding-top:18px;border-top:1px solid var(--line)}
.msg-stack{position:fixed;bottom:20px;right:22px;display:flex;flex-direction:column;gap:8px;z-index:3;max-width:min(400px,90vw)}
.notice{display:flex;align-items:flex-start;gap:10px;padding:13px 16px;border-radius:11px;background:#203d62;color:white;font-size:12px;box-shadow:0 15px 35px #18304855}
.notice-error{background:var(--err-bg)}
.notice-close{margin-inline-start:auto;border:none;background:transparent;color:#fff;font-size:15px;line-height:1;cursor:pointer;padding:0 2px;flex-shrink:0}
.hidden{display:none!important}
footer{display:flex;flex-direction:column;gap:8px;color:#616e85;font-size:11px;padding:24px 5px}
.footer-main{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}
.doc-note summary{cursor:pointer;color:#42536a;font-weight:650}
.doc-note-body{margin-top:8px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 16px;line-height:1.8;color:#42536a}
.doc-note-body p{margin:0 0 8px}
.doc-note-body p:last-child{margin-bottom:0}
@media(min-width:921px){
  .result-panel{position:sticky;top:16px}
  .result-panel .export-area{position:sticky;bottom:0;background:#fff;z-index:1;padding-bottom:18px}
}
@media(max-width:920px){
  .app-grid{grid-template-columns:1fr}
  .container{padding:15px}
  .top-inner{padding:0 15px}
  .panel{padding:20px}
  .hero{padding:22px 0}
  .hero p{line-height:1.8}
  .only-desktop{display:none}
  .only-mobile{display:inline}
  .tpl-cards{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:500px){
  .form-row,.two-col,.struct-grid,.tpl-cards{grid-template-columns:1fr}
  .btn{width:100%}
  .top-label{display:none}
  .footer-main{display:block}
  .msg-stack{left:12px;right:12px;bottom:12px;max-width:none}
}
