/* 药格局 · hosted console styles.
   Ported from scripts/build_site.py (tokens, chips, tables, <details> blocks, tiles, change feed) with the
   JS tab bar replaced by a link nav. Light by default; dark via prefers-color-scheme or [data-theme="dark"].

   Reusable classes for any page that extends base.html:
     layout   .wrap (page column, set by base.html)  .narrow (centered 440px column)  .pagehead  .crumb
     blocks   .panel  .tiles/.tile  .tablewrap>table  details.prod / details.co  .empty  .foot
     forms    .form-grid  .field (.wide)  .hint  .actions  .btn (.btn-primary .btn-danger .btn-sm .btn-link)
              .invite-form (inline row of fields)  .linkcell (read-only URL + 复制 button)  .row-ops (table action buttons)
     header   .brandhead  .org-switch (org switcher <select>, v1.1)
     text     .meta  .legend  .lead  .notice (.notice-ok .notice-warn .notice-bad)  .chip (.chip-ok/-warn/-bad/-neutral/-muted)
     status   .status  .spinner
*/
:root{
  --bg:#F3F5F7; --surface:#FFFFFF; --fg:#1B232D; --muted:#5F6D7B; --line:#D8DFE6; --line-soft:#E8EDF1;
  --accent:#1E6E76; --accent-soft:#E0EFF0; --accent-ink:#134C52;
  --ok:#2A7A4B; --ok-soft:#E1F1E6; --warn:#9A6208; --warn-soft:#FAEFD8; --bad:#AE2A22; --bad-soft:#F8E2DF;
  --neutral:#4B5A69; --neutral-soft:#E9EDF1; --mutedchip:#7A8794; --mutedchip-soft:#F0F3F5;
  --font-display:"Noto Serif SC","Songti SC","STSong","SimSun",serif;
  --font-body:"Noto Sans SC","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  --gutter-l:max(16px,env(safe-area-inset-left,0px)); --gutter-r:max(16px,env(safe-area-inset-right,0px));
  color-scheme: light;
}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){
  --bg:#0F151B; --surface:#161D25; --fg:#E6ECF1; --muted:#9AA8B5; --line:#2A3540; --line-soft:#1F2932;
  --accent:#6DB9BF; --accent-soft:#17343A; --accent-ink:#A9DADD;
  --ok:#6FC48E; --ok-soft:#163222; --warn:#E3AB4E; --warn-soft:#3B2B10; --bad:#EA796E; --bad-soft:#3E1815;
  --neutral:#B4C0CC; --neutral-soft:#242F3A; --mutedchip:#8D9AA7; --mutedchip-soft:#1C252E; color-scheme: dark } }
:root[data-theme="dark"]{
  --bg:#0F151B; --surface:#161D25; --fg:#E6ECF1; --muted:#9AA8B5; --line:#2A3540; --line-soft:#1F2932;
  --accent:#6DB9BF; --accent-soft:#17343A; --accent-ink:#A9DADD;
  --ok:#6FC48E; --ok-soft:#163222; --warn:#E3AB4E; --warn-soft:#3B2B10; --bad:#EA796E; --bad-soft:#3E1815;
  --neutral:#B4C0CC; --neutral-soft:#242F3A; --mutedchip:#8D9AA7; --mutedchip-soft:#1C252E; color-scheme: dark }

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:15px;line-height:1.6;margin:0;overflow-x:hidden}
a{color:var(--accent);text-decoration:none;border-bottom:1px solid transparent} a:hover{border-bottom-color:var(--accent)}
a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
[hidden]{display:none !important}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ---- top bar + nav ------------------------------------------------------------------------- */
.top{position:sticky;top:0;z-index:5;background:var(--surface);border-bottom:1px solid var(--line);padding-top:env(safe-area-inset-top,0px)}
.top-in{max-width:1040px;margin:0 auto;padding-block:12px 0;padding-left:var(--gutter-l);padding-right:var(--gutter-r)}
.top-in.solo{padding-block:12px}
.brandline{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 20px}
.brandline h1{font-family:var(--font-display);font-size:clamp(20px,3.4vw,26px);font-weight:700;margin:0;letter-spacing:.02em;min-width:0}
.brandline h1 a{color:inherit;border:0}
.brandline .org{font-family:var(--font-body);font-size:13px;font-weight:500;color:var(--muted);margin-left:10px;letter-spacing:0}
.brandhead{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;min-width:0;max-width:100%}
.org-switch{margin:0;display:flex;align-items:center;gap:6px;min-width:0;max-width:100%}
.org-switch select{width:auto;max-width:min(280px,calc(100vw - 48px));font-size:13px;font-weight:500;color:var(--muted);background:var(--surface);padding:2px 10px;line-height:1.5;border-radius:999px;text-overflow:ellipsis;cursor:pointer}
.org-switch select:hover{color:var(--fg);border-color:var(--muted)}
.brandline .sub{color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums;display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px}
.theme-btn{appearance:none;background:none;border:1px solid var(--line);border-radius:999px;color:var(--muted);font:inherit;font-size:12px;padding:1px 10px;cursor:pointer;line-height:1.6}
.theme-btn:hover{color:var(--fg);border-color:var(--muted)}
.nav{display:flex;gap:2px;overflow-x:auto;margin-top:8px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.nav::-webkit-scrollbar{display:none}
.nav a,.nav button{appearance:none;background:none;border:0;border-bottom:2px solid transparent;border-radius:0;color:var(--muted);font:inherit;font-size:14px;padding:8px 12px;cursor:pointer;white-space:nowrap;line-height:1.6}
.nav a:hover,.nav button:hover{color:var(--fg);border-bottom-color:var(--line)}
.nav a.on{color:var(--fg);border-bottom-color:var(--accent);font-weight:600}
.nav form{margin:0 0 0 auto;display:flex;flex:0 0 auto}

/* ---- page column -------------------------------------------------------------------------- */
.wrap{max-width:1040px;margin:0 auto;padding-block:22px 56px;padding-left:var(--gutter-l);padding-right:var(--gutter-r);overflow-wrap:break-word}
.narrow{max-width:440px;margin:24px auto 0}
h2{font-family:var(--font-display);font-size:18px;font-weight:600;margin:28px 0 10px;text-wrap:balance} h2:first-child{margin-top:0}
h3{font-size:15px;font-weight:600;margin:18px 0 8px}
.pagehead{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin:0 0 12px}
.pagehead h2{margin:0}
.ws-label{margin:0 0 6px;letter-spacing:.02em}
[id]{scroll-margin-top:120px} /* redirect anchors (#invites, #products ...) clear the sticky top bar */
.crumb{font-size:13px;color:var(--muted);margin:0 0 10px}
.crumb a{color:var(--muted)} .crumb a:hover{color:var(--accent)}

/* ---- tiles / highlights ------------------------------------------------------------------- */
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:12px 14px;min-width:0}
.tile .k{font-size:12px;color:var(--muted);letter-spacing:.04em} .tile .v{font-size:26px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1.2;margin-top:2px} .tile .v small{font-size:13px;font-weight:400;color:var(--muted);margin-left:4px}
.tile .x{font-size:12px;color:var(--muted);margin-top:4px;font-variant-numeric:tabular-nums}
.tiles.sm .tile .v{font-size:22px}
.hl{margin:0;padding-left:1.2em} .hl li{margin:6px 0}

/* ---- tables ------------------------------------------------------------------------------- */
.tablewrap{overflow-x:auto;background:var(--surface);border:1px solid var(--line);border-radius:6px;-webkit-overflow-scrolling:touch}
table{border-collapse:collapse;width:100%;min-width:860px;font-size:13.5px} table.mini{min-width:520px} table.feed{min-width:640px} table.items{min-width:720px}
th,td{padding:8px 10px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line-soft)}
th{font-size:12px;color:var(--muted);font-weight:500;letter-spacing:.04em;background:var(--neutral-soft);white-space:nowrap}
tbody tr:last-child td{border-bottom:0} td.num{font-variant-numeric:tabular-nums;white-space:nowrap}
td.col-name{min-width:150px} .brand{font-weight:600} .generic{color:var(--muted);font-size:12.5px} td.col-note{min-width:220px}
td.mono,.mono{font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12.5px}
td.apps{color:var(--muted);font-size:12.5px;min-width:180px}
td.empty-row{color:var(--muted);text-align:center;padding:18px 10px}

/* ---- chips -------------------------------------------------------------------------------- */
.chip{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:500;line-height:1.6;white-space:nowrap} .chip-xs{font-size:11px;padding:0 6px}
.chip-ok{background:var(--ok-soft);color:var(--ok)} .chip-warn{background:var(--warn-soft);color:var(--warn)} .chip-bad{background:var(--bad-soft);color:var(--bad)}
.chip-neutral{background:var(--neutral-soft);color:var(--neutral)} .chip-muted{background:var(--mutedchip-soft);color:var(--mutedchip)}
a.chip{border:0} a.chip:hover{filter:brightness(.96);border:0}
.chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.legend,.meta{color:var(--muted);font-size:13px} .legend{margin:8px 2px 0}
.lead{margin:10px 0}

/* ---- product / company blocks -------------------------------------------------------------- */
details.prod,details.co{background:var(--surface);border:1px solid var(--line);border-radius:6px;margin:8px 0}
details summary{cursor:pointer;list-style:none;display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 16px;padding:12px 14px;align-items:center}
details summary::-webkit-details-marker{display:none}
details summary::before{content:"";display:inline-block;width:7px;height:7px;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);transform:rotate(-45deg);margin-right:10px;transition:transform .15s;flex:0 0 auto}
details[open] summary::before{transform:rotate(45deg)}
.sum-name,.co-name{font-weight:600;flex:1 1 180px;min-width:0} .sum-generic{color:var(--muted);font-weight:400;font-size:13px;margin-left:6px}
.sum-right,.co-chips{display:flex;gap:6px;flex-wrap:wrap}
.co-stats{display:flex;flex-wrap:wrap;gap:4px 14px;color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums;align-items:center} .co-stats b{color:var(--fg)}
.prod-body,.co-body{padding:2px 16px 16px 31px;border-top:1px solid var(--line-soft)}
.prod-body p,.co-body p{margin:10px 0}
.block-link{float:right;font-size:13px;margin:10px 0 0 12px}
.solo-block{background:var(--surface);border:1px solid var(--line);border-radius:6px}
.solo-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 16px;padding:14px 16px;align-items:center}
.solo-head h2{margin:0;flex:1 1 200px}
.solo-block .prod-body,.solo-block .co-body{padding-left:16px}
.notes{margin:6px 0;padding-left:1.2em;font-size:13.5px} .notes li{margin:4px 0}
.colist{margin-top:12px} .colist-title{font-size:12px;color:var(--muted);letter-spacing:.04em;margin:12px 0 4px}
.colist ul{list-style:none;margin:0;padding:0;columns:2;column-gap:28px} .colist ul.plain{columns:1} .colist ul.two{columns:2}
.colist li{break-inside:avoid;padding:3px 0;font-size:13px;border-bottom:1px dotted var(--line-soft)}
.colist .co{font-weight:500} .colist .t,.colist .d{color:var(--muted);margin-left:6px;font-variant-numeric:tabular-nums} .colist.own ul{columns:1}
.colist ul.plain .d:first-child,.colist ul.two .d:first-child{margin-left:0;margin-right:4px}

/* ---- policy / method lists ---------------------------------------------------------------- */
.reg,.tl{list-style:none;margin:0;padding:0} .reg li,.tl li{padding:8px 0;border-bottom:1px solid var(--line-soft)}
.reg .d,.tl .d{font-variant-numeric:tabular-nums;color:var(--muted);margin-right:8px}
.reg .tag{font-size:11.5px;color:var(--accent-ink);background:var(--accent-soft);padding:0 6px;border-radius:3px;margin-right:6px} .reg .why{color:var(--muted);font-size:13px;margin-top:2px}
.tl .s{color:var(--muted);font-size:12.5px;margin-left:6px}
.src{font-size:13px;color:var(--muted);padding-left:1.2em;margin:0} .src li{margin:3px 0}
.src b{color:var(--fg);font-weight:600}

/* ---- panels, forms, buttons ---------------------------------------------------------------- */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:14px 16px;margin:10px 0}
.panel > h2:first-child,.panel > h3:first-child{margin-top:0}
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 14px}
.field{display:flex;flex-direction:column;gap:4px;min-width:0}
.field.wide{grid-column:1/-1}
.field > label,.field > .lbl{font-size:12px;color:var(--muted);letter-spacing:.04em}
.field .req{color:var(--bad);margin-left:2px}
.hint{font-size:12px;color:var(--muted)}
input[type=text],input[type=search],input[type=date],input[type=email],input[type=number],input[type=password],input[type=tel],input:not([type]),select,textarea{
  font:inherit;font-size:14px;color:var(--fg);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:7px 10px;width:100%;min-width:0;line-height:1.5}
textarea{min-height:76px;resize:vertical}
input::placeholder,textarea::placeholder{color:var(--mutedchip)}
input:focus,select:focus,textarea:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 2px var(--accent-soft)}
.actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px}
.btn{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;font:inherit;font-size:14px;font-weight:500;line-height:1.5;padding:7px 14px;border-radius:4px;border:1px solid var(--line);background:var(--surface);color:var(--fg);cursor:pointer;white-space:nowrap;text-decoration:none}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--surface)}
.btn-primary:hover{background:var(--accent-ink);border-color:var(--accent-ink);color:var(--surface)}
.btn-danger{color:var(--bad)} .btn-danger:hover{background:var(--bad-soft);border-color:var(--bad);color:var(--bad)}
.btn-sm{font-size:13px;padding:3px 10px}
.btn-link{border-color:transparent;background:none;color:var(--accent);padding-left:4px;padding-right:4px}
.btn:disabled,.btn[aria-disabled=true]{opacity:.55;cursor:default;pointer-events:none}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:4px;overflow:hidden;flex:0 0 auto}
.seg label{position:relative;display:inline-flex;align-items:center;cursor:pointer;font-size:14px;padding:7px 12px;background:var(--surface);color:var(--muted);white-space:nowrap}
.seg label + label{border-left:1px solid var(--line)}
.seg input{position:absolute;opacity:0;pointer-events:none}
.seg input:checked + span{color:var(--accent-ink);font-weight:600}
.seg label:has(input:checked){background:var(--accent-soft)}
.seg label:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}
.searchbar{display:flex;flex-wrap:wrap;gap:8px;align-items:stretch}
.searchbar input[type=search]{flex:1 1 220px;width:auto;font-size:15px}
.rangebar{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end}
.rangebar .field{flex:1 1 150px;max-width:220px}
.inline-form{display:inline}
.invite-form{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end}
.invite-form .field{flex:0 1 160px}
.invite-form .field.grow{flex:1 1 220px}
.linkcell{display:flex;gap:6px;align-items:center;min-width:300px}
.linkcell input{font-size:12.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
tr.is-new td,tr.is-focus td{background:var(--accent-soft)}
.row-ops{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.row-ops form{margin:0}

/* ---- notices, empty states, status --------------------------------------------------------- */
.notice{border-radius:6px;padding:10px 14px;font-size:14px;margin:0 0 14px;border:1px solid var(--line);background:var(--surface)}
.notice-ok{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.notice-warn{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.notice-bad{background:var(--bad-soft);color:var(--bad);border-color:transparent}
.empty{background:var(--surface);border:1px dashed var(--line);border-radius:6px;padding:32px 20px;text-align:center}
.empty h2{margin:0 0 8px} .empty p{color:var(--muted);margin:6px auto;max-width:560px}
.empty ol{text-align:left;display:inline-block;margin:12px auto 4px;padding-left:1.4em;max-width:520px} .empty ol li{margin:6px 0}
.status{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;font-size:14px}
.status .meta{font-size:13px}
.spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;flex:0 0 auto}
@keyframes spin{to{transform:rotate(360deg)}}
.runlog{list-style:none;margin:0;padding:0;font-size:13px}
.runlog li{padding:6px 0;border-bottom:1px solid var(--line-soft);display:flex;flex-wrap:wrap;gap:4px 12px;align-items:center}
.runlog li:last-child{border-bottom:0}
.runlog .err{color:var(--bad);font-size:12.5px;flex-basis:100%}
.edit-list details{background:var(--surface);border:1px solid var(--line);border-radius:6px;margin:6px 0}
.edit-list summary{padding:10px 14px}
.edit-list .edit-body{padding:4px 16px 14px;border-top:1px solid var(--line-soft)}
.who{font-weight:600;flex:1 1 160px;min-width:0}
.who small{color:var(--muted);font-weight:400;margin-left:6px;font-size:12.5px}
.add-form.panel{padding:0}
.add-form summary{padding:12px 14px}
.add-form form{padding:12px 16px 16px;border-top:1px solid var(--line-soft)}
.del-form{margin-top:10px;padding-top:10px;border-top:1px dotted var(--line-soft);display:flex;flex-wrap:wrap;gap:8px;align-items:center}

.foot{margin-top:40px;padding-top:12px;border-top:1px solid var(--line);color:var(--muted);font-size:12.5px;display:flex;flex-wrap:wrap;gap:6px 20px;justify-content:space-between}

@media (max-width:640px){
  .colist ul,.colist ul.two{columns:1} .co-stats{gap:4px 10px}
  .prod-body,.co-body{padding:2px 14px 14px 14px}
  .block-link{float:none;display:inline-block;margin:10px 0 0}
  .nav a,.nav button{padding:8px 10px}
  .rangebar .field{max-width:none}
}
@media (prefers-reduced-motion: reduce){ details summary::before{transition:none} .spinner{animation:none;border-top-color:var(--line)} }
@media print{ .top,.nav,.actions,.theme-btn{display:none} body{background:#fff} details{break-inside:avoid} }

/* ---- 竞争格局 /landscape (v1.2b) -------------------------------------------------------------
   .kj (inline 口径 line, .kj-tag badge)  table.matrix (product x company, sticky first column)
   table.grid (month x product cadence, .partial months)  table.stack (rows become cards <=640px,
   each td carries data-label)  details.ls-names (inline expandable company list)  .ls-legend .ls-toc */
.ls-toc{margin:4px 0 2px}
.ls-sec{margin-top:6px}
.kj{display:flex;gap:8px;align-items:baseline;line-height:1.55}
.kj-tag{flex:0 0 auto;font-size:11px;font-weight:600;color:var(--accent-ink);background:var(--accent-soft);padding:0 6px;border-radius:3px;letter-spacing:.04em}
.ls-legend{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;margin:8px 2px 0;font-size:12.5px;color:var(--muted)}
table.matrix,table.grid{width:max-content;min-width:100%}
table.matrix th,table.matrix td{text-align:center;vertical-align:middle}
table.matrix thead th{white-space:normal;min-width:84px;max-width:112px;line-height:1.35;vertical-align:bottom}
table.matrix thead th a{color:var(--fg)}
.matrix th.col-name,.grid th.col-name{position:sticky;left:0;z-index:1;text-align:left;min-width:132px;max-width:180px;box-shadow:1px 0 0 var(--line)}
.matrix tbody th,.grid tbody th,.stack tbody th{background:var(--surface);color:var(--fg);font-size:13.5px;font-weight:400;letter-spacing:0;white-space:normal}
.matrix thead th.col-name,.grid thead th.col-name{z-index:2;background:var(--neutral-soft)}
.mx-none{color:var(--mutedchip)}
.mx-num{font-weight:600;font-variant-numeric:tabular-nums}
.mx-sub{font-size:11.5px;color:var(--muted);margin-top:2px;white-space:nowrap;font-variant-numeric:tabular-nums;line-height:1.4}
.matrix .mx-other{border-left:1px solid var(--line)}
.matrix tbody tr:hover td,.grid tbody tr:hover td{background:var(--line-soft)}
.matrix td.mx-hl,.matrix th.mx-hl{box-shadow:inset 0 0 0 999px var(--accent-soft)}
.grid td.gc{text-align:center;font-variant-numeric:tabular-nums;min-width:58px;vertical-align:middle}
.grid th.gm,.grid th.gsum{text-align:center}
.grid .z{color:var(--mutedchip)}
.grid th.partial,.grid td.partial{background:var(--mutedchip-soft);color:var(--mutedchip)}
.grid td.partial b{color:var(--muted)}
.grid .gsum{border-right:1px solid var(--line)}
table.stack{min-width:760px}
.ls-overlap{min-width:200px}
details.ls-names{display:inline-block;text-align:left}
details.ls-names summary{padding:0;display:inline-flex;gap:4px;justify-content:flex-start;align-items:center;font-variant-numeric:tabular-nums}
details.ls-names summary::before{width:6px;height:6px;margin-right:4px}
details.ls-names .names{font-size:12.5px;color:var(--muted);margin-top:4px;max-width:340px;white-space:normal;line-height:1.5}
@media (max-width:640px){
  table.stack{min-width:0}
  table.stack thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
  table.stack,table.stack tbody,table.stack tr,table.stack td,table.stack tbody th{display:block;width:100%}
  table.stack tr{padding:8px 0;border-bottom:1px solid var(--line-soft)}
  table.stack tbody tr:last-child{border-bottom:0}
  table.stack td,table.stack tbody th{border:0;padding:3px 12px}
  table.stack td[data-label]{display:flex;justify-content:space-between;align-items:baseline;gap:12px;text-align:right;white-space:normal}
  table.stack td[data-label]::before{content:attr(data-label);color:var(--muted);font-size:12px;text-align:left;flex:0 0 auto;max-width:52%}
  details.ls-names .names{max-width:none}
  .matrix th.col-name,.grid th.col-name{min-width:112px;max-width:132px}
}
.matrix td[title]{cursor:pointer}
.mx-detail{margin:8px 0 0;font-size:13px}
.mx-detail-head{font-weight:600;margin-bottom:4px}
.mx-detail .src{font-variant-numeric:tabular-nums}

/* ---- 品种 / 企业详情页 /drugs/{name} /firms/{name} -------------------------------------------
   .dd-head (page title + annotation chips)  .dd-actions (重新抓取 / 加入关注 forms in one row)
   table.dd-months (12-month counts, fits 375px)  .dd-series (同名系列 / 相近名称 list)  details.dd-filings
   a.dl / a.fl = drill-down links (drug / firm) used across pages; .mx-firms = 其他企业合计 links (landscape) */
.dd-head h2{overflow-wrap:anywhere}
.dd-actions{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center;margin:0 0 12px}
.dd-actions form,.dd-empty form{margin:0;display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center}
.dd-actions select,.dd-empty select{width:auto;padding:3px 8px;font-size:13px}
.dd-actions .hint{flex:1 1 260px}
.dd-actions + .status{margin-top:0}
.tablewrap.dd-narrow{max-width:640px}
table.dd-months{min-width:0;width:100%}
.dd-nowrap{white-space:nowrap}
table.dd-months th,table.dd-months td{text-align:right}
table.dd-months th:first-child,table.dd-months td:first-child{text-align:left;white-space:nowrap}
table.dd-months tr.partial td{color:var(--mutedchip);background:var(--mutedchip-soft)}
table.dd-months .z{color:var(--mutedchip)}
.dd-series{list-style:none;margin:0;padding:0;columns:2;column-gap:28px}
.dd-series li{break-inside:avoid;padding:4px 0;font-size:13.5px;border-bottom:1px dotted var(--line-soft)}
.dd-series .n{color:var(--muted);margin-left:8px;font-variant-numeric:tabular-nums;font-size:12.5px}
details.dd-filings .co-body{padding:12px 14px 14px}
td.apps a.fl{color:inherit;border-bottom:1px dotted var(--line)} td.apps a.fl:hover{color:var(--accent);border-bottom-color:var(--accent)}
.mx-detail .mx-firms{line-height:1.8}
@media (max-width:640px){ .dd-series{columns:1} details.dd-filings .co-body{padding:10px} }

/* ---- 品种档案 panel on /drugs/{name} (_partials/dossier.html) ---------------------------------------
   .dos-head (title + state chip)  .dos-src (source · fetch time line under every section)  table.dos-kv (基本档案)
   .dos-en (英文名 inline form)  .dos-links (link-out list)  .dos-none (empty section line)  .dos-nuance (公开处方 note) */
.dos{margin-top:22px;padding-top:6px;border-top:1px solid var(--line)}
.dos-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 12px}
.dos-head h2{margin:8px 0 4px}
.dos h3{margin:22px 0 4px;font-size:16px}
.dos h4{margin:14px 0 4px;font-size:14px;color:var(--fg)}
.dos-src{margin:0 0 8px;overflow-wrap:anywhere}
.dos-src .chip{margin-left:4px;vertical-align:1px}
table.dos-kv{min-width:0;width:100%}
table.dos-kv th{width:9.5em;text-align:left;color:var(--muted);font-weight:500;font-size:13px;vertical-align:top;white-space:nowrap}
table.dos-kv td{overflow-wrap:anywhere}
.dos-en{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0}
.dos-en label{font-size:13px;color:var(--muted)}
.dos-en input{width:min(220px,100%);padding:3px 8px;font-size:13px}
.dos-links{list-style:none;margin:4px 0 8px;padding:0}
.dos-links li{padding:5px 0;border-bottom:1px dotted var(--line-soft);font-size:13.5px;overflow-wrap:anywhere}
.dos-none{color:var(--muted);font-size:13.5px;margin:4px 0 8px}
.dos-nuance{font-size:13px;line-height:1.65;color:var(--fg);background:var(--warn-soft);border-color:transparent}
.dos-label p{margin:6px 0;overflow-wrap:anywhere}
.dos-empty{margin-top:8px}
.dos-empty h3{margin:0 0 8px}
.dos .tiles{margin:6px 0 10px}
.dos .tile .x{overflow-wrap:anywhere}
.dos .mx-sub{white-space:normal}
@media (min-width:641px){
  table.dos-patents td:nth-child(2){min-width:14em} table.dos-patents td:nth-child(3){min-width:9em}
  table.dos-patents td:nth-child(4){min-width:10em} table.dos-patents td:nth-child(6){min-width:13em}
  table.dos-trials td:nth-child(2){min-width:18em} table.dos-trials td:nth-child(3){min-width:10em}
  table.dos-rld th:first-child{min-width:12em} table.dos-sources td:nth-child(3){min-width:9em}
}
@media (max-width:640px){ table.dos-kv th{width:auto;white-space:normal} .dos-en input{width:100%} }

/* brand mark (药格局 九宫格) */
.brandhead h1 a.brand{display:inline-flex;align-items:center;gap:8px;color:inherit;text-decoration:none;border-bottom:0}
.brand .mark{flex:0 0 auto;display:block}
