:root {
  --ink: #17352e;
  --ink-soft: #5b6f68;
  --green: #205d4c;
  --green-dark: #123f34;
  --mint: #dfeee5;
  --mint-light: #f0f6f1;
  --lime: #c9e56e;
  --amber: #d99c43;
  --red: #a94e47;
  --paper: #fbfcf8;
  --canvas: #f2f4ed;
  --line: #d9e1d8;
  --white: #fff;
  --topbar: 72px;
  --shadow: 0 18px 55px rgba(31, 61, 51, .09);
  font-family: Inter, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
  color-scheme: light;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { margin: 0; color: var(--ink); background: var(--canvas); line-height: 1.55; }
button, input, select, textarea { font: inherit; color: inherit; }
button, a { -webkit-tap-highlight-color: transparent; }
button:focus-visible, a:focus-visible, textarea:focus-visible, input:focus-visible, select:focus-visible { outline: 3px solid rgba(32,93,76,.2); outline-offset: 2px; }
[hidden] { display: none !important; }
.visually-hidden { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }
.skip-link { position: fixed; z-index: 500; top: 8px; left: 8px; padding: 9px 14px; color: white; background: var(--ink); border-radius: 8px; transform: translateY(-150%); }
.skip-link:focus { transform: none; }
.portal-topbar { position: fixed; inset: 0 0 auto; z-index: 100; height: var(--topbar); display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; padding: 0 28px; border-bottom: 1px solid var(--line); background: rgba(251,252,248,.94); backdrop-filter: blur(14px); }
.portal-brand { display: inline-flex; align-items: center; gap: 11px; width: fit-content; color: inherit; text-decoration: none; }
.brand-symbol { display: grid; place-items: center; width: 42px; height: 42px; color: white; background: var(--green); border-radius: 13px; font: 500 18px Georgia, "Songti SC", serif; }
.portal-brand > span:last-child { display: flex; flex-direction: column; line-height: 1.05; }
.portal-brand strong { font: 600 21px Georgia, "Songti SC", serif; letter-spacing: .05em; }
.portal-brand small { margin-top: 5px; color: #758680; font-size: 7px; font-weight: 800; letter-spacing: .14em; }
.topbar-center { color: #71817b; font-size: 10px; }
.topbar-actions { display: flex; justify-content: flex-end; align-items: center; gap: 12px; }
.service-pill { display: flex; align-items: center; gap: 7px; color: var(--ink-soft); font-size: 12px; }
.service-pill i { width: 7px; height: 7px; border-radius: 50%; background: #aab6b1; box-shadow: 0 0 0 4px rgba(170,182,177,.14); }
.service-pill.online i { background: #68ac78; box-shadow: 0 0 0 4px rgba(104,172,120,.14); }
.service-pill.offline i { background: var(--red); }
.quiet-button, .back-button { min-height: 36px; padding: 0 13px; border: 1px solid #ccd7ce; border-radius: 9px; color: var(--green); background: white; cursor: pointer; font-size: 10px; font-weight: 750; }
.quiet-button:hover, .back-button:hover { border-color: #93ae9f; background: var(--mint-light); }
main { min-height: 100vh; padding-top: var(--topbar); }
.launcher { max-width: 1580px; margin: 0 auto; padding: 28px clamp(18px,3.2vw,54px) 60px; }
.launcher-layout { display: grid; grid-template-columns: minmax(360px,420px) minmax(0,1fr); align-items: start; gap: 24px; }
.launcher-assistant { position: sticky; top: calc(var(--topbar) + 28px); display: flex; flex-direction: column; height: calc(100dvh - var(--topbar) - 56px); min-height: 590px; overflow: hidden; border: 1px solid var(--line); border-radius: 24px; background: #f8faf5; box-shadow: var(--shadow); }
.launcher-chat-header { display: flex; align-items: center; gap: 13px; flex: 0 0 auto; padding: 22px; border-bottom: 1px solid var(--line); background: rgba(251,252,248,.96); }
.launcher-agent-avatar { display: grid; place-items: center; flex: 0 0 44px; width: 44px; height: 44px; border-radius: 14px; color: white; background: var(--green); font: 700 11px Georgia, serif; box-shadow: 0 8px 20px rgba(32,93,76,.17); }
.launcher-chat-header .eyebrow { margin-bottom: 3px; font-size: 8px; }
.launcher-chat-header h2 { margin: 0; font: 600 20px Georgia, "Songti SC", serif; }
.launcher-chat-header span:last-child { display: block; margin-top: 3px; color: var(--ink-soft); font-size: 11px; }
.launcher-message-list { flex: 1 1 auto; min-height: 0; padding: 22px; overflow-y: auto; scroll-behavior: smooth; }
.launcher-message-list .portal-chat-message { margin-bottom: 16px; }
.launcher-recommendations { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.launcher-recommendations button { min-height: 36px; padding: 0 12px; border: 1px solid var(--green); border-radius: 9px; color: white; background: var(--green); cursor: pointer; font-size: 12px; font-weight: 800; }
.launcher-quick-actions { display: flex; flex-wrap: wrap; gap: 7px; flex: 0 0 auto; padding: 12px 18px; border-top: 1px solid var(--line); }
.launcher-quick-actions button { min-height: 33px; padding: 0 10px; border: 1px solid #cad8ce; border-radius: 99px; color: var(--green); background: white; cursor: pointer; font-size: 11px; font-weight: 750; }
.launcher-chat-form { flex: 0 0 auto; padding: 0 16px 16px; }
.launcher-chat-input-shell { display: grid; grid-template-columns: minmax(0,1fr) auto; align-items: end; gap: 8px; padding: 7px; border: 1px solid #cad6cd; border-radius: 14px; background: white; box-shadow: 0 8px 28px rgba(27,57,48,.07); }
.launcher-chat-input-shell:focus-within { border-color: var(--green); box-shadow: 0 0 0 3px rgba(32,93,76,.1); }
#launcherChatInput { min-width: 0; min-height: 52px; max-height: 130px; padding: 9px 6px; border: 0; outline: 0; resize: none; background: transparent; font-size: 14px; line-height: 1.5; }
#launcherChatSendBtn { justify-self: end; min-width: 62px; min-height: 42px; padding: 0 13px; border: 0; border-radius: 10px; color: white; background: var(--green); cursor: pointer; font-size: 12px; font-weight: 800; white-space: nowrap; }
.launcher-chat-form > p { margin: 7px 4px 0; color: #89948f; font-size: 10px; }
.launcher-catalog { min-width: 0; }
.launcher-hero { display: flex; justify-content: space-between; align-items: flex-end; gap: 32px; min-height: 265px; padding: clamp(32px,4vw,52px); color: white; background: radial-gradient(circle at 82% 18%, rgba(201,229,110,.12), transparent 25%), linear-gradient(130deg, #123f34, #1d5949); border-radius: 26px; box-shadow: var(--shadow); }
.eyebrow { margin: 0 0 9px; color: #71837c; font-size: 9px; font-weight: 850; letter-spacing: .18em; text-transform: uppercase; }
.launcher-hero .eyebrow { color: var(--lime); }
.hero-copy h1 { max-width: 760px; margin: 0; font: 500 clamp(32px,3.7vw,52px)/1.18 Georgia, "Songti SC", serif; letter-spacing: -.025em; }
.hero-copy > p:last-child { max-width: 720px; margin: 22px 0 0; color: rgba(255,255,255,.72); font-size: 14px; }
.hero-assurance { flex: 0 0 auto; display: grid; grid-template-columns: repeat(3,1fr); overflow: hidden; border: 1px solid rgba(255,255,255,.15); border-radius: 15px; background: rgba(255,255,255,.06); }
.hero-assurance span { min-width: 104px; padding: 17px 12px; color: rgba(255,255,255,.56); font-size: 8px; text-align: center; }
.hero-assurance span + span { border-left: 1px solid rgba(255,255,255,.13); }
.hero-assurance strong { display: block; margin-bottom: 3px; color: var(--lime); font: 500 16px Georgia, serif; }
.launcher-heading { display: flex; justify-content: space-between; align-items: end; gap: 30px; margin: 34px 0 18px; }
.launcher-heading h2 { margin: 0; font: 500 clamp(26px,3vw,38px) Georgia, "Songti SC", serif; }
.launcher-heading > p { max-width: 500px; margin: 0; color: var(--ink-soft); font-size: 13px; }
.capability-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 15px; }
.capability-card { position: relative; display: flex; flex-direction: column; min-height: 245px; padding: 23px; overflow: hidden; border: 1px solid var(--line); border-radius: 20px; background: rgba(255,255,255,.84); box-shadow: 0 10px 30px rgba(33,61,52,.045); transition: .2s ease; }
.capability-card:nth-child(n) { grid-column: auto; }
.capability-card:last-child { grid-column: 1 / -1; }
.capability-card:hover { border-color: #a6bcae; transform: translateY(-3px); box-shadow: var(--shadow); }
.capability-card.is-recommended { border-color: #7d9f55; box-shadow: 0 0 0 3px rgba(125,159,85,.13), var(--shadow); }
.capability-card.is-recommended .capability-status::after { content: " · 推荐"; }
.capability-card::after { content: ""; position: absolute; right: -35px; bottom: -55px; width: 150px; height: 150px; border-radius: 50%; background: var(--mint-light); }
.card-top { position: relative; z-index: 1; display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.capability-icon { display: grid; place-items: center; width: 48px; height: 48px; border-radius: 14px; color: var(--green); background: var(--mint); font: 700 11px Georgia, serif; }
.capability-status, .status-badge { display: inline-flex; align-items: center; min-height: 25px; padding: 0 9px; border-radius: 99px; font-size: 11px; font-weight: 800; }
.status-ready { color: #25643e; background: #e1f2df; }
.capability-card h3 { position: relative; z-index: 1; margin: 27px 0 8px; font: 600 22px Georgia, "Songti SC", serif; }
.capability-card > p { position: relative; z-index: 1; flex: 1; margin: 0; color: var(--ink-soft); font-size: 13px; }
.capability-card button { position: relative; z-index: 1; display: inline-flex; align-items: center; justify-content: space-between; width: 100%; margin-top: 22px; padding: 0; border: 0; color: var(--green); background: transparent; cursor: pointer; font-size: 13px; font-weight: 800; text-align: left; }
.capability-card button::after { content: "→"; display: grid; place-items: center; width: 32px; height: 32px; color: white; background: var(--green); border-radius: 9px; }
.capability-skeleton { min-height: 250px; border-radius: 20px; background: linear-gradient(110deg,#eef1eb 30%,#f7f8f4 50%,#eef1eb 70%); background-size: 200% 100%; animation: shimmer 1.3s linear infinite; }
@keyframes shimmer { to { background-position: -200% 0; } }
.platform-note { display: flex; gap: 15px; margin-top: 28px; padding: 18px 21px; border: 1px solid #e4d6bd; border-radius: 15px; color: #665236; background: #fbf5e9; }
.note-icon { display: grid; place-items: center; flex: 0 0 28px; height: 28px; border-radius: 50%; color: white; background: var(--amber); font-weight: 900; }
.platform-note strong { font-size: 13px; }
.platform-note p { margin: 4px 0 0; font-size: 12px; }
.capability-workspace { display: grid; grid-template-columns: minmax(410px,38vw) minmax(0,1fr); min-height: calc(100vh - var(--topbar)); }
.workspace-side { position: sticky; top: var(--topbar); display: flex; flex-direction: column; height: calc(100vh - var(--topbar)); overflow: hidden; border-right: 1px solid var(--line); background: #f8faf5; }
.back-button { align-self: flex-start; display: inline-flex; align-items: center; gap: 8px; border: 0; background: transparent; }
.portal-chat-navigation { flex: 0 0 auto; padding: 18px 22px 12px; }
.portal-chat-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 14px; padding: 7px 22px 18px; border-bottom: 1px solid var(--line); }
.module-identity { display: flex; align-items: center; min-width: 0; margin: 0; }
.module-identity .capability-icon { flex: 0 0 auto; margin-right: 11px; }
.module-identity h2 { margin: 0; font: 600 18px Georgia, "Songti SC", serif; }
.module-identity p { display: none; }
.portal-chat-status { display: inline-flex; align-items: center; gap: 5px; flex: 0 0 auto; color: #74837e; font-size: 12px; }
.portal-chat-status i { width: 6px; height: 6px; border-radius: 50%; background: var(--lime); box-shadow: 0 0 0 3px rgba(183,224,74,.15); }
.portal-message-list { flex: 1 1 auto; min-height: 0; padding: 22px; overflow-y: auto; scroll-behavior: smooth; }
.portal-chat-message { display: flex; align-items: flex-start; gap: 9px; width: 100%; margin-bottom: 15px; }
.portal-chat-message.user { justify-content: flex-end; }
.portal-chat-avatar { display: grid; place-items: center; flex: 0 0 29px; width: 29px; height: 29px; border-radius: 9px; color: white; background: var(--green); font: 700 8px Georgia, serif; }
.portal-chat-bubble { max-width: calc(100% - 45px); padding: 11px 13px; border: 1px solid var(--line); border-radius: 4px 13px 13px; color: var(--ink-soft); background: white; box-shadow: 0 5px 16px rgba(33,61,52,.04); font-size: 14px; line-height: 1.65; overflow-wrap: anywhere; }
.portal-chat-message.user .portal-chat-bubble { border-color: var(--green); border-radius: 13px 4px 13px 13px; color: white; background: var(--green); }
.portal-chat-bubble strong { display: block; margin-bottom: 4px; color: var(--ink); font-size: 13px; }
.portal-chat-message.user .portal-chat-bubble strong { color: white; }
.portal-chat-source { display: block; margin-top: 7px; padding-top: 7px; border-top: 1px solid var(--line); color: #75847e; font-size: 12px; }
.portal-thinking-message .portal-chat-bubble { min-width: min(235px,calc(100% - 45px)); }
.portal-thinking-row { display: flex; align-items: center; gap: 9px; color: var(--ink); }
.portal-thinking-label { font-size: 13px; font-weight: 800; }
.portal-thinking-dots { display: inline-flex; align-items: center; gap: 4px; height: 12px; }
.portal-thinking-dots i { display: block; width: 5px; height: 5px; border-radius: 50%; background: var(--green); animation: portalThinkingDot 1.05s ease-in-out infinite; }
.portal-thinking-dots i:nth-child(2) { animation-delay: .14s; }
.portal-thinking-dots i:nth-child(3) { animation-delay: .28s; }
.portal-thinking-detail { display: block; min-height: 18px; margin-top: 3px; color: #7d8c86; font-size: 11px; }
.portal-chat-message.is-revealing { animation: portalAnswerReveal .3s ease-out both; }
@keyframes portalThinkingDot {
  0%, 75%, 100% { opacity: .28; transform: translateY(0) scale(.82); }
  35% { opacity: 1; transform: translateY(-3px) scale(1); }
}
@keyframes portalAnswerReveal {
  from { opacity: .35; transform: translateY(3px); }
  to { opacity: 1; transform: translateY(0); }
}
.portal-chat-quick-actions { display: flex; flex-wrap: wrap; gap: 7px; flex: 0 0 auto; padding: 10px 22px 14px; border-top: 1px solid var(--line); background: rgba(248,250,245,.96); }
.portal-chat-quick-actions button { min-height: 35px; padding: 0 11px; border: 1px solid #cad8ce; border-radius: 9px; color: var(--green); background: white; cursor: pointer; font-size: 12px; font-weight: 800; }
.portal-chat-quick-actions button.primary { border-color: var(--green); color: white; background: var(--green); }
.portal-chat-quick-actions button:disabled { cursor: wait; opacity: .55; }
.portal-chat-composer { position: relative; flex: 0 0 auto; width: 100%; padding: 0 18px 16px; background: #f8faf5; }
.portal-chat-composer form { width: 100%; }
.portal-chat-input-shell { position: relative; display: grid; grid-template-columns: max-content minmax(0,1fr) max-content; grid-template-areas: "attach input send"; align-items: end; width: 100%; gap: 7px; padding: 7px; border: 1px solid #cad6cd; border-radius: 13px; background: white; box-shadow: 0 8px 28px rgba(27,57,48,.07); }
.portal-chat-input-shell:focus-within { border-color: var(--green); box-shadow: 0 0 0 3px rgba(32,93,76,.1); }
.portal-chat-input-shell > button { width: 40px; height: 40px; border: 0; border-radius: 9px; cursor: pointer; font-size: 16px; }
#portalChatAttachBtn { grid-area: attach; color: var(--green); background: var(--mint); }
#portalChatSendBtn { grid-area: send; justify-self: end; width: auto; min-width: 64px; padding: 0 13px; color: white; background: var(--green); font-size: 12px; font-weight: 800; white-space: nowrap; }
#portalChatSendBtn:disabled { cursor: wait; opacity: .55; }
#portalChatInput { grid-area: input; display: block; width: 100%; min-width: 0; min-height: 35px; max-height: 120px; padding: 8px 4px; border: 0; outline: 0; resize: none; font: inherit; font-size: 14px; line-height: 1.5; }
.portal-chat-composer form > p { margin: 6px 3px 0; color: #89948f; font-size: 11px; }
.portal-attachment-menu { position: absolute; z-index: 20; left: 0; bottom: calc(100% + 8px); width: 235px; padding: 7px; border: 1px solid var(--line); border-radius: 11px; background: white; box-shadow: 0 15px 45px rgba(15,43,35,.17); }
.portal-attachment-menu button { display: block; width: 100%; min-height: 38px; padding: 0 10px; border: 0; border-radius: 8px; color: var(--ink); background: transparent; cursor: pointer; font-size: 13px; text-align: left; }
.portal-attachment-menu button:hover { background: var(--mint-light); }
.workspace-main { min-width: 0; padding: 34px clamp(24px,4vw,62px) 70px; }
.workspace-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 24px; max-width: 1120px; margin: 0 auto 25px; }
.workspace-header h1 { margin: 0; font: 500 clamp(30px,3.4vw,45px) Georgia, "Songti SC", serif; }
.workspace-header > div > p:last-child { max-width: 720px; margin: 10px 0 0; color: var(--ink-soft); font-size: 14px; }
.module-panel { max-width: 1120px; margin: 0 auto; }
.gs-workspace-mode { display: block; height: calc(100dvh - var(--topbar)); min-height: 0; overflow: hidden; }
.gs-workspace-mode .workspace-side, .gs-workspace-mode .workspace-header { display: none; }
.gs-workspace-mode .workspace-main { height: 100%; padding: 0; }
.gs-workspace-host { width: 100%; height: 100%; background: var(--canvas); }
.gs-workspace-host iframe { display: block; width: 100%; height: 100%; border: 0; background: var(--canvas); }
.panel-card { padding: clamp(24px,4vw,42px); border: 1px solid var(--line); border-radius: 22px; background: rgba(255,255,255,.9); box-shadow: var(--shadow); }
.panel-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: 25px; margin-bottom: 26px; }
.panel-heading h2 { margin: 0; font: 600 25px Georgia, "Songti SC", serif; }
.panel-heading p { max-width: 640px; margin: 7px 0 0; color: var(--ink-soft); font-size: 13px; }
.example-links { flex: 0 0 auto; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 7px; }
.example-links a { padding: 7px 10px; border: 1px solid #cfdbd1; border-radius: 8px; color: var(--green); background: var(--mint-light); font-size: 12px; font-weight: 750; text-decoration: none; }
.form-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 16px; }
.field { display: flex; flex-direction: column; gap: 7px; min-width: 0; }
.field.full { grid-column: 1 / -1; }
.field label { font-size: 13px; font-weight: 800; }
.field small { color: #82908b; font-size: 12px; }
.field input, .field select, .field textarea { width: 100%; min-height: 44px; padding: 10px 12px; border: 1px solid #ced9d0; border-radius: 10px; outline: 0; background: white; font-size: 14px; }
.field textarea { min-height: 100px; resize: vertical; }
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--green); box-shadow: 0 0 0 3px rgba(32,93,76,.1); }
.file-field input { padding: 7px; }
.file-field input::file-selector-button { min-height: 32px; margin-right: 9px; padding: 0 10px; border: 0; border-radius: 7px; color: var(--green); background: var(--mint); cursor: pointer; font-size: 12px; font-weight: 800; }
.form-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 24px; }
.index-builder { margin-top: 24px; padding: 22px; border: 1px solid var(--line); border-radius: 17px; background: #f7f9f5; }
.index-builder-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px; }
.index-builder-heading h2 { margin: 0; font: 600 21px Georgia, "Songti SC", serif; }
.index-builder-heading p:last-child { max-width: 700px; margin: 6px 0 0; color: var(--ink-soft); font-size: 12px; }
.index-builder-heading > strong { flex: 0 0 auto; padding: 7px 10px; border-radius: 99px; color: var(--green); background: var(--mint); font-size: 11px; }
.index-composer { display: grid; grid-template-columns: minmax(0,1fr) auto minmax(170px,.36fr); align-items: center; gap: 18px; margin-top: 18px; padding: 18px; border: 1px solid #cfdcd2; border-radius: 15px; background: linear-gradient(120deg,#fff,#eef5ef); }
.index-composer-parts { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; }
.index-composer-part { display: grid; grid-template-rows: 30px auto auto; justify-items: center; gap: 4px; min-width: 0; padding: 10px 6px; border: 1px solid #e0e7e1; border-radius: 11px; background: white; text-align: center; }
.index-composer-part .index-shape { align-self: center; width: 22px; height: 22px; }
.index-composer-part .index-shape.triangle { width: 0; height: 0; border-right-width: 12px; border-bottom-width: 22px; border-left-width: 12px; }
.index-composer-part small { overflow: hidden; color: #71817b; font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.index-composer-part strong { color: var(--green-dark); font: 600 13px Georgia, serif; }
.index-composer-arrow { color: #84a092; font: 500 30px Georgia, serif; }
.index-composer-output { display: grid; justify-items: center; padding: 18px 12px; border-radius: 13px; color: white; background: var(--green-dark); text-align: center; box-shadow: 0 12px 28px rgba(18,63,52,.16); }
.index-composer-output small { color: rgba(255,255,255,.62); font-size: 9px; }
.index-composer-output strong { margin-top: 3px; font: 600 17px Georgia, "Songti SC", serif; }
.index-composer-output span { margin-top: 5px; color: var(--lime); font: 600 12px Georgia, serif; }
.index-presets { display: flex; flex-wrap: wrap; gap: 8px; margin: 18px 0; }
.index-presets button { min-height: 34px; padding: 0 11px; border: 1px solid #cad8ce; border-radius: 9px; color: var(--green); background: white; cursor: pointer; font-size: 11px; font-weight: 800; }
.index-presets button.active { border-color: var(--green); color: white; background: var(--green); }
.index-weight-list { display: grid; gap: 10px; }
.index-weight-row { display: grid; grid-template-columns: 26px minmax(180px,.85fr) minmax(180px,1.15fr) 48px; align-items: center; gap: 12px; padding: 13px; border: 1px solid #e0e6df; border-radius: 12px; background: white; }
.index-weight-copy label, .index-weight-copy small { display: block; }
.index-weight-copy label { font-size: 12px; font-weight: 800; }
.index-weight-copy small { margin-top: 2px; color: #7d8d87; font-size: 10px; }
.index-weight-row input[type="range"] { width: 100%; accent-color: var(--green); cursor: pointer; }
.index-weight-row output { color: var(--green-dark); font: 600 14px Georgia, serif; text-align: right; }
.index-shape { display: block; width: 17px; height: 17px; justify-self: center; background: var(--green); }
.index-shape.circle { border-radius: 50%; }
.index-shape.diamond { background: var(--amber); transform: rotate(45deg); }
.index-shape.square { border-radius: 3px; background: #4f8395; }
.index-shape.triangle { width: 0; height: 0; border-right: 10px solid transparent; border-bottom: 18px solid #8a6fa8; border-left: 10px solid transparent; background: transparent; }
.index-boundary { margin: 16px 0 0; padding-top: 14px; border-top: 1px solid var(--line); color: #6f5b3b; font-size: 11px; line-height: 1.7; }
.primary-button, .secondary-button { min-height: 42px; padding: 0 17px; border-radius: 10px; cursor: pointer; font-size: 13px; font-weight: 800; }
.primary-button { border: 1px solid var(--green); color: white; background: var(--green); }
.primary-button:hover { background: var(--green-dark); }
.primary-button:disabled { cursor: wait; opacity: .55; }
.secondary-button { border: 1px solid #cbd8ce; color: var(--green); background: white; }
.database-option { padding: 13px; border: 1px dashed #d5dcd5; border-radius: 10px; color: #687a73; background: #f7f8f4; font-size: 13px; }
.result-stack { display: grid; gap: 18px; margin-top: 22px; }
.result-card { padding: 23px; border: 1px solid var(--line); border-radius: 17px; background: white; }
.result-card h3 { margin: 0; font: 600 18px Georgia, "Songti SC", serif; }
.result-card > p { color: var(--ink-soft); font-size: 13px; }
.chart-heading { display: flex; justify-content: space-between; gap: 20px; margin-bottom: 17px; }
.chart-heading p { margin: 6px 0 0; color: var(--ink-soft); font-size: 12px; }
.decision-chart-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 14px; }
.chart-panel { min-width: 0; padding: 17px; border: 1px solid var(--line); border-radius: 13px; background: #f9faf7; }
.chart-panel-wide { grid-column: 1 / -1; }
.chart-panel h4 { margin: 0 0 14px; font-size: 12px; }
.horizontal-chart, .contribution-chart { display: grid; gap: 9px; }
.bar-row, .contribution-row { display: grid; grid-template-columns: minmax(92px,1fr) minmax(120px,2fr) 42px; align-items: center; gap: 9px; min-width: 0; }
.bar-row > span, .contribution-row > span { overflow: hidden; color: #65766f; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.bar-row > strong, .contribution-row > strong { font: 600 11px Georgia, serif; text-align: right; }
.bar-track, .contribution-track { display: flex; height: 12px; overflow: hidden; border-radius: 99px; background: #e4e9e3; }
.bar-track i { display: block; border-radius: inherit; background: linear-gradient(90deg,var(--green),#75a86e); }
.contribution-track i { display: block; height: 100%; }
.metric-expected_f1_heterozygosity { background: var(--green); }
.metric-dosage_distance { background: var(--amber); }
.metric-marker_coverage { background: #4f8395; }
.metric-deterministic_locus_fraction { background: #8a6fa8; }
.metric-yield { background: var(--green); }
.metric-plant_height { background: var(--amber); }
.metric-leaf_area { background: #8a6fa8; }
.chart-legend { display: flex; flex-wrap: wrap; gap: 6px 10px; margin: -4px 0 12px; }
.chart-legend span { display: inline-flex; align-items: center; gap: 5px; color: #71817b; font-size: 9px; }
.chart-legend i { display: inline-block; width: 8px; height: 8px; border-radius: 2px; }
.chart-note { min-height: 38px; margin: -6px 0 12px; color: #71817b; font-size: 10px; line-height: 1.6; }
.distribution-summary { display: flex; flex-wrap: wrap; gap: 7px; margin: -4px 0 4px; }
.distribution-summary span { padding: 4px 7px; border-radius: 99px; color: #61736c; background: #eaf0e9; font-size: 9px; }
.distribution-chart { display: grid; grid-template-columns: repeat(8,minmax(32px,1fr)); align-items: end; gap: 9px; min-height: 190px; padding-top: 12px; }
.distribution-bin { display: grid; grid-template-rows: 130px auto auto; align-items: end; gap: 4px; min-width: 0; text-align: center; }
.distribution-bin > span { position: relative; display: flex; align-items: end; justify-content: center; height: 130px; border-bottom: 1px solid #cfd8d0; }
.distribution-bin i { display: block; width: min(32px,75%); min-height: 2px; border-radius: 6px 6px 0 0; background: linear-gradient(#75a86e,var(--green)); }
.distribution-bin strong { font-size: 10px; }
.distribution-bin small { overflow: hidden; color: #81908a; font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
.tradeoff-plot { position: relative; height: 230px; margin: 24px 17px 25px 31px; border-bottom: 1px solid #bdcbc1; border-left: 1px solid #bdcbc1; background-image: linear-gradient(rgba(32,93,76,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(32,93,76,.06) 1px,transparent 1px); background-size: 25% 25%; }
.tradeoff-point { position: absolute; width: 9px; height: 9px; border: 2px solid white; border-radius: 50%; background: #87a097; box-shadow: 0 1px 4px rgba(18,63,52,.28); transform: translate(-50%,50%); }
.tradeoff-point.pareto { z-index: 2; width: 13px; height: 13px; background: var(--amber); box-shadow: 0 0 0 3px rgba(217,156,67,.17); }
.axis-label { position: absolute; color: #74847e; font-size: 9px; }
.axis-x { right: 0; bottom: -22px; }
.axis-y { left: -31px; top: -20px; writing-mode: vertical-rl; transform: rotate(180deg); }
.plot-legend { display: flex; justify-content: flex-end; gap: 13px; color: #74847e; font-size: 9px; }
.plot-legend span { display: inline-flex; align-items: center; gap: 5px; }
.plot-legend i { width: 8px; height: 8px; border-radius: 50%; background: #87a097; }
.plot-legend i.pareto { background: var(--amber); }
.sensitivity-summary { display: grid; grid-template-columns: repeat(2,1fr); gap: 9px; margin-bottom: 15px; }
.sensitivity-summary span { padding: 11px; border-radius: 10px; color: #71817b; background: #edf3ed; font-size: 9px; }
.sensitivity-summary strong { display: block; margin-top: 3px; color: var(--green-dark); font: 600 16px Georgia, serif; }
.sensitivity-chart { display: grid; gap: 8px; }
.sensitivity-row { display: grid; grid-template-columns: minmax(105px,1fr) minmax(100px,1.35fr) 38px; align-items: center; gap: 8px; }
.sensitivity-row > span { overflow: hidden; color: #65766f; font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.sensitivity-row small { margin-left: 5px; color: #8a9893; }
.sensitivity-track { height: 9px; overflow: hidden; border-radius: 99px; background: #e3e9e3; }
.sensitivity-track i { display: block; height: 100%; border-radius: inherit; }
.sensitivity-track i.stable { background: linear-gradient(90deg,var(--green),#75a86e); }
.sensitivity-track i.changed { background: linear-gradient(90deg,#c58259,var(--amber)); }
.sensitivity-row > strong { color: #566c63; font-size: 9px; text-align: right; }
.metric-grid { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 10px; margin-top: 15px; }
.metric { min-width: 0; padding: 14px; border-radius: 11px; background: var(--mint-light); }
.metric span { display: block; color: #788882; font-size: 11px; }
.metric strong { display: block; margin-top: 5px; overflow: hidden; font: 600 16px Georgia, serif; text-overflow: ellipsis; white-space: nowrap; }
.warning-list { margin: 12px 0 0; padding-left: 18px; color: #775a31; font-size: 12px; }
.photo-empty { display: flex; align-items: center; justify-content: space-between; gap: 15px; margin-top: 15px; padding: 18px; border: 1px dashed #cbd8ce; border-radius: 14px; color: var(--ink-soft); background: var(--mint-light); font-size: 12px; }
.photo-empty > div { display: grid; gap: 5px; }
.photo-empty strong { color: var(--ink); font-size: 13px; }
.photo-empty p { margin: 0; line-height: 1.6; }
.photo-empty small { color: #7d8c86; line-height: 1.5; }
.photo-pending { color: #7b6950; font-weight: 700; }
.table-scroll { overflow-x: auto; border: 1px solid var(--line); border-radius: 14px; }
table { width: 100%; border-collapse: collapse; background: white; font-size: 12px; }
th, td { padding: 12px 13px; border-bottom: 1px solid #e5e9e3; text-align: left; white-space: nowrap; }
th { color: #65766f; background: #f7f9f5; font-size: 11px; }
tbody tr:last-child td { border-bottom: 0; }
.trait-result { display: inline-flex; align-items: baseline; gap: 4px; color: var(--green-dark); }
.trait-result strong { font: 600 12px Georgia, serif; }
.trait-result small { color: #7c8c86; font-size: 9px; }
.trait-result.trait-missing { color: #8a9893; }
.table-button { min-height: 32px; padding: 0 9px; border: 1px solid #cbd9cf; border-radius: 7px; color: var(--green); background: white; cursor: pointer; font-size: 12px; font-weight: 800; }
.citation-list { display: grid; gap: 10px; margin-top: 16px; }
.citation { padding: 14px; border-left: 3px solid var(--green); border-radius: 0 10px 10px 0; background: var(--mint-light); }
.citation strong, .citation span { display: block; }
.citation strong { font-size: 13px; }
.citation span { margin-top: 3px; color: #75847e; font-size: 11px; }
.citation p { margin: 7px 0 0; font-size: 12px; }
.answer-paper { white-space: pre-line; font-size: 11px; line-height: 1.8; }
.objective-list { display: grid; gap: 10px; }
.objective-row { display: grid; grid-template-columns: 1.4fr 1fr .7fr 1fr auto; gap: 8px; align-items: end; }
.objective-row button { width: 35px; min-height: 42px; border: 1px solid #e2c6c3; border-radius: 9px; color: var(--red); background: #fff6f5; cursor: pointer; }
.report-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: 22px; }
.report-heading h3 { font-size: 22px; }
.report-heading p:last-child { max-width: 700px; margin: 7px 0 0; color: var(--ink-soft); font-size: 12px; }
.report-scope { flex: 0 0 auto; padding: 7px 10px; border-radius: 99px; color: #6f572f; background: #f5e9d4; font-size: 10px; font-weight: 800; }
.report-summary-grid { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 10px; margin: 20px 0; }
.report-summary-grid > div { min-width: 0; padding: 14px; border-radius: 11px; background: var(--mint-light); }
.report-summary-grid span { display: block; color: #788882; font-size: 10px; }
.report-summary-grid strong { display: block; margin-top: 5px; overflow: hidden; font: 600 15px Georgia, serif; text-overflow: ellipsis; white-space: nowrap; }
.report-document { padding: clamp(20px,3vw,34px); border: 1px solid var(--line); border-radius: 14px; color: #2d443c; background: #fff; }
.report-document > h3 { display: none; }
.report-document h4 { margin: 28px 0 10px; padding-bottom: 8px; border-bottom: 1px solid #dfe6df; color: var(--green-dark); font: 600 17px Georgia,"Songti SC",serif; }
.report-document h4:first-child { margin-top: 0; }
.report-document h5 { margin: 18px 0 8px; color: var(--green); font-size: 12px; }
.report-document p { margin: 8px 0; color: #53675f; font-size: 12px; line-height: 1.75; }
.report-document ul, .report-document ol { margin: 9px 0 17px; padding-left: 22px; color: #53675f; font-size: 12px; line-height: 1.75; }
.report-table-scroll { margin: 12px 0 18px; overflow-x: auto; border: 1px solid var(--line); border-radius: 11px; }
.report-table-scroll table { font-size: 10px; }
.report-table-scroll th, .report-table-scroll td { padding: 9px 10px; }
.handoff-card { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 25px; padding: 28px; color: white; background: var(--green-dark); border-radius: 18px; }
.handoff-card h3 { margin: 0; font: 600 23px Georgia, "Songti SC", serif; }
.handoff-card p { max-width: 700px; margin: 8px 0 0; color: rgba(255,255,255,.72); font-size: 13px; }
.handoff-card a { display: inline-flex; align-items: center; min-height: 42px; padding: 0 16px; border-radius: 10px; color: var(--green-dark); background: var(--lime); font-size: 13px; font-weight: 850; text-decoration: none; }
.image-dialog { width: min(760px,calc(100vw - 32px)); padding: 0; border: 0; border-radius: 22px; color: var(--ink); background: var(--paper); box-shadow: 0 30px 90px rgba(10,35,28,.28); }
.image-dialog::backdrop { background: rgba(12,35,29,.66); backdrop-filter: blur(5px); }
.image-dialog header { display: flex; justify-content: space-between; align-items: center; padding: 20px 23px; border-bottom: 1px solid var(--line); }
.image-dialog h2 { margin: 0; font: 600 21px Georgia, "Songti SC", serif; }
.image-dialog header button { width: 35px; height: 35px; border: 0; border-radius: 9px; background: #edf1eb; cursor: pointer; font-size: 20px; }
.phenotype-photo-stage { display: grid; place-items: center; min-height: 340px; padding: 20px; background: #edf1eb; }
.phenotype-photo-stage img { display: block; max-width: 100%; max-height: 68vh; border-radius: 12px; object-fit: contain; }
.phenotype-photo-stage p { color: var(--red); font-size: 10px; }
.photo-caption { margin: 0 20px 20px; padding: 14px; border: 1px solid var(--line); border-radius: 11px; color: var(--ink-soft); background: white; }
.photo-caption strong { font-size: 9px; }
.photo-caption p { margin: 5px 0 0; font-size: 8px; }
.portal-toast { position: fixed; z-index: 500; right: 24px; bottom: 24px; max-width: min(410px,calc(100vw - 48px)); padding: 13px 17px; border-radius: 10px; color: white; background: var(--ink); box-shadow: 0 16px 45px rgba(15,43,35,.25); font-size: 10px; }
.portal-toast.error { background: var(--red); }
.portal-toast.success { background: var(--green); }
@media (max-width: 1050px) {
  .portal-topbar { grid-template-columns: 1fr auto; }
  .topbar-center { display: none; }
  .launcher-hero { align-items: flex-start; flex-direction: column; }
  .launcher-layout { grid-template-columns: minmax(330px,360px) minmax(0,1fr); }
  .capability-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .capability-card:nth-child(n) { grid-column: span 1; }
  .capability-card:last-child { grid-column: 1 / -1; }
  .capability-workspace { grid-template-columns: 360px minmax(0,1fr); }
  .metric-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
}
@media (max-width: 900px) {
  .launcher-layout { grid-template-columns: 1fr; }
  .launcher-assistant { position: static; height: 520px; min-height: 0; }
  .launcher-hero { min-height: 0; }
}
@media (max-width: 820px) {
  :root { --topbar: 64px; }
  .portal-topbar { padding: 0 14px; }
  .portal-brand strong { font-size: 17px; }
  .portal-brand small, .service-pill { display: none; }
  .launcher { padding: 18px 14px 45px; }
  .launcher-layout { gap: 18px; }
  .launcher-assistant { height: 500px; border-radius: 20px; }
  .launcher-hero { min-height: 0; padding: 32px 24px; border-radius: 22px; }
  .hero-copy h1 { font-size: clamp(31px,9vw,45px); }
  .hero-assurance { width: 100%; }
  .hero-assurance span { min-width: 0; }
  .launcher-heading { align-items: flex-start; flex-direction: column; }
  .capability-workspace { display: block; }
  .workspace-side { position: static; height: 58dvh; min-height: 430px; border-right: 0; border-bottom: 1px solid var(--line); }
  .portal-chat-navigation { padding-top: 12px; }
  #portalChatInput { font-size: 16px; }
  .portal-chat-input-shell > button { height: 44px; }
  #launcherChatInput { font-size: 16px; }
  .workspace-main { padding: 25px 14px 50px; }
  .workspace-header { flex-direction: column; }
  .panel-card { padding: 22px 17px; border-radius: 17px; }
  .form-grid { grid-template-columns: 1fr; }
  .field.full { grid-column: auto; }
  .index-builder-heading { flex-direction: column; }
  .index-composer { grid-template-columns: 1fr; }
  .index-composer-arrow { transform: rotate(90deg); justify-self: center; }
  .index-weight-row { grid-template-columns: 24px minmax(0,1fr) 48px; }
  .index-weight-row input[type="range"] { grid-column: 2 / 4; }
  .index-weight-row output { grid-column: 3; grid-row: 1; }
  .decision-chart-grid { grid-template-columns: 1fr; }
  .chart-panel-wide { grid-column: auto; }
  .report-summary-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .report-heading { flex-direction: column; }
  .objective-row { grid-template-columns: 1fr 1fr; padding: 12px; border: 1px solid var(--line); border-radius: 11px; }
  .objective-row button { grid-column: 2; justify-self: end; }
  .handoff-card { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .brand-symbol { width: 37px; height: 37px; }
  .topbar-actions .quiet-button { width: 36px; padding: 0; overflow: hidden; color: transparent; }
  .topbar-actions .quiet-button::after { content: "⌂"; color: var(--green); }
  .capability-grid { grid-template-columns: 1fr; }
  .capability-card:last-child { grid-column: auto; }
  .hero-assurance { grid-template-columns: 1fr; }
  .hero-assurance span + span { border-top: 1px solid rgba(255,255,255,.13); border-left: 0; }
  .metric-grid { grid-template-columns: 1fr 1fr; }
  .chart-panel { overflow-x: auto; }
  .index-composer-parts { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .distribution-chart { min-width: 520px; }
  .bar-row, .contribution-row { grid-template-columns: minmax(78px,.8fr) minmax(110px,1.4fr) 38px; }
  .tradeoff-plot { min-width: 360px; }
  .sensitivity-chart { min-width: 420px; }
  .image-dialog { width: 100vw; max-width: none; height: 100dvh; margin: 0; border-radius: 0; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; transition-duration: .01ms !important; }
  .portal-thinking-dots i, .portal-chat-message.is-revealing { animation: none !important; transform: none !important; }
}

/* Assistant reply typography: bold text stays within its sentence. */
.portal-chat-bubble strong, .chat-bubble strong { font-size: inherit; }
.portal-chat-bubble { line-height: 1.75; }
.chat-followup { text-align: left; }

.launcher-hero{min-height:220px;padding:32px;gap:24px}.hero-copy h1{font-size:clamp(30px,3vw,44px)}
.resume-card{flex:0 1 290px;min-width:230px;padding:20px;border:1px solid #ffffff30;border-radius:16px;background:#ffffff0d}
.resume-card>p{margin:0 0 10px;color:#d1e3d9;font-size:13px}.resume-card h2{margin:0 0 12px;font-size:20px;overflow-wrap:anywhere}.resume-card a{display:inline-block;padding:9px 15px;border-radius:8px;background:#d5ee92;color:#173f33;text-decoration:none;font-weight:600}
@media(max-width:1100px){.resume-card{flex:auto;width:100%;min-width:0}}

/* Compact workspace heading responds to its actual available column width. */
.launcher-catalog{container-type:inline-size}
.launcher-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(200px,260px);align-items:center;min-height:0;padding:22px 26px;gap:24px;border-radius:18px}
.hero-copy{min-width:0}.hero-copy h1{font:600 30px/1.3 system-ui,"Microsoft YaHei",sans-serif;letter-spacing:0}.hero-copy .eyebrow{margin:0 0 8px;font-size:11px}.hero-copy>p:last-child{margin:10px 0 0;font-size:13px;line-height:1.65}
.resume-card{min-width:0;width:auto;padding:14px 16px}.resume-card h2{font-size:17px;margin-bottom:8px}.resume-card>p{font-size:12px;margin-bottom:6px}.resume-card a{padding:7px 12px;font-size:13px}
@container(max-width:580px){.launcher-hero{grid-template-columns:minmax(0,1fr);gap:14px;padding:20px}.hero-copy h1{font-size:26px}.resume-card{width:100%}}
