    :root{--ink:#111722;--rail:#171f2d;--paper:#f7f1df;--paper2:#eee4ca;--muted:#8e98a9;--red:#e5534b;--red2:#ff7168;--green:#2f9e6a;--line:#d5c7a7;--gold:#e5b55c;--font-sans:"Instrument Sans","PingFang SC","Hiragino Sans GB","Noto Sans SC",ui-sans-serif,system-ui,sans-serif;--font-serif:"Instrument Serif","Songti SC","Noto Serif SC",Georgia,serif}*{box-sizing:border-box}body{margin:0;background:var(--ink);color:#eff2f7;font:15px/1.5 var(--font-sans);letter-spacing:-.01em;overflow:hidden;font-feature-settings:"ss01" on,"cv11" on}.app{height:100vh;display:grid;grid-template-columns:260px 1fr}.side{background:var(--rail);border-right:1px solid #2b3545;padding:24px 18px;display:flex;flex-direction:column;gap:22px}.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:20px;letter-spacing:.02em}.brand-mark{width:31px;height:31px;border:2px solid var(--red2);border-radius:50%;display:grid;place-items:center;color:var(--red2);font-size:17px}.case-name{background:#202a3b;border:1px solid #344158;border-radius:11px;padding:13px}.case-name small,.section-title{display:block;color:var(--muted);font-size:11px;letter-spacing:.1em;text-transform:uppercase;margin-bottom:5px}.case-name strong{font-size:15px}.section-title{margin:0 0 8px}.legend{display:grid;gap:7px}.legend div{color:#cad0da;font-size:13px;display:flex;align-items:center;gap:9px}.dot{width:9px;height:9px;border-radius:50%;display:inline-block}.dot.lead{background:var(--gold)}.dot.source{background:#77b7d5}.dot.idea{background:#c68bf1}.dot.question{background:var(--red2)}.scale-guide{color:#aeb8c8;font-size:12px;line-height:1.55;margin:0}.style-row{display:flex;align-items:center;justify-content:space-between;color:#cad0da;font-size:13px;margin:8px 0}.style-row input{width:34px;height:25px;padding:1px;border:1px solid #536074;border-radius:5px;background:transparent}.side-foot{margin-top:auto;color:var(--muted);font-size:12px}.workspace{min-width:0;display:grid;grid-template-rows:74px 1fr;background:radial-gradient(circle at 63% 35%,#253248 0,#151d2a 44%,#101722 100%)}.toolbar{display:flex;align-items:center;gap:10px;padding:0 24px;border-bottom:1px solid #2b3545}.toolbar h1{font-size:17px;margin:0 auto 0 0}.toolbar h1 span{color:var(--muted);font-size:12px;font-weight:500;margin-left:8px}.btn{border:1px solid #3b4658;background:#202a3a;color:#eff2f7;border-radius:8px;padding:9px 11px;font:inherit;cursor:pointer}.btn:hover{border-color:#71809a}.btn.primary{background:var(--red);border-color:var(--red);font-weight:700}.btn.success{background:var(--green);border-color:var(--green);color:#fff;font-weight:700}.btn.active{outline:2px solid var(--gold);outline-offset:2px}.zoom{font-variant-numeric:tabular-nums;color:#c9d1dc;font-size:12px;min-width:42px;text-align:center}.board-wrap{position:relative;overflow:hidden;cursor:grab;background-image:linear-gradient(rgba(172,190,213,.10) 1px,transparent 1px),linear-gradient(90deg,rgba(172,190,213,.10) 1px,transparent 1px);background-size:32px 32px}.board-wrap.panning{cursor:grabbing}.board-wrap.linking .card{cursor:crosshair}.stage{position:absolute;inset:0;transform-origin:0 0}.board{position:absolute;inset:0;overflow:visible}.strings{position:absolute;inset:0;pointer-events:none;overflow:visible;z-index:3}.card{position:absolute;width:185px;min-height:104px;background:var(--paper);color:#202630;border:1px solid var(--line);border-radius:4px;padding:13px 14px 12px;box-shadow:0 9px 18px rgba(0,0,0,.24);cursor:grab;transform:rotate(var(--tilt));user-select:none}.card.world{width:286px;min-height:154px;background:#fff6df;border-color:#d9b15e}.card.research{width:228px;min-height:123px;background:#f3e9ff;border-color:#bd8ee4}.card.mechanism{width:185px;min-height:104px}.card.evidence{width:142px;min-height:76px;padding:10px 11px;background:#e9f3f7;border-color:#8ebdd4}.card.evidence .title{font-size:13px}.card.evidence .excerpt{font-size:11px;-webkit-line-clamp:1}.card:active{cursor:grabbing}.card.selected{outline:3px solid var(--red2);outline-offset:3px}.card.target{outline:3px solid var(--gold);outline-offset:3px}.pin{position:absolute;z-index:2;left:50%;top:-14px;transform:translateX(-50%);width:28px;height:28px;border:0;border-radius:50%;background:var(--type);color:#fff;box-shadow:0 2px 5px #0006;cursor:pointer;font-size:15px;line-height:28px;padding:0}.pin:hover{transform:translateX(-50%) scale(1.12)}.card .kind{color:#6e7480;text-transform:uppercase;font-size:10px;letter-spacing:.1em;font-weight:800}.card .title{font-family:ui-serif,Georgia,serif;font-weight:700;font-size:16px;line-height:1.23;margin:5px 0}.card .excerpt{font-size:12px;color:#555e68;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.stage.far .card{min-height:16px!important;width:16px!important;height:16px!important;padding:0;border-radius:50%;box-shadow:0 2px 8px #0006}.stage.far .card>*{display:none}.empty{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#8d9aad;text-align:center}.empty-note{color:#707b89;font-size:14px;line-height:1.6}.field{display:grid;gap:6px;margin:14px 0}.field label{font-size:11px;font-weight:800;color:#687384;letter-spacing:.08em;text-transform:uppercase}.field input,.field textarea,.field select{width:100%;border:1px solid #ccd3dd;border-radius:7px;padding:9px;background:white;color:#202630;font:inherit}.field textarea{resize:vertical;min-height:96px}.actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px}.connection-help{background:#fff4d8;border:1px solid #f0d28e;border-radius:8px;padding:9px 10px;color:#714f10;font-size:13px;margin:12px 0}.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%) translateY(70px);background:#eef2f8;color:#172030;padding:10px 14px;border-radius:8px;box-shadow:0 8px 25px #0005;transition:.25s;z-index:5}.toast.show{transform:translateX(-50%) translateY(0)}@media(max-width:900px){.app{grid-template-columns:0 1fr}.side{display:none}.toolbar{padding:0 14px}.toolbar h1 span{display:none}.btn{padding:8px}.card{width:172px}}
    .app{--left-width:260px;--right-width:0px;grid-template-columns:var(--left-width) minmax(0,1fr)}
    .app.left-collapsed{--left-width:0px}.app.right-collapsed{--right-width:0px}
    .side{grid-column:1;grid-row:1;min-height:0;overflow:auto}.workspace{grid-column:2;grid-row:1;min-height:0;grid-template-rows:auto minmax(0,1fr)}
    .side[hidden]{display:none!important}
    .toolbar{min-height:74px;flex-wrap:wrap;padding:12px 16px;gap:8px}.toolbar .btn{white-space:nowrap}
    .panel-close{align-self:flex-end;font-size:12px;padding:5px 9px}
    .btn:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
    @media(max-width:900px){
      .app{grid-template-columns:0 minmax(0,1fr) 0}
      .side{position:fixed;z-index:4;top:0;bottom:0;left:0;width:min(315px,88vw);display:flex;box-shadow:0 0 25px #0004}
      .toolbar h1{font-size:15px}
    }
    .board-picker{position:relative;flex:0 1 auto;min-width:0;max-width:min(280px,46vw);z-index:20}
    .board-picker-trigger{
      display:flex;align-items:center;gap:8px;width:100%;max-width:100%;
      padding:7px 10px;text-align:left;background:#241c16;border-color:#5a4634
    }
    .board-picker-trigger:hover{border-color:#8a7058}
    .board-picker-trigger[aria-expanded="true"]{outline:2px solid var(--gold);outline-offset:2px;border-color:#8a7058}
    .board-picker-meta{
      flex:none;font-size:10px;letter-spacing:.1em;text-transform:uppercase;
      color:#a89880;font-weight:700
    }
    .board-picker-label{
      flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
      font-family:var(--font-serif);font-size:15px;font-weight:400;color:#f3ead7;letter-spacing:-.01em
    }
    .board-picker-caret{flex:none;color:#a89880;font-size:11px;line-height:1;transition:transform .2s ease}
    .board-picker-trigger[aria-expanded="true"] .board-picker-caret{transform:rotate(180deg)}
    .board-picker-menu{
      position:absolute;top:calc(100% + 6px);left:0;min-width:min(320px,92vw);width:max(100%,260px);
      background:linear-gradient(165deg,#2a2118,#1a140f 75%);
      border:1px solid #4a3828;border-radius:12px;padding:8px;
      box-shadow:0 16px 40px rgba(0,0,0,.45),0 0 0 1px rgba(255,255,255,.04) inset;
      z-index:30
    }
    .board-picker-menu[hidden]{display:none!important}
    .board-picker-head{
      padding:6px 10px 8px;font-size:11px;letter-spacing:.1em;text-transform:uppercase;
      color:#a89880;font-weight:700
    }
    .board-picker-list{display:grid;gap:4px;max-height:min(42vh,280px);overflow:auto;padding:0 2px 4px}
    .board-picker-row{
      display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px;
      border-radius:8px;padding:2px
    }
    .board-picker-row.is-active{background:rgba(229,181,92,.12)}
    .board-picker-row.is-editing{grid-template-columns:minmax(0,1fr)}
    .board-picker-item{
      display:flex;align-items:center;gap:10px;min-width:0;width:100%;
      border:0;background:transparent;color:#e8dcc8;font:inherit;text-align:left;
      padding:8px 10px;border-radius:7px;cursor:pointer
    }
    .board-picker-item:hover{background:rgba(255,255,255,.06)}
    .board-picker-item:focus-visible{outline:2px solid var(--gold);outline-offset:1px}
    .board-picker-row.is-editing .board-picker-item{cursor:default}
    .board-picker-row.is-editing .board-picker-item:hover{background:transparent}
    .board-picker-index{
      flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;
      font-size:11px;font-weight:700;color:#241c16;background:var(--gold)
    }
    .board-picker-row:not(.is-active) .board-picker-index{background:#3a2c20;color:#d9cbb4}
    .board-picker-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}
    .board-picker-check{flex:none;color:var(--gold);font-size:12px;font-weight:700}
    .board-picker-edit{
      flex:1;min-width:0;width:100%;box-sizing:border-box;
      border:1px solid #8a7058;border-radius:6px;background:#241c16;color:#f3ead7;
      font:inherit;font-size:14px;padding:4px 8px;outline:none
    }
    .board-picker-edit:focus{border-color:var(--gold);box-shadow:0 0 0 2px rgba(229,181,92,.25)}
    .board-picker-del{
      flex:none;border:1px solid transparent;background:transparent;color:#a89880;
      border-radius:7px;padding:6px 8px;font:inherit;font-size:12px;cursor:pointer
    }
    .board-picker-del:hover:not(:disabled){color:#ffb0a8;border-color:#6a3a32;background:rgba(180,50,40,.15)}
    .board-picker-del:disabled{opacity:.35;cursor:not-allowed}
    .board-picker-foot{padding:6px 2px 2px;border-top:1px solid #3a2c20;margin-top:4px}
    .board-picker-new{width:100%;background:#32281f;border-color:#5a4634;color:#f3ead7}
    .board-picker-new:hover{border-color:#8a7058}
    @media(max-width:600px){.board-picker{max-width:min(220px,58vw)}.board-picker-menu{min-width:min(280px,94vw)}}
    @media(prefers-reduced-motion:reduce){.board-picker-caret{transition:none}}

    .board-wrap:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
    #storageError{position:fixed;bottom:0;left:0;right:0;z-index:10;padding:12px;background:#8e2525;color:white}
    .strings line.link-hit{stroke:transparent;cursor:pointer;pointer-events:stroke}
    .strings line.link-hit:hover+line,.strings line.sel{filter:drop-shadow(0 0 3px var(--gold))}
    .style-row input[type=range]{width:120px;height:20px}
    .range-row{align-items:center}.range-row output{color:#cad0da;font-variant-numeric:tabular-nums;min-width:34px;text-align:right}
    .range-wrap{display:flex;align-items:center;gap:6px}
    .case-style .style-row{margin:6px 0}
    .case-style .swatches{margin:4px 0 8px}
    .style-hint{margin:4px 0 0;font-size:11px;line-height:1.45;color:var(--muted)}
    .swatches{display:flex;flex-wrap:wrap;gap:7px}.swatch{width:22px;height:22px;border-radius:50%;border:2px solid #2b3545;cursor:pointer;padding:0;background:var(--c)}.swatch.on{border-color:#fff;box-shadow:0 0 0 2px var(--gold)}.clip-paper .swatch{border-color:#ccd3dd}.clip-paper .swatch.on{border-color:#202630;box-shadow:0 0 0 2px var(--gold)}
    #fontPreset{max-width:160px;min-width:0;font-size:12px;padding:5px 7px;background:#241c16;border:1px solid #4a3828;color:#e8dcc8;border-radius:7px}
    .brand-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
    .brand-row .brand{min-width:0}
    .gear-btn{flex:none;width:36px;height:36px;padding:0;border-radius:50%;font-size:16px;line-height:1;display:grid;place-items:center;background:#2a211a;border-color:#4a3a2c;color:#e8dcc8;position:relative;z-index:2;cursor:pointer;pointer-events:auto}
    .gear-btn .gear-icon{display:block}
    .toolbar .gear-btn.toolbar-gear{background:#241c16}
    .gear-btn:hover{border-color:#8a7058;transform:rotate(30deg);transition:transform .35s cubic-bezier(.22,1,.36,1),border-color .2s}
    .gear-btn[aria-expanded="true"]{outline:2px solid var(--gold);outline-offset:2px}
    .settings-root{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px;pointer-events:auto}
    .settings-root[hidden]{display:none!important;pointer-events:none}
    .settings-root.is-open{display:grid!important}
    .settings-backdrop{position:absolute;inset:0;background:rgba(10,8,6,.55);backdrop-filter:blur(2px);cursor:pointer}
    .settings-panel{
      position:relative;z-index:1;width:min(360px,100%);
      background:linear-gradient(165deg,#2a2118,#1a140f 70%);
      border:1px solid #4a3828;border-radius:14px;padding:18px 18px 20px;
      box-shadow:0 18px 50px rgba(0,0,0,.5),0 0 0 1px rgba(255,255,255,.04) inset;
      color:#e8dcc8;animation:settingsPop .34s cubic-bezier(.22,1,.36,1) both;
      pointer-events:auto
    }
    .settings-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
    .settings-head h2{margin:0;font-family:var(--font-serif);font-weight:400;font-size:22px;letter-spacing:-.02em;color:#f3ead7}
    .settings-note{margin:0 0 14px;font-size:12px;line-height:1.45;color:#a89880}
    .settings-panel .style-row{color:#d9cbb4;margin:10px 0}
    .settings-panel .range-row output{color:#d9cbb4}
    .settings-panel .swatch{border-color:#4a3828}
    .settings-panel .swatch.on{border-color:#fff;box-shadow:0 0 0 2px var(--gold)}
    .settings-panel .btn{background:#32281f;border-color:#5a4634;color:#f3ead7}
    @keyframes settingsPop{
      from{opacity:0;transform:translateY(12px) scale(.96)}
      to{opacity:1;transform:none}
    }
    @media(prefers-reduced-motion:reduce){
      .settings-panel,.gear-btn:hover{animation:none!important;transition:none!important;transform:none!important}
    }
    @media(max-width:600px){.board-picker{max-width:min(200px,55vw)}}

    /* —— 福尔摩斯式推理墙：软木板 + 剪报 + 图钉 —— */
    .workspace{background:
      radial-gradient(ellipse at 30% 20%,#3a2a1c 0%,transparent 55%),
      radial-gradient(ellipse at 80% 70%,#1a120c 0%,transparent 50%),
      linear-gradient(160deg,#2a1f16,#14100c 70%)}
    .toolbar{background:linear-gradient(#2c2218,#221a13);border-bottom:1px solid #4a3828;box-shadow:0 2px 10px #0006}
    .board-wrap{
      background-color:#6a4a32;
      background-image:
        radial-gradient(circle at 10% 12%,rgba(255,220,170,.35) 0 1.2px,transparent 2px),
        radial-gradient(circle at 42% 38%,rgba(30,15,5,.35) 0 1.4px,transparent 2.2px),
        radial-gradient(circle at 78% 22%,rgba(255,210,150,.28) 0 1.1px,transparent 2px),
        radial-gradient(circle at 22% 68%,rgba(0,0,0,.28) 0 1.3px,transparent 2.1px),
        radial-gradient(circle at 88% 72%,rgba(255,230,190,.25) 0 1px,transparent 1.8px),
        radial-gradient(circle at 55% 8%,rgba(60,30,10,.3) 0 1.2px,transparent 2px),
        radial-gradient(circle at 33% 88%,rgba(255,200,140,.2) 0 1.5px,transparent 2.4px),
        radial-gradient(circle at 70% 55%,rgba(0,0,0,.22) 0 1px,transparent 1.8px),
        linear-gradient(125deg,rgba(255,255,255,.08),transparent 40%,rgba(0,0,0,.18)),
        repeating-linear-gradient(0deg,transparent,transparent 27px,rgba(0,0,0,.07) 28px),
        repeating-linear-gradient(90deg,transparent,transparent 27px,rgba(0,0,0,.07) 28px);
      background-size:28px 26px,24px 22px,32px 30px,22px 24px,26px 20px,30px 28px,34px 32px,20px 18px,100% 100%,28px 28px,28px 28px;
      box-shadow:inset 0 0 100px rgba(0,0,0,.45),inset 0 0 0 2px rgba(40,25,12,.4)
    }
    .strings line:not(.link-hit){/* drop-shadow removed for board perf */}
    .strings line.sel{filter:drop-shadow(0 0 3px var(--gold))}
    .card{
      border:0;border-radius:1px;
      background:
        linear-gradient(180deg,rgba(255,255,255,.28),transparent 28%),
        repeating-linear-gradient(0deg,transparent,transparent 17px,rgba(40,50,70,.055) 18px),
        var(--paper);
      box-shadow:
        1px 2px 0 rgba(0,0,0,.06),
        3px 8px 10px rgba(0,0,0,.22),
        8px 18px 28px rgba(0,0,0,.28),
        0 0 0 1px rgba(90,70,40,.18);
      /* avoid CSS filter on every card — expensive with ~14+ cards */
    }
    .card::before{
      content:"";position:absolute;z-index:1;top:-7px;left:14%;width:46px;height:15px;
      background:linear-gradient(180deg,rgba(255,252,235,.55),rgba(240,230,190,.35));
      border:1px solid rgba(120,100,60,.12);transform:rotate(-3deg);
      box-shadow:0 1px 2px rgba(0,0,0,.12);pointer-events:none
    }
    .card::after{
      content:"";position:absolute;inset:0;pointer-events:none;
      background:
        radial-gradient(ellipse at 8% 92%,rgba(120,90,40,.08),transparent 40%),
        radial-gradient(ellipse at 95% 8%,rgba(80,60,30,.06),transparent 35%);
      box-shadow:inset 0 0 24px rgba(90,70,40,.06)
    }
    .card.world{
      background:
        linear-gradient(180deg,rgba(255,255,255,.22),transparent 22%),
        repeating-linear-gradient(0deg,transparent,transparent 16px,rgba(90,70,30,.06) 17px),
        #f6ebc8;
      box-shadow:
        1px 2px 0 rgba(0,0,0,.06),
        4px 10px 14px rgba(0,0,0,.24),
        10px 22px 32px rgba(0,0,0,.3),
        0 0 0 1px rgba(150,110,40,.28),
        0 0 0 2px rgba(229,83,75,.85);
      outline:none;
      border-radius:3px;
      overflow:visible
    }
    .card.world .world-ring{
      position:absolute;z-index:3;pointer-events:none;
      inset:-20px -26px;
      border:2.75px solid var(--red2);
      border-radius:50%;
      box-shadow:
        0 0 0 1px rgba(160,40,35,.22),
        inset 0 0 0 1px rgba(229,83,75,.18);
      transform:rotate(-1.5deg);
      opacity:.95
    }
    .card.world.selected{
      outline:none;
      box-shadow:
        1px 2px 0 rgba(0,0,0,.06),
        3px 8px 10px rgba(0,0,0,.22),
        0 0 0 2px rgba(229,83,75,.95),
        0 0 0 6px rgba(229,83,75,.16)
    }
    .card.world.selected .world-ring{
      border-color:#ff7168;
      box-shadow:
        0 0 0 1px rgba(160,40,35,.28),
        inset 0 0 0 1px rgba(255,113,104,.22),
        0 0 12px rgba(229,83,75,.25)
    }
    .card.world .title{font-size:19px;line-height:1.22}
    .card.world .excerpt{font-size:13px}
    .card.fit.world:not(.bubble){max-width:320px;min-width:268px}
    .card.bubble .world-ring{display:none}
    .card.research{
      background:
        linear-gradient(180deg,rgba(255,255,255,.25),transparent 22%),
        repeating-linear-gradient(0deg,transparent,transparent 17px,rgba(70,40,100,.05) 18px),
        #efe4f6
    }
    .card.mechanism{
      background:
        linear-gradient(180deg,rgba(255,255,255,.3),transparent 24%),
        repeating-linear-gradient(0deg,transparent,transparent 17px,rgba(40,50,70,.05) 18px),
        #f3e8cf
    }
    .card.evidence{
      background:
        linear-gradient(180deg,rgba(255,255,255,.35),transparent 30%),
        #e8eef2;
      box-shadow:0 1px 0 #fff,2px 3px 0 rgba(0,0,0,.08),4px 10px 16px rgba(0,0,0,.28),0 0 0 6px #f7f3ea,0 0 0 7px rgba(0,0,0,.12)
    }
    .card.selected{outline:2px solid var(--red2);outline-offset:5px;box-shadow:1px 2px 0 rgba(0,0,0,.06),3px 8px 10px rgba(0,0,0,.22),0 0 0 1px rgba(90,70,40,.18),0 0 0 6px rgba(229,83,75,.18)}
    .card.target{outline:2px solid var(--gold);outline-offset:5px}
    .card .kind{font-family:var(--font-sans);color:#7a6550;letter-spacing:.12em;font-size:9px;font-weight:600;opacity:.9;text-transform:uppercase}
    .card .title{font-family:var(--font-serif);font-weight:400;font-size:17px;line-height:1.25;margin:6px 0 4px;color:#1c1812;letter-spacing:-.015em;text-shadow:0 1px 0 rgba(255,255,255,.35);overflow-wrap:anywhere;word-break:break-word}
    .card .excerpt{font-family:var(--font-sans);font-size:12px;color:#4a4338;line-height:1.45;font-weight:400;display:block;-webkit-line-clamp:unset;overflow:visible;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}
    .card.evidence .title{font-size:13px;font-family:var(--font-serif)}
    .card.evidence .excerpt{font-family:var(--font-sans);font-size:10px;-webkit-line-clamp:unset}
    .card.fit:not(.bubble){height:auto;max-width:286px}
    .card.fit.link{max-width:220px}
    .card.fit.link.link-image{max-width:280px}
    .card.link{
      width:220px;min-height:0;padding:0 0 12px;overflow:visible;height:auto;
      background:
        linear-gradient(180deg,rgba(255,252,245,.55),transparent 18%),
        #f4ead2;
      box-shadow:2px 3px 0 rgba(0,0,0,.08),6px 14px 20px rgba(0,0,0,.32),12px 28px 40px rgba(0,0,0,.28),0 0 0 1px rgba(90,70,40,.25)
    }
    .card.link.link-image{
      width:280px;padding:0 0 6px;
      background:
        linear-gradient(180deg,rgba(255,252,245,.35),transparent 12%),
        #efe4c8;
      box-shadow:2px 3px 0 rgba(0,0,0,.08),8px 16px 24px rgba(0,0,0,.34),0 0 0 1px rgba(90,70,40,.28)
    }
    .card.link::before{display:none}
    .card.link::after{top:auto;height:0}
    .card.link .link-body{padding:0 12px}
    .card.link .link-body-image{padding:2px 10px 4px}
    .card.link .kind{padding-top:9px;letter-spacing:.14em}
    .card.link.link-image .kind{padding-top:4px;font-size:8px;letter-spacing:.1em;opacity:.75}
    .card.link .link-shot-wrap{
      position:relative;z-index:1;aspect-ratio:16/9;height:auto;margin:0;
      background:
        radial-gradient(ellipse at 50% 40%,rgba(90,70,50,.45),transparent 55%),
        linear-gradient(145deg,#2a2018 0%,#3d2e22 48%,#1c1510 100%);
      border-bottom:1px solid rgba(90,70,40,.28);overflow:hidden;
      isolation:isolate
    }
    .card.link.link-image .link-shot-wrap{
      aspect-ratio:var(--img-aspect, 4 / 5);
      min-height:0;
      border-bottom-color:rgba(90,70,40,.18)
    }
    .card.link .link-shot-wrap::after{
      content:"";position:absolute;left:0;right:0;bottom:0;height:46%;z-index:1;
      background:linear-gradient(transparent,rgba(12,8,5,.62));pointer-events:none
    }
    .card.link .link-shot{
      position:absolute;inset:0;width:100%;height:100%;
      object-fit:cover;object-position:top center;display:block;
      background:#241c16
    }
    .card.link .link-shot-wrap[data-kind="image"]::after{display:none}
    .card.link .link-shot-wrap[data-kind="image"] .link-shot{
      object-fit:contain;object-position:center;background:#1a1510
    }
    .card.link.link-image .link-shot-wrap[data-kind="image"] .link-shot{
      object-fit:contain
    }
    .card.link.link-image.is-resizing{
      outline:2px solid rgba(90,159,120,.55);outline-offset:3px
    }
    .img-resize{
      position:absolute;z-index:6;right:3px;bottom:3px;
      width:16px;height:16px;padding:0;border:0;border-radius:3px;
      cursor:nwse-resize;background:
        linear-gradient(135deg,transparent 46%,rgba(40,30,20,.55) 48% 52%,transparent 54%),
        linear-gradient(135deg,transparent 62%,rgba(40,30,20,.4) 64% 68%,transparent 70%);
      box-shadow:inset 0 0 0 1px rgba(90,70,40,.25);
      opacity:.7
    }
    .img-resize:hover,.card.link.link-image.is-resizing .img-resize{opacity:1;background-color:rgba(255,250,240,.55)}
    .card.link .link-shot.fallback{
      inset:auto;left:50%;top:40%;width:52px;height:52px;
      object-fit:contain;padding:0;border-radius:11px;
      transform:translate(-50%,-50%);
      box-shadow:0 2px 10px rgba(0,0,0,.35),0 0 0 1px rgba(255,240,210,.12);
      background:rgba(255,245,230,.08)
    }
    .card.link .link-shot-wrap[data-state="icon"],
    .card.link .link-shot-wrap[data-state="empty"],
    .card.link .link-shot-wrap[data-state="broken"]{
      background:
        radial-gradient(circle at 45% 38%,#5a4634 0%,#2a2018 62%,#1a120c 100%)
    }
    .card.link .link-shot-ph{
      position:absolute;inset:0;display:grid;place-items:center;
      padding:14px 18px 28px;text-align:center;pointer-events:none
    }
    .card.link .link-shot-ph span{
      font-family:var(--font-sans);font-size:11px;font-weight:500;
      letter-spacing:.04em;line-height:1.4;color:rgba(240,230,210,.62);
      text-shadow:0 1px 2px rgba(0,0,0,.45)
    }
    .card.link .link-chip{
      position:absolute;z-index:2;left:8px;bottom:8px;
      display:inline-flex;align-items:center;gap:5px;max-width:calc(100% - 16px);
      padding:3px 8px 3px 4px;border-radius:5px;
      background:rgba(18,12,8,.78);color:#f3ead8;
      font-family:var(--font-sans);font-size:10px;font-weight:600;
      letter-spacing:.02em;line-height:1.2;
      box-shadow:0 1px 4px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.08);
      backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)
    }
    .card.link .link-chip img{
      width:13px;height:13px;border-radius:3px;flex:none;
      background:#fff;box-shadow:0 0 0 1px rgba(255,255,255,.15)
    }
    .card.link .link-chip span{
      overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0
    }
    .card.link .title{
      font-size:15px;line-height:1.28;margin:5px 0 5px;color:#1a1510;
      display:block;-webkit-line-clamp:unset;overflow:visible;overflow-wrap:anywhere;word-break:break-word
    }
    .card.link.link-image .title{
      font-size:12px;line-height:1.25;margin:2px 0 0;color:#2a2218;
      display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden
    }
    .card.link .excerpt{
      display:block;-webkit-line-clamp:unset;overflow:visible;white-space:pre-wrap;
      font-size:11.5px;line-height:1.45;color:#4f463c;overflow-wrap:anywhere;word-break:break-word;
      border-top:1px dashed rgba(90,70,40,.2);padding-top:6px;margin:0
    }
    .card.link.link-image .excerpt{
      font-size:10px;line-height:1.3;margin:2px 0 0;padding-top:0;border-top:0;
      display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;
      white-space:normal;color:#6a5c4c
    }
    .card.link .excerpt.is-ph{color:#9a8a74;font-style:italic}
    .pin{
      left:50%;top:-12px;width:22px;height:22px;border-radius:50%;font-size:0;line-height:0;color:transparent;z-index:4;
      background:
        radial-gradient(circle at 30% 26%,rgba(255,255,255,.95) 0 14%,transparent 38%),
        radial-gradient(circle at 50% 58%,var(--type),#1a120c);
      box-shadow:
        0 1px 0 rgba(255,255,255,.55) inset,
        0 2px 4px rgba(0,0,0,.55),
        0 7px 10px rgba(0,0,0,.35),
        0 12px 2px -5px rgba(0,0,0,.4);
      border:1px solid rgba(0,0,0,.28)
    }
    .pin::after{
      content:"";position:absolute;left:50%;top:86%;width:2.5px;height:13px;
      background:linear-gradient(#d8dbe0,#6e737a 65%,#2a2d32);transform:translateX(-50%);
      border-radius:1px;box-shadow:0 1px 2px rgba(0,0,0,.45);pointer-events:none
    }
    .pin:hover{transform:translateX(-50%) scale(1.14)}
    .hint{font-size:12px;color:#8a7a66;line-height:1.45;margin:0}
    .field.check label{display:flex;align-items:flex-start;gap:8px;cursor:pointer;color:#5a4a38;line-height:1.4}
    .field.check input[type=checkbox]{width:auto;margin:.15em 0 0;flex:none;accent-color:var(--red)}
    .field.check input[type=checkbox]:disabled{cursor:default;opacity:.85}
    /* 缩放 < 40%：默认非「世界问题」收成色点；世界问题或 keepVisible 保持完整卡片 */
    .card.bubble{
      min-height:14px!important;width:14px!important;height:14px!important;padding:0;border-radius:50%;
      background:var(--type)!important;filter:none!important;overflow:hidden;border:none!important;
      box-shadow:0 2px 6px #0008,0 0 0 2px rgba(255,255,255,.2)!important;
      contain:strict
    }
    .card.bubble > *{visibility:hidden;pointer-events:none;content-visibility:hidden}
    .card.bubble::before,.card.bubble::after{display:none}
    .card.bubble.selected{outline-offset:3px}
    .stage.lod-world .card.world{z-index:2}
    .stage.lod-world .card:not(.bubble){filter:none}
    .empty{color:#d9c4a4;text-shadow:0 1px 2px #0008;font-family:var(--font-serif);font-size:16px;letter-spacing:-.01em}
    .side{background:linear-gradient(180deg,#1c1612,#14100e);border-right:1px solid #3a2c20}
    .case-name{background:#241c16;border-color:#4a3828}
    .btn{background:#2a211a;border-color:#4a3a2c}.btn:hover{border-color:#8a7058}.btn.primary{background:#b33b34;border-color:#b33b34}.btn.success{background:#2f9e6a;border-color:#2f9e6a;color:#fff}
    .brand{font-family:var(--font-serif);font-weight:400;letter-spacing:-.02em}
    .toolbar h1{font-family:var(--font-serif);font-weight:400;letter-spacing:-.02em}
    .empty-note{color:#6a5c4c}.field label{color:#7a6a55}
    .field input,.field textarea,.field select{background:#fffaf0;border-color:#d2c2a4;color:#241c14}
    .hint{font-size:12px;color:#7a6a55;line-height:1.45;margin:0 0 8px}

    /* 报纸剪报详情（画布上浮层，非侧栏） */
    @property --left-width{syntax:'<length>';inherits:true;initial-value:260px}
    .app{transition:--left-width .42s cubic-bezier(.22,1,.36,1),grid-template-columns .42s cubic-bezier(.22,1,.36,1)}
    .clip-detail{
      position:absolute;inset:0;z-index:12;pointer-events:none;
      display:block
    }
    .clip-detail[hidden]{display:none!important}
    .clip-paper{
      pointer-events:auto;position:absolute;left:50%;top:50%;
      width:min(720px,calc(100% - 28px));max-height:min(68vh,520px);
      overflow:auto;overscroll-behavior:contain;padding:0 0 12px;color:#241c14;
      transform:none;
      background:
        linear-gradient(180deg,rgba(255,255,255,.4),transparent 22%),
        repeating-linear-gradient(0deg,transparent,transparent 21px,rgba(40,50,70,.05) 22px),
        linear-gradient(135deg,#f8f1df,#efe4c8 55%,#e8d9b8);
      border:1px solid rgba(90,70,40,.28);
      box-shadow:
        1px 2px 0 rgba(0,0,0,.06),
        6px 14px 28px rgba(0,0,0,.35),
        0 0 0 1px rgba(255,255,255,.2) inset;
      filter:drop-shadow(0 1px 0 rgba(255,255,255,.2));
      cursor:default
    }
    .clip-paper.is-focus{
      box-shadow:
        1px 2px 0 rgba(0,0,0,.06),
        8px 18px 32px rgba(0,0,0,.42),
        0 0 0 2px rgba(229,83,75,.35),
        0 0 0 1px rgba(255,255,255,.2) inset
    }
    .clip-paper.is-dragging{opacity:.97;cursor:grabbing}
    .clip-drag{
      position:sticky;top:0;z-index:3;display:flex;align-items:flex-start;justify-content:space-between;gap:10px;
      padding:12px 16px 8px;cursor:grab;user-select:none;
      background:linear-gradient(180deg,#f8f1df 70%,rgba(248,241,223,0));
      border-bottom:1px solid rgba(90,70,40,.1)
    }
    .clip-drag:active,.clip-paper.is-dragging .clip-drag{cursor:grabbing}
    .clip-drag-meta{min-width:0;flex:1}
    .clip-body{padding:0 16px 4px}
    .clip-paper::before{
      content:"";position:absolute;left:50%;top:-10px;transform:translateX(-50%);
      width:18px;height:18px;border-radius:50%;
      background:radial-gradient(circle at 35% 30%,#ff8a7a,#c23a32 60%,#7a1e1a);
      box-shadow:0 2px 4px rgba(0,0,0,.35);pointer-events:none
    }
    .clip-close{
      flex:none;z-index:2;margin:0;
      border:1px solid #cbb89a;background:#fffaf0;color:#241c14;
      border-radius:7px;padding:4px 9px;font:inherit;font-size:12px;cursor:pointer
    }
    .clip-close:hover{border-color:#8a7058}
    .clip-paper h2.clip-heading,.clip-paper h2{
      font-family:var(--font-serif);font-weight:400;font-size:20px;
      letter-spacing:-.02em;line-height:1.2;margin:2px 0 0;clear:none
    }
    .clip-paper .clip-kicker{
      font-size:10px;letter-spacing:.12em;text-transform:uppercase;
      color:#8a7058;font-weight:700;margin:0 0 2px
    }
    .clip-layout{
      display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);
      gap:10px 16px;align-items:stretch;
      padding-top:2px;
      border-top:1px solid rgba(90,70,40,.14);
    }
    .clip-layout-link{grid-template-columns:1fr 1fr;align-items:start}
    .clip-col{min-width:0;display:flex;flex-direction:column}
    .clip-col-note{border-left:1px dashed rgba(90,70,40,.22);padding-left:14px}
    .clip-col-meta .field,.clip-col-note .field{margin:6px 0}
    .clip-paper .field{margin:6px 0;gap:4px}
    .clip-paper .field label{font-size:10px;letter-spacing:.07em}
    .clip-paper .field input,.clip-paper .field textarea,.clip-paper .field select{padding:7px 8px;border-radius:6px}
    .clip-paper .field-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
    .clip-paper .field-row .field{margin:6px 0}
    .clip-paper .field.check{margin:4px 0}
    .clip-paper .hint{font-size:11px;margin:0 0 4px;line-height:1.35}
    .clip-paper .connection-help{margin:6px 0 8px;padding:7px 9px;font-size:12px}
    .clip-paper .empty-note{margin:0 0 8px;font-size:13px}
    .clip-preview{
      position:relative;margin:0 0 8px;border-radius:6px;overflow:hidden;
      border:1px solid rgba(90,70,40,.22);background:#e8dcc4;
      aspect-ratio:16/9;max-height:132px
    }
    .clip-preview img{
      display:block;width:100%;height:100%;object-fit:cover;object-position:top center;
      background:#ddd2b8
    }
    .clip-preview.is-image img{object-fit:contain;object-position:center;background:#1a1510}
    .clip-preview img.is-fallback{object-fit:contain;padding:18px;background:#efe4c8}
    .clip-preview-empty{
      display:grid;place-items:center;height:100%;min-height:72px;
      color:#8a7058;font-size:12px;letter-spacing:.04em
    }
    .clip-paper .field-note{flex:1;display:flex;flex-direction:column;min-height:0;margin-top:6px}
    .clip-paper .field-note textarea{
      flex:1;min-height:160px;resize:vertical;line-height:1.45;
      background:
        repeating-linear-gradient(transparent,transparent 21px,rgba(40,50,70,.06) 22px),
        #fffaf0
    }
    .clip-paper .actions{margin-top:auto;padding-top:8px;gap:6px}
    .clip-paper .actions select.btn{max-width:100%;min-width:0;padding:8px 10px}
    .clip-paper .btn{background:#fffaf0;border-color:#cbb89a;color:#241c14;padding:7px 10px}
    .clip-paper .btn.primary{background:var(--red);border-color:var(--red);color:#fff}
    .clip-paper .btn.success{background:var(--green);border-color:var(--green);color:#fff}
    .layer-actions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
    .layer-actions .btn{padding:7px 6px;font-size:12px;text-align:center}
    .strings{z-index:10000;pointer-events:none}
    .card{z-index:1}
    .clip-detail.is-open .clip-paper{animation:clipUnfoldAnchored .42s cubic-bezier(.22,1,.36,1) both}
    .clip-paper.anchored{animation-name:clipUnfoldAnchored}
    @keyframes clipUnfoldAnchored{
      from{opacity:0;transform:translateY(10px) scale(.94)}
      to{opacity:1;transform:none}
    }
    @media(max-width:900px){
      .clip-paper{
        width:min(560px,calc(100% - 20px));max-height:min(72vh,560px);
      }
      .clip-layout,.clip-layout-link{grid-template-columns:1fr;gap:6px}
      .clip-col-note{border-left:0;padding-left:0;border-top:1px dashed rgba(90,70,40,.22);padding-top:8px}
      .clip-paper .field-note textarea{min-height:110px}
    }
    @media(max-width:560px){
      .clip-paper .field-row{grid-template-columns:1fr}
      .clip-preview{max-height:100px}
    }
    @media(prefers-reduced-motion:reduce){
      .app,.clip-detail.is-open .clip-paper{transition:none!important;animation:none!important}
    }

    /* 结构化多选与草案 */
    .structure-count{
      min-width:58px;color:#d9c4a4;font-size:12px;text-align:center
    }
    .card.primary-selected:not(.selected){
      outline:2px dashed var(--gold);outline-offset:4px
    }
    .structure-panel{
      position:absolute;inset:0;z-index:20000;display:grid;place-items:center;padding:18px
    }
    .structure-panel[hidden]{display:none!important}
    .structure-backdrop{
      position:absolute;inset:0;background:rgba(17,12,8,.58);backdrop-filter:blur(2px)
    }
    .structure-paper{
      position:relative;width:min(680px,100%);max-height:min(78vh,680px);overflow:auto;
      color:#241c14;border:1px solid rgba(90,70,40,.35);border-radius:3px;
      background:
        repeating-linear-gradient(0deg,transparent,transparent 21px,rgba(40,50,70,.045) 22px),
        linear-gradient(135deg,#faf3e2,#eee0bf);
      box-shadow:0 18px 60px rgba(0,0,0,.52),0 0 0 1px rgba(255,255,255,.2) inset;
      animation:clipUnfoldAnchored .3s cubic-bezier(.22,1,.36,1) both
    }
    .structure-paper::before{
      content:"";position:absolute;left:50%;top:8px;width:16px;height:16px;border-radius:50%;
      transform:translateX(-50%);background:radial-gradient(circle at 35% 30%,#ff8a7a,#c23a32 60%,#7a1e1a);
      box-shadow:0 2px 4px rgba(0,0,0,.3)
    }
    .structure-head{
      position:sticky;top:0;z-index:2;display:flex;align-items:flex-start;justify-content:space-between;
      gap:16px;padding:24px 22px 12px;background:linear-gradient(#faf3e2 78%,rgba(250,243,226,0));
      border-bottom:1px solid rgba(90,70,40,.13)
    }
    .structure-kicker{
      margin:0 0 2px;color:#8a7058;font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase
    }
    .structure-head h2{margin:0;font:400 23px/1.2 var(--font-serif);letter-spacing:-.02em}
    .structure-body{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:10px 22px 4px}
    .structure-body section{
      min-width:0;padding:12px;border:1px solid rgba(90,70,40,.16);background:rgba(255,250,240,.58)
    }
    .structure-body h3{
      margin:0 0 8px;color:#6f5843;font-size:11px;letter-spacing:.09em;text-transform:uppercase
    }
    .structure-body ul{margin:0;padding-left:19px;color:#4c4034;font-size:13px}
    .structure-body li+li{margin-top:5px}
    .structure-checks{display:flex;flex-direction:column;gap:7px}
    .structure-checks label{display:flex;align-items:flex-start;gap:8px;color:#352c24;font-size:13px;cursor:pointer}
    .structure-checks input{margin-top:3px;accent-color:var(--green)}
    .structure-checks span{min-width:0;overflow-wrap:anywhere}
    .structure-checks strong,.structure-checks small{display:block}
    .structure-checks small{margin-top:2px;color:#746552;line-height:1.35}
    .structure-checks b{color:var(--red);font-weight:700}
    .structure-empty{margin:0;color:#8a7964;font-size:13px}
    .structure-actions{
      position:sticky;bottom:0;display:flex;justify-content:flex-end;gap:8px;padding:12px 22px 18px;
      background:linear-gradient(rgba(238,224,191,0),#eee0bf 32%)
    }
    .structure-paper .btn{background:#fffaf0;border-color:#cbb89a;color:#241c14}
    .structure-paper .btn.success{background:var(--green);border-color:var(--green);color:#fff}
    @media(max-width:620px){
      .structure-panel{padding:10px}
      .structure-body{grid-template-columns:1fr;padding-inline:14px}
      .structure-head,.structure-actions{padding-inline:14px}
    }
    @media(prefers-reduced-motion:reduce){
      .structure-paper{animation:none!important}
    }
  
