:root{--paper:#f6f3ec;--paper-2:#fbfaf6;--frame:#e9e5da;--ink:#1c1b18;--muted:#6b675e;--faint:#9a958a;--hairline:#ddd8ca;--line:#cfc9b8;--accent:#b4462b;--ok:#1f7a44;--err:#b3402a;--serif:Georgia,"Times New Roman","Songti SC","STSong","Noto Serif SC","SimSun",serif}*{box-sizing:border-box}body,html{height:100%}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,Segoe UI,sans-serif;background:var(--frame);color:var(--ink);line-height:1.7;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--accent)}.page{min-height:100%}.err-banner{position:fixed;top:12px;left:50%;transform:translateX(-50%);z-index:999;display:flex;align-items:center;gap:8px;max-width:min(92vw,560px);padding:10px 14px;border-radius:12px;background:#7f1d1d;color:#fff;font-size:13px;line-height:1.4;box-shadow:0 8px 24px rgba(127,29,29,.28)}.err-text{flex:1 1;word-break:break-word}.err-close,.err-retry{flex-shrink:0;border:none;border-radius:8px;cursor:pointer;font:inherit;background:rgba(255,255,255,.16);color:#fff;padding:5px 10px;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.err-close:active,.err-retry:active{background:rgba(255,255,255,.3)}.shell{width:100%;min-height:100vh;display:flex;flex-direction:column}.paper{flex:1 1;display:flex;flex-direction:column;background:var(--paper)}.home-grid{flex:1 1;display:grid;grid-template-columns:clamp(220px,24vw,380px) 1fr;grid-template-rows:minmax(0,1fr);height:100vh;min-height:0;overflow:hidden}@media (min-width:901px){.shell{height:100vh;height:100dvh;overflow:hidden}.paper,.shell{min-height:0}.home-grid{height:100%}.hero{scrollbar-width:none;-ms-overflow-style:none}.hero::-webkit-scrollbar{display:none}}.hero{padding:clamp(22px,2.4vw,40px);border-right:1px solid var(--hairline);display:flex;flex-direction:column;align-items:flex-start;min-width:0;min-height:0;overflow-y:auto}.overline{font-size:12px;font-weight:500;line-height:1.5;letter-spacing:.2em;text-transform:uppercase;color:var(--accent)}.name{font-family:var(--serif);font-size:clamp(32px,4vw,50px);font-weight:600;margin:clamp(14px,1.8vw,22px) 0 0;letter-spacing:.02em;line-height:1.15}.headline{color:var(--muted);font-size:clamp(15px,1.5vw,17px);font-weight:400;line-height:1.6;margin:clamp(8px,1vw,12px) 0 0}.tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:clamp(16px,1.8vw,24px)}.tag{border:1px solid var(--line);border-radius:2px;padding:4px 13px;font-size:13px;line-height:1.5;color:#4a463c;letter-spacing:.03em}.base{width:100%;margin-top:clamp(14px,1.6vw,18px);border-top:1px solid var(--hairline);padding-top:clamp(12px,1.3vw,16px);border-bottom:1px solid var(--hairline);padding-bottom:clamp(12px,1.3vw,16px)}.base-item{display:flex;gap:12px;align-items:center;padding:clamp(5px,.55vw,7px) 0;border-bottom:1px solid #eee9dc;font-size:13px;line-height:1.5}.base-item .k{flex:0 0 64px;color:var(--accent);font-weight:600;letter-spacing:.04em;white-space:nowrap}.base-item .v{flex:1 1;min-width:0;color:#3a372f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.base-item .wechat-link{background:transparent;border:1px solid var(--line);border-radius:2px;color:var(--accent);font-size:12px;font-family:inherit;padding:3px 10px;cursor:pointer;letter-spacing:.04em;line-height:1.5;white-space:nowrap;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:border-color .15s,color .15s}.base-item .wechat-link:hover{border-color:var(--accent);color:var(--accent)}.base-item:last-child{border-bottom:none}.quick{width:100%;margin-top:auto;padding-top:clamp(14px,1.8vw,22px)}.quick-label{font-size:12px;font-weight:500;line-height:1.5;color:var(--faint);letter-spacing:.12em;text-transform:uppercase;margin-bottom:10px}.quick-viewport{overflow:hidden}.quick-viewport.is-scrolling{height:148px}.quick-vtrack{will-change:transform}.quick-vgroup,.quick-vtrack{display:flex;flex-direction:column;gap:8px}.quick-vgroup{margin:0;padding:0;list-style:none;flex-shrink:0}.quick .chip{display:block;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left;background:transparent;border:1px solid var(--line);border-radius:2px;padding:12px 13px;font-size:12px;font-family:inherit;line-height:1.5;font-weight:500;color:var(--ink);cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:border-color .15s,color .15s,background .15s}.quick .chip:hover{border-color:var(--accent);color:var(--accent)}.quick .chip:disabled{opacity:.45;cursor:default}.hero-foot{padding-top:clamp(16px,2vw,28px);font-size:12px;font-weight:500;line-height:1.5;color:var(--faint);letter-spacing:.1em;text-transform:uppercase}.qr-overlay{position:fixed;inset:0;background:rgba(28,27,24,.45);display:flex;align-items:center;justify-content:center;z-index:50}.qr-card{width:min(90vw,320px);background:var(--paper-2);border:1px solid var(--hairline);border-radius:6px;padding:24px;position:relative;text-align:center;box-shadow:0 18px 40px rgba(28,27,24,.28)}.qr-close{position:absolute;top:8px;right:12px;border:none;background:transparent;font-size:20px;line-height:1;color:var(--faint);cursor:pointer;padding:4px}.qr-close:hover{color:var(--ink)}.qr-title{font-family:var(--serif);font-size:17px;font-weight:600;letter-spacing:.04em;margin-bottom:14px}.qr-img{width:240px;height:240px;object-fit:contain;border:1px solid var(--hairline);border-radius:12px;background:#fff}.qr-hint{margin-top:12px;font-size:12px;color:var(--muted)}.hero-foot .dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--ok);margin-right:8px;vertical-align:1px}.chat-col{display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--paper-2)}.chat-head{display:flex;align-items:center;gap:8px;padding:clamp(13px,1.2vw,18px) clamp(18px,2.2vw,32px);border-bottom:1px solid #eee9dc;font-size:14px;font-weight:600;letter-spacing:.02em}.chat-head .dot{width:7px;height:7px;border-radius:50%;background:var(--ok)}.chat-box{flex:1 1;display:flex;flex-direction:column;gap:22px;min-height:0;overflow-y:auto;padding:clamp(16px,2vw,28px)}.empty{color:var(--faint);text-align:center;padding:48px 10px;font-size:15px}.msg{max-width:min(76%,720px);font-size:clamp(14px,1.25vw,16px);line-height:1.7;white-space:pre-wrap;word-break:break-word}.msg.user{align-self:flex-end;background:var(--ink);color:var(--paper);padding:11px 15px}.msg.assistant{align-self:flex-start;border-left:2px solid var(--ink);padding-left:15px;color:#2a2824}.type-cursor{display:inline-block;width:2px;height:1.05em;margin-left:2px;vertical-align:-.15em;background:var(--ink);animation:type-blink 1s steps(1) infinite}@keyframes type-blink{0%,to{opacity:1}50%{opacity:0}}.bar{flex-shrink:0;display:flex;gap:8px;align-items:center;background:#fff;border:1px solid var(--hairline);border-radius:16px;padding:8px;margin:0 clamp(18px,2.2vw,32px) clamp(18px,2.2vw,26px);box-shadow:0 12px 30px rgba(80,66,40,.14)}.bar:focus-within{border-color:var(--accent)}.bar input,.bar textarea{flex:1 1;min-width:0;border:none;background:transparent;padding:10px 14px;font-size:clamp(13.5px,1.2vw,15px);font-family:inherit;outline:none;color:var(--ink)}.bar textarea{display:block;resize:none;overflow-y:auto;max-height:120px;line-height:1.5;scrollbar-width:none}.bar textarea::-webkit-scrollbar{display:none;width:0;height:0}.bar input::placeholder,.bar textarea::placeholder{color:var(--faint)}.bar button{align-self:flex-end;background:var(--ink);color:var(--paper);border:none;border-radius:11px;padding:12px clamp(18px,1.8vw,24px);font-size:13.5px;cursor:pointer;letter-spacing:.08em;position:relative;z-index:2;touch-action:manipulation;-webkit-tap-highlight-color:transparent}@media (hover:none){.bar button:active{transform:scale(.96)}}.bar button:disabled{background:#8b867a;cursor:not-allowed}.bar button:disabled:active{transform:none}.bar-scroll{align-self:stretch;flex-shrink:0;width:8px;border-radius:4px;position:relative;cursor:pointer;transition:opacity .15s}.bar-scroll.is-idle{opacity:0;pointer-events:none}.bar-scroll-thumb{position:absolute;top:0;left:0;width:8px;border-radius:4px;background:var(--line);min-height:24px;touch-action:none}.bar-scroll-thumb:hover{background:var(--faint)}.admin-head{padding:clamp(24px,2.6vw,40px) clamp(20px,2.4vw,40px) clamp(18px,2vw,28px);border-bottom:1px solid var(--hairline)}.admin-head h1{font-family:var(--serif);font-size:clamp(24px,2.4vw,30px);font-weight:600;margin:0}.admin-head .sub{color:var(--muted);font-size:13px;margin:6px 0 0}.admin-body{flex:1 1;min-height:0;overflow-y:auto;padding:clamp(8px,.8vw,12px) clamp(20px,2.4vw,40px) clamp(24px,2.6vw,36px)}.admin-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:clamp(20px,3vw,44px);gap:clamp(20px,3vw,44px);align-items:start}.col-main,.col-side{min-width:0}.sec-head{font-family:var(--serif);font-size:15px;letter-spacing:.06em;color:var(--accent);border-bottom:1px solid var(--hairline);padding-bottom:9px;margin:24px 0 6px}.sec-head span{color:var(--muted);margin-right:6px}.form label{display:block;font-size:12.5px;color:var(--muted);margin:14px 0 5px}.base-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:0 20px;gap:0 20px}.qr-upload-field{grid-column:1/-1;margin-top:2px}.qr-upload-empty{width:100%;border:1px dashed var(--line);border-radius:4px;background:transparent;padding:18px 12px;font-size:13px;color:var(--muted);cursor:pointer;text-align:center;font-family:inherit;transition:border-color .15s,color .15s}.qr-upload-empty:hover{border-color:var(--accent);color:var(--accent)}.qr-upload-has{display:flex;align-items:center;gap:14px}.qr-upload-thumb{width:96px;height:96px;object-fit:contain;border:1px solid var(--line);border-radius:8px;background:#fff}.qr-upload-actions{display:flex;flex-direction:column;gap:8px}.form input,.form textarea{width:100%;border:1px solid var(--line);background:var(--paper-2);padding:9px 12px;font-size:13.5px;font-family:inherit;border-radius:2px;outline:none;color:var(--ink);transition:border-color .15s}.form input:focus,.form textarea:focus{border-color:var(--accent)}.form textarea{resize:vertical;min-height:60px;line-height:1.6}.hint{font-size:12px;color:var(--faint);margin-top:5px}.faq-list{margin-top:8px}.faq-item{border:1px solid var(--hairline);padding:12px 14px;margin-top:12px;background:var(--paper-2)}.faq-item .row{display:flex;gap:8px;align-items:center}.faq-item .row input{flex:1 1}.faq-item input,.faq-item textarea{width:100%;border:1px solid var(--line);background:#fff;padding:8px 11px;font-size:13px;font-family:inherit;border-radius:2px;margin-top:8px;outline:none;color:var(--ink);transition:border-color .15s}.faq-item input:focus,.faq-item textarea:focus{border-color:var(--accent)}.faq-item textarea{min-height:46px;resize:vertical}.btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 22px;font-size:13.5px;font-family:inherit;cursor:pointer;border-radius:2px;border:1px solid transparent;text-decoration:none;letter-spacing:.04em;line-height:1.2;transition:border-color .15s,background .15s,color .15s}.btn-primary{background:var(--ink);color:var(--paper);border-color:var(--ink)}.btn-primary:hover{background:#000}.btn-ghost{background:transparent;color:var(--ink);border-color:var(--line)}.btn-ghost:hover{border-color:var(--ink)}.btn-sm{padding:6px 13px;font-size:12.5px}.actions{display:flex;gap:10px;margin-top:22px}.status{margin-top:12px;font-size:13px}.status.ok{color:var(--ok)}.status.err{color:var(--err)}.admin-tabs{display:flex;gap:4px;padding:0 clamp(20px,2.4vw,40px);border-bottom:1px solid var(--hairline);flex-wrap:wrap}.admin-tab{background:transparent;border:1px solid transparent;border-bottom:none;font-family:inherit;font-size:13.5px;font-weight:500;letter-spacing:.04em;color:var(--muted);padding:11px 20px;cursor:pointer;border-radius:6px 6px 0 0;transition:color .15s,background .15s,border-color .15s}.admin-tab:hover{color:var(--ink);background:var(--paper-2)}.admin-tab.active{color:var(--accent);background:var(--paper);border-color:var(--hairline);border-bottom-color:var(--paper);margin-bottom:-1px;font-weight:600}.admin-toolbar{position:-webkit-sticky;position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:10px;padding:10px clamp(20px,2.4vw,40px);background:var(--paper);border-bottom:1px solid var(--hairline);box-shadow:0 2px 8px rgba(28,27,24,.05)}.admin-toolbar .status{margin-top:0;font-size:12.5px}.admin-body-faq,.admin-body-faq .faq-tab{display:flex;flex-direction:column;flex:1 1;min-height:0}.admin-body-faq .faq-list{flex:1 1;min-height:0;overflow-y:auto;padding-right:8px}.admin-body-faq .faq-actions{flex-shrink:0;margin-top:12px}.chats{margin-top:clamp(20px,2.4vw,32px)}.chat-groups{display:flex;flex-direction:column;gap:12px}.chat-group{border:1px solid var(--hairline);border-radius:6px;background:var(--paper-2);overflow:hidden}.chat-group-head{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;background:transparent;border:none;font-family:inherit;font-size:13.5px;color:var(--ink);padding:12px 16px;cursor:pointer;text-align:left}.chat-group-head:hover{background:#f1ede2}.chat-group-title{display:inline-flex;align-items:center;gap:8px;font-weight:600;min-width:0}.chat-group-title .dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex-shrink:0}.chat-group-session{font-style:normal;font-weight:400;font-size:12px;color:var(--faint);border:1px solid var(--hairline);border-radius:3px;padding:1px 7px}.chat-group-meta{display:inline-flex;align-items:center;gap:10px;font-size:12px;color:var(--muted);white-space:nowrap}.chat-group-caret{color:var(--faint);font-size:12px}.chat-group .chat-log{border:none;border-top:1px solid var(--hairline);border-radius:0;max-height:320px}.analysis{margin-top:clamp(20px,2.4vw,32px)}.analysis-row{border:1px solid var(--hairline);border-radius:6px;background:var(--paper-2);padding:12px 16px;margin-bottom:10px}.analysis-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.analysis-label{display:inline-flex;align-items:center;gap:8px;font-weight:600;font-size:13.5px;min-width:0}.analysis-kind{font-style:normal;font-size:11px;font-weight:500;color:var(--accent);border:1px solid;border-radius:3px;padding:0 6px;line-height:1.6}.analysis-kind-topic{color:#8a6a2f}.analysis-kind-other{color:var(--faint)}.analysis-count{font-size:12.5px;color:var(--muted);white-space:nowrap}.analysis-bar{height:6px;border-radius:3px;background:#ece7da;margin:9px 0 7px;overflow:hidden}.analysis-bar-inner{height:100%;border-radius:3px;background:var(--accent)}.analysis-examples{font-size:12px;color:var(--muted);line-height:1.6}.analysis-keywords{margin-top:18px;border-top:1px solid var(--hairline);padding-top:14px}.analysis-kw-label{font-size:12px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);margin-bottom:10px}.analysis-kw-chips{display:flex;flex-wrap:wrap;gap:8px}.kw-chip{border:1px solid var(--line);border-radius:3px;padding:3px 11px;font-size:12.5px;color:var(--ink);background:#fff}.kw-chip em{font-style:normal;color:var(--accent);font-weight:600}.chats-toolbar{display:flex;align-items:center;gap:10px;margin:10px 0 12px}.chats-count{font-size:12px;color:var(--muted)}.chats-empty{color:var(--faint);text-align:center;padding:28px 10px;font-size:14px}.chat-log{max-height:420px;overflow-y:auto;background:var(--paper-2);border:1px solid var(--hairline);border-radius:6px;padding:clamp(12px,1.5vw,20px);gap:14px}.chat-line,.chat-log{display:flex;flex-direction:column}.chat-line{max-width:82%}.chat-line.user{align-self:flex-end;align-items:flex-end}.chat-line.assistant{align-self:flex-start;align-items:flex-start}.chat-bubble{font-size:clamp(13.5px,1.2vw,15px);line-height:1.6;white-space:pre-wrap;word-break:break-word}.chat-line.user .chat-bubble{background:var(--ink);color:var(--paper);padding:9px 13px;border-radius:8px}.chat-line.assistant .chat-bubble{border-left:2px solid var(--ink);padding-left:13px;color:#2a2824}.chat-time{font-size:11px;color:var(--faint);margin-top:4px}.login-wrap{flex:1 1;display:flex;align-items:center;justify-content:center;padding:clamp(24px,4vw,48px)}.login-card{width:min(100%,340px);background:var(--paper-2);border:1px solid var(--hairline);border-radius:4px;padding:clamp(24px,3vw,36px);display:flex;flex-direction:column;gap:14px}.login-title{font-family:var(--serif);font-size:clamp(22px,2.4vw,26px);font-weight:600;letter-spacing:.04em}.login-sub{font-size:13px;color:var(--muted);margin-top:-8px}.login-input{width:100%;border:1px solid var(--line);background:#fff;padding:11px 13px;font-size:14px;font-family:inherit;border-radius:2px;outline:none;color:var(--ink);transition:border-color .15s}.login-input:focus{border-color:var(--accent)}.login-error{font-size:13px;color:var(--err)}.login-btn{width:100%}.mobile-info-bar{display:none}@media (max-width:900px){.home-grid{display:flex;flex-direction:column;height:100vh;height:100dvh;min-height:0}.mobile-info-bar{display:flex;align-items:center;gap:8px;flex-shrink:0;width:100%;padding:12px 16px;background:var(--paper);border:none;border-bottom:1px solid var(--hairline);cursor:pointer;font:inherit;text-align:left;color:var(--ink);touch-action:manipulation;-webkit-tap-highlight-color:transparent}.mobile-info-bar:active{background:var(--paper-2)}.mobile-info-name{font-weight:600;font-size:14px;letter-spacing:.02em}.mobile-info-sub{font-size:12px;color:var(--muted)}.mobile-info-caret{margin-left:auto;font-size:12px;font-weight:600;color:var(--accent)}.hero{border-right:none;border-bottom:1px solid var(--hairline);overflow-y:auto;flex-shrink:0;max-height:45vh}.hero.is-mobile-collapsed{display:none}.chat-col{flex:1 1;min-height:0;max-height:none}.admin-grid{grid-template-columns:1fr;gap:0}}@media (max-width:480px){.shell{padding:0}.hero{padding:24px 18px 18px}.name{font-size:30px}.headline{font-size:14px}.chat-box{min-height:0;max-height:none}.msg{max-width:88%}.bar{margin:0 12px 14px;border-radius:14px;position:relative;z-index:1}.hero-foot{display:none}.admin-head{padding:22px 20px 18px}.admin-body{padding:4px 20px 24px}.base-grid{grid-template-columns:1fr}}