:root{--bg: #050816;--bg-elevated: rgba(15, 23, 42, .85);--accent: #22d3ee;--accent-soft: rgba(34, 211, 238, .1);--accent-strong: #0ea5e9;--text-primary: #f9fafb;--text-secondary: #94a3b8;--border-subtle: rgba(148, 163, 184, .3);--danger: #fb7185;--card-radius: 18px;--transition-fast: .18s ease-out}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,BlinkMacSystemFont,SF Pro Text,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;background:radial-gradient(circle at top,#0b1120 0,#020617 55%,#000);color:var(--text-primary)}.app-root{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px;background:radial-gradient(circle at 0 0,rgba(56,189,248,.15),transparent 45%),radial-gradient(circle at 100% 100%,rgba(99,102,241,.15),transparent 50%)}.shell{width:100%;max-width:1120px;max-height:92vh;background:linear-gradient(145deg,#0f172af5,#050916fa);border-radius:26px;border:1px solid rgba(148,163,184,.3);box-shadow:0 22px 60px #0f172ae6,0 0 0 1px #0f172acc;overflow:hidden;display:flex;flex-direction:column}.shell-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid rgba(30,64,175,.8);background:radial-gradient(circle at 0 0,rgba(56,189,248,.2),transparent 60%),radial-gradient(circle at 100% 0,rgba(129,140,248,.2),transparent 65%),#0f172af2;-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}.brand{display:flex;align-items:center;gap:10px}.brand-logo{width:32px;height:32px;border-radius:999px;background:conic-gradient(from 160deg,#22d3ee,#38bdf8,#818cf8,#22c55e,#22d3ee);display:flex;align-items:center;justify-content:center;color:#0b1120;font-weight:700;font-size:18px;box-shadow:0 0 0 1px #0f172ae6,0 12px 30px #22d3ee99}.brand-text-main{font-size:18px;font-weight:600;letter-spacing:.03em}.brand-text-sub{font-size:12px;color:var(--text-secondary)}.shell-header-right{display:flex;align-items:center;gap:10px;font-size:11px;color:var(--text-secondary)}.chip{padding:4px 9px;border-radius:999px;border:1px solid rgba(148,163,184,.5);background:radial-gradient(circle at top left,rgba(34,211,238,.2),transparent),#0f172ae6;display:inline-flex;align-items:center;gap:6px}.chip-dot{width:6px;height:6px;border-radius:999px;background:#4ade80;box-shadow:0 0 0 4px #4ade802e}.shell-body{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);padding:12px 12px 10px;gap:12px}@media (max-width: 900px){.shell-body{grid-template-columns:minmax(0,1fr)}}.panel{background:radial-gradient(circle at top,#020617 0,#020617 52%,#000);border-radius:var(--card-radius);border:1px solid var(--border-subtle);padding:14px 14px 12px;display:flex;flex-direction:column;gap:10px;position:relative;overflow:hidden}.panel:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle at top,rgba(56,189,248,.12),transparent 55%);opacity:.7;pointer-events:none}.panel-header{display:flex;align-items:center;justify-content:space-between;position:relative;z-index:1}.panel-title-group{display:flex;flex-direction:column;gap:2px}.panel-title{font-size:14px;font-weight:600}.panel-subtitle{font-size:11px;color:var(--text-secondary)}.panel-meta{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text-secondary)}.pill{padding:2px 8px;border-radius:999px;border:1px solid rgba(148,163,184,.5);background:#0f172acc}.panel-body{position:relative;z-index:1;display:flex;flex-direction:column;gap:10px}.soup-list{display:flex;flex-direction:column;gap:8px;max-height:260px;overflow:auto;padding-right:3px}.soup-item{border-radius:14px;padding:10px 11px;cursor:pointer;border:1px solid rgba(51,65,85,.8);background:linear-gradient(135deg,#0f172af5,#0f172af5),radial-gradient(circle at top left,rgba(56,189,248,.22),transparent 60%);display:flex;flex-direction:column;gap:4px;transition:transform var(--transition-fast),box-shadow var(--transition-fast),border-color var(--transition-fast),background var(--transition-fast)}.soup-item:hover{transform:translateY(-1px);box-shadow:0 12px 30px #0f172ae6;border-color:#38bdf8b3}.soup-item.selected{border-color:var(--accent-strong);box-shadow:0 0 0 1px #38bdf8cc,0 16px 40px #082f49e6;background:linear-gradient(135deg,#0f172af5,#082f49fa),radial-gradient(circle at top left,rgba(56,189,248,.2),transparent 60%)}.soup-title-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.soup-title{font-size:13px;font-weight:600}.soup-difficulty{font-size:11px;color:var(--text-secondary);display:flex;align-items:center;gap:2px}.difficulty-dot{width:6px;height:6px;border-radius:999px;background:#22c55e}.difficulty-dot.medium{background:#eab308}.difficulty-dot.hard{background:#fb7185}.soup-tags{display:flex;flex-wrap:wrap;gap:5px}.tag{padding:1px 7px;border-radius:999px;background:#0f172ae6;border:1px solid rgba(148,163,184,.6);font-size:10px;color:var(--text-secondary)}.soup-opening-preview{font-size:11px;color:var(--text-secondary);line-height:1.4;max-height:36px;overflow:hidden;text-overflow:ellipsis}.opening-card{border-radius:14px;border:1px dashed rgba(148,163,184,.7);padding:10px 11px;background:#0f172ae6;font-size:12px;color:var(--text-secondary);line-height:1.5}.opening-title{font-size:12px;font-weight:500;color:var(--text-primary);margin-bottom:4px}.chat-container{display:flex;flex-direction:column;gap:10px;height:100%}.chat-log{flex:1;min-height:180px;max-height:260px;overflow:auto;padding:10px;border-radius:12px;background:radial-gradient(circle at top,#020617 0,#020617 55%,#020617);border:1px solid rgba(30,64,175,.7);box-shadow:inset 0 0 0 1px #0f172ae6}.chat-message{margin-bottom:8px;display:flex}.chat-message.user{justify-content:flex-end}.chat-bubble{max-width:80%;padding:7px 10px;border-radius:12px;font-size:12px;line-height:1.5;position:relative}.chat-bubble.user{background:linear-gradient(135deg,#22d3ee,#0ea5e9);color:#0b1120;border-bottom-right-radius:4px}.chat-bubble.host{background:#0f172af2;border:1px solid rgba(148,163,184,.6);border-bottom-left-radius:4px;color:var(--text-primary)}.chat-meta{font-size:10px;color:var(--text-secondary);margin-bottom:2px}.chat-input-area{display:flex;align-items:flex-end;gap:8px}.chat-input-box{flex:1;position:relative}.chat-textarea{width:100%;min-height:44px;max-height:92px;resize:none;border-radius:12px;border:1px solid rgba(51,65,85,.9);background:#0f172af5;color:var(--text-primary);font-size:13px;padding:8px 10px;outline:none;line-height:1.5}.chat-textarea:focus{border-color:var(--accent-strong);box-shadow:0 0 0 1px #38bdf8b3}.chat-input-hint{position:absolute;right:8px;bottom:4px;font-size:10px;color:var(--text-secondary)}.btn{border-radius:999px;border:none;padding:8px 14px;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:transform var(--transition-fast),box-shadow var(--transition-fast),background var(--transition-fast),opacity .12s ease-out}.btn-primary{background:linear-gradient(135deg,#22d3ee,#0ea5e9);color:#0b1120;box-shadow:0 16px 40px #22d3ee8c,0 0 0 1px #0f172ae6}.btn-primary:hover{transform:translateY(-.5px);box-shadow:0 18px 46px #0ea5e9b3,0 0 0 1px #0f172a}.btn-ghost{background:#0f172ae6;border:1px solid rgba(148,163,184,.8);color:var(--text-secondary)}.btn-ghost:hover{background:#0f172a;border-color:#94a3b8}.btn:disabled{opacity:.55;cursor:not-allowed;box-shadow:none;transform:none}.footer{padding:6px 12px 8px;border-top:1px solid rgba(15,23,42,.9);background:radial-gradient(circle at bottom,#0f172af5,#020617);display:flex;justify-content:space-between;align-items:center;font-size:10px;color:var(--text-secondary)}.footer a{color:var(--accent);text-decoration:none}.footer a:hover{text-decoration:underline}.status-text{display:flex;align-items:center;gap:4px}.progress-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;border-radius:999px;border:1px solid rgba(148,163,184,.6);background:#0f172af2;font-size:10px}.progress-label{color:var(--text-secondary)}.progress-track{width:80px;height:4px;border-radius:999px;background:#0f172ae6;overflow:hidden}.progress-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,#22d3ee,#0ea5e9)}.progress-value{color:var(--accent);font-weight:500}@media (max-width: 900px){.app-root{padding:8px}}.status-dot{width:6px;height:6px;border-radius:999px;background:#facc15}.status-dot.ok{background:#22c55e}.status-dot.error{background:var(--danger)}.fade-in{animation:fadeIn .18s ease-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}
