/* === module: letter_dispatch === */
      /* ===== Unified Information Workbench ===== */
      .workbench-overlay {
        display: none;
        position: fixed;
        inset: 0;
        z-index: 950;
        background: rgba(2, 2, 8, 0.92);
        backdrop-filter: blur(10px);
        -webkit-backdrop-filter: blur(10px);
        padding: 20px;
      }
      .workbench-overlay.visible {
        display: flex;
      }
      .workbench-layout {
        display: flex;
        width: 100%; height: 100%;
        gap: 0;
        animation: panelSlideIn 0.35s ease;
      }

      /* Tool Rack (left column) */
      .wb-tool-rack {
        width: 72px;
        flex-shrink: 0;
        display: flex;
        flex-direction: column;
        align-items: center;
        gap: 4px;
        padding: 16px 6px;
        background: linear-gradient(180deg, #161620 0%, #0e0e18 100%);
        border-right: 1px solid #222;
        border-radius: 12px 0 0 12px;
        box-shadow: inset -4px 0 12px rgba(0,0,0,0.3);
      }
      .wb-tool {
        width: 56px; height: 56px;
        display: flex; flex-direction: column;
        align-items: center; justify-content: center;
        gap: 2px;
        border-radius: 10px;
        border: 1px solid transparent;
        cursor: pointer;
        transition: all 0.2s;
        position: relative;
      }
      .wb-tool:hover { background: #1e1e30; border-color: #3a3a5a; }
      .wb-tool.active { background: #1a2a3a; border-color: #60c8e8; box-shadow: 0 0 12px rgba(96,200,232,0.15); }
      .wb-tool.unavailable { opacity: 0.25; pointer-events: none; }
      .wb-tool.locked { opacity: 0.3; cursor: not-allowed; pointer-events: none; }
      .wb-tool-icon { font-size: 22px; line-height: 1; }
      .wb-tool-label { font-size: 9px; color: #888; white-space: nowrap; }
      .wb-tool-divider { width: 36px; height: 1px; background: #2a2a3a; margin: 4px 0; }

      /* Workspace (center) */
      .wb-workspace {
        flex: 1;
        display: flex;
        flex-direction: column;
        min-width: 0;
        background: #0d0d14;
      }
      .wb-workspace-header {
        padding: 14px 24px 10px;
        border-bottom: 1px solid #1a1a2a;
        text-align: center;
      }
      .wb-workspace-header h2 {
        font-size: 17px;
        font-weight: 700;
        color: #e0e0e0;
        margin: 0 0 2px;
      }
      .wb-subtitle {
        font-size: 12px;
        color: #666;
      }
      .wb-paper-area {
        flex: 1;
        overflow-y: auto;
        padding: 20px 24px;
        position: relative;
        background:
          radial-gradient(ellipse at 50% 40%, #18161e 0%, #0e0c14 70%),
          repeating-linear-gradient(
            0deg,
            transparent, transparent 39px,
            rgba(255,255,255,0.012) 39px, rgba(255,255,255,0.012) 40px
          ),
          repeating-linear-gradient(
            90deg,
            transparent, transparent 39px,
            rgba(255,255,255,0.008) 39px, rgba(255,255,255,0.008) 40px
          );
        background-color: #0e0c14;
        background-image:
          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.025'/%3E%3C/svg%3E"),
          radial-gradient(ellipse at 50% 40%, #18161e 0%, #0e0c14 70%);
      }
      .wb-paper-area::after {
        content: "";
        position: absolute;
        inset: 0;
        pointer-events: none;
        background: radial-gradient(ellipse at center, transparent 50%, rgba(0,0,0,0.4) 100%);
        z-index: 1;
      }
      .wb-paper-area > * {
        position: relative;
        z-index: 2;
      }
      .wb-workspace-footer {
        padding: 12px 24px;
        border-top: 1px solid #1a1a2a;
        text-align: center;
      }
      .wb-dispatch-btn {
        padding: 10px 32px;
        background: linear-gradient(135deg, #4dabf7, #3b5bdb);
        color: #fff;
        font-size: 14px;
        font-weight: 700;
        border: none;
        border-radius: 8px;
        cursor: pointer;
        font-family: inherit;
        transition: transform 0.1s, box-shadow 0.1s;
      }
      .wb-dispatch-btn:hover {
        transform: translateY(-1px);
        box-shadow: 0 4px 16px #4dabf730;
      }
      .wb-dispatch-summary {
        font-size: 11px;
        color: #666;
        margin-top: 4px;
      }

      /* Materials Tray (right column) */
      .wb-materials {
        width: 280px;
        flex-shrink: 0;
        display: flex;
        flex-direction: column;
        background: linear-gradient(180deg, #131320 0%, #0c0c16 100%);
        border-left: 1px solid #222;
        border-radius: 0 12px 12px 0;
        box-shadow: inset 4px 0 12px rgba(0,0,0,0.3);
      }
      .wb-materials-tabs {
        display: flex;
        border-bottom: 1px solid #222;
      }
      .wb-mat-tab {
        flex: 1;
        padding: 10px 0;
        text-align: center;
        font-size: 11px;
        color: #666;
        cursor: pointer;
        border-bottom: 2px solid transparent;
        transition: all 0.2s;
      }
      .wb-mat-tab:hover { color: #aaa; }
      .wb-mat-tab.active { color: #e0e0e0; border-bottom-color: #4dabf7; }
      .wb-mat-content {
        flex: 1;
        overflow-y: auto;
        padding: 10px;
      }

      /* Fragment cards in materials tray */
      .wb-frag-card {
        background: #1a1a2e;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='80'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.2' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='80' height='80' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
        border: 1px solid #2a2a4a;
        border-radius: 2px;
        padding: 10px 12px;
        margin-bottom: 8px;
        cursor: grab;
        transition: all 0.2s, transform 0.2s;
        font-size: 13px;
        user-select: none;
        clip-path: polygon(
          0% 2%, 3% 0%, 8% 3%, 15% 0%, 22% 2%, 30% 0%, 38% 1%, 45% 0%,
          52% 2%, 60% 0%, 68% 3%, 75% 0%, 82% 2%, 90% 0%, 95% 1%, 100% 0%,
          100% 98%, 97% 100%, 92% 97%, 85% 100%, 78% 98%, 70% 100%, 62% 99%,
          55% 100%, 48% 98%, 40% 100%, 32% 97%, 25% 100%, 18% 98%, 10% 100%, 5% 99%, 0% 100%
        );
      }
      .wb-frag-card { cursor: pointer; }
      .wb-frag-card:hover { border-color: #60c8e8; transform: rotate(0deg) scale(1.02); }
      .wb-frag-card:active { transform: rotate(0deg) scale(0.97); }
      .wb-frag-card.used { opacity: 0.35; pointer-events: none; }
      .wb-frag-card.in-slot { opacity: 0.4; border-style: dashed; border-color: #60c8e8; cursor: default; }
      .wb-frag-card .clip-speaker { color: #e8a040; font-size: 11px; margin-bottom: 4px; }
      .wb-frag-card .clip-content { color: #ccc; line-height: 1.4; }
      .wb-frag-card .clip-context { color: #666; font-size: 11px; margin-top: 4px; }

      /* Letter mini-cards in materials tray */
      .wb-letter-mini {
        padding: 8px 10px;
        background: #1a1a24;
        border: 1px solid #2a2a3a;
        border-radius: 8px;
        margin-bottom: 6px;
        cursor: pointer;
        font-size: 12px;
        transition: all 0.2s;
      }
      .wb-letter-mini:hover { border-color: #4dabf7; }
      .wb-letter-mini.focused { border-color: #e8a040; background: #1e1a20; }
      .wb-letter-mini .mini-meta { color: #888; margin-bottom: 2px; }
      .wb-letter-mini .mini-preview { color: #ccc; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

      .letter-card {
        background: #1a1a24;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100' height='100' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");
        border: 1px solid #2a2a3a;
        border-radius: 10px;
        padding: 14px 16px;
        margin-bottom: 10px;
        position: relative;
        transition: border-color 0.2s, transform 0.2s;
      }
      .letter-card:hover {
        transform: rotate(0deg) !important;
        border-color: #3a3a5a;
      }
      .letter-card.tampered {
        border-color: #e8415760;
        background-color: #1a151f;
      }

      .letter-meta {
        display: flex;
        align-items: center;
        gap: 8px;
        margin-bottom: 8px;
        font-size: 13px;
      }
      .letter-from {
        font-weight: 600;
        color: #e0e0e0;
      }
      .letter-arrow {
        color: #555;
      }
      .letter-to {
        font-weight: 600;
        color: #74c0fc;
        cursor: pointer;
        padding: 2px 8px;
        border-radius: 6px;
        border: 1px dashed #74c0fc40;
        transition: background 0.15s;
      }
      .letter-to:hover {
        background: #74c0fc15;
      }
      .letter-to.changed {
        color: #ffa8a8;
        border-color: #ff6b6b40;
      }

      .letter-impression-row {
        display: flex;
        gap: 12px;
        margin-bottom: 6px;
        font-size: 11px;
        line-height: 1.4;
        color: #888;
      }
      .letter-impression-side {
        flex: 1;
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 3px;
        padding: 3px 6px;
        background: #0d0d14;
        border-radius: 5px;
        min-height: 20px;
      }
      .letter-impression-side .imp-label {
        color: #666;
        margin-right: 2px;
        white-space: nowrap;
      }
      .letter-impression-side .imp-tag {
        display: inline-block;
        padding: 1px 5px;
        border-radius: 3px;
        font-size: 10px;
        white-space: nowrap;
      }
      .letter-impression-side .imp-none {
        color: #555;
        font-style: italic;
      }
      .letter-content {
        font-size: 13px;
        line-height: 1.6;
        color: #ccc;
        padding: 8px 12px;
        background: #10101a;
        border-radius: 8px;
        margin-bottom: 10px;
        min-height: 36px;
        position: relative;
      }
      .letter-content.redacted {
        color: #555;
        letter-spacing: 2px;
      }

      /* Stamp tool */
      .stamp-word-picker {
        display: flex; gap: 6px; margin-bottom: 6px; justify-content: center;
      }
      .stamp-word-option {
        display: inline-block; padding: 4px 12px; border-radius: 6px;
        border: 1px solid #3a3a5a; background: #1a1a2e; color: #ccc;
        cursor: pointer; font-size: 13px; transition: all 0.15s;
      }
      .stamp-word-option:hover { border-color: #e84157; color: #ffa8a8; }
      .stamp-word-option.active { border-color: #e84157; background: #e8415730; color: #ff8888; font-weight: 700; }
      .letter-content .stamp-insert {
        color: #e84157; font-weight: 900; font-size: 1.15em;
        text-shadow: 0 0 6px rgba(232,65,87,0.3);
        display: inline-block;
        animation: stampPress 0.35s ease-out;
      }
      .letter-content.stamp-picking {
        cursor: pointer; border: 1px dashed #e8415760; background: #1a101a;
      }
      .letter-content.stamp-picking .stamp-slot {
        display: inline-block; width: 3px; height: 1.1em;
        vertical-align: middle; margin: 0 -1px; border-radius: 2px;
        cursor: pointer; transition: width 0.1s, background 0.1s;
      }
      .letter-content.stamp-picking .stamp-slot:hover {
        width: 20px; background: #e8415750;
      }
      .stamp-hint {
        font-size: 10px; color: #e84157; margin-top: 4px;
        text-align: center; animation: toolHintPulse 1.5s ease infinite;
      }

      /* Ink tool */
      .letter-content.ink-picking {
        cursor: pointer; border: 1px dashed #1a1a1a80; background: #0d0d12;
      }
      .letter-content.ink-picking .ink-char {
        display: inline; cursor: pointer; padding: 1px 0;
        border-radius: 2px; transition: background 0.1s, color 0.1s;
      }
      .letter-content.ink-picking .ink-char:hover { background: #33333380; }
      .letter-content.ink-picking .ink-char.selected {
        background: #1a1a1a; color: transparent; text-shadow: 0 0 0 #555;
      }
      .ink-hint {
        font-size: 10px; color: #999; margin-top: 4px;
        text-align: center; animation: toolHintPulse 1.5s ease infinite;
      }

      /* Blank envelope tool */
      .letter-content.blank-mode {
        background: #0f0f1a;
        border: 1px dashed #5a5a8a60;
        padding: 8px;
      }
      .blank-letter-textarea {
        width: 100%;
        box-sizing: border-box;
        background: transparent;
        border: none;
        color: #ccc;
        font-size: 13px;
        line-height: 1.6;
        resize: vertical;
        outline: none;
        font-family: inherit;
        min-height: 60px;
      }
      .blank-letter-textarea::placeholder { color: #555; font-style: italic; }
      .blank-hint {
        font-size: 10px; color: #8888bb; margin-top: 4px;
        text-align: center;
      }
      .inked-char {
        background: #1a1a1a; color: #1a1a1a;
        padding: 0 1px; border-radius: 2px; user-select: none;
        display: inline-block; animation: inkSmear 0.4s ease-out;
      }

      /* Splice area inside workbench */
      .wb-splice-frag {
        background: #1a1a2e; border: 1px solid #3a3a5a; border-radius: 8px;
        padding: 10px 14px; position: relative; cursor: pointer;
        transition: all 0.2s;
      }
      .wb-splice-frag:hover { border-color: #e8a040; }
      .wb-splice-frag .frag-speaker { color: #e8a040; font-size: 11px; margin-right: 6px; }
      .wb-splice-frag .frag-text { color: #ccc; font-size: 13px; }
      .wb-splice-frag .frag-remove { position: absolute; top: 4px; right: 8px; color: #666; font-size: 14px; cursor: pointer; }
      .wb-splice-frag .frag-remove:hover { color: #ff6b6b; }
      .splice-joiner {
        text-align: center; color: #555; font-size: 16px;
        letter-spacing: 4px; padding: 4px 0;
      }

      @keyframes toolHintPulse {
        0%, 100% { opacity: 0.6; } 50% { opacity: 1; }
      }

      /* Pointer-based drag ghost */
      .phys-drag-ghost {
        position: fixed;
        z-index: 9999;
        pointer-events: none;
        transform-origin: center center;
        transition: none;
        opacity: 0.92;
        filter: drop-shadow(0 8px 24px rgba(0,0,0,0.5));
      }
      .phys-drag-ghost.lifting {
        animation: physLift 0.15s ease-out forwards;
      }
      .phys-drag-ghost.dropping {
        animation: physDrop 0.3s ease-out forwards;
      }
      .phys-drag-ghost.springing {
        animation: physSpring 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
      }
      @keyframes physLift {
        from { transform: scale(1) rotate(0deg); filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3)); }
        to { transform: scale(1.06) rotate(-1deg); filter: drop-shadow(0 12px 32px rgba(0,0,0,0.5)); }
      }
      @keyframes physDrop {
        0% { transform: scale(1.06); opacity: 0.9; }
        50% { transform: scale(0.97); opacity: 1; }
        100% { transform: scale(1); opacity: 0; }
      }
      @keyframes physSpring {
        0% { transform: translate(0,0) scale(1.05); }
        40% { transform: translate(var(--sx), var(--sy)) scale(1.02); }
        70% { transform: translate(calc(var(--sx) * 1.05), calc(var(--sy) * 1.05)) scale(0.98); }
        100% { transform: translate(var(--sx), var(--sy)) scale(1); opacity: 0; }
      }
      .wb-paper-area.drag-target-active {
        outline: 2px dashed #60c8e8;
        outline-offset: -4px;
        background: rgba(96,200,232,0.03);
      }

      /* Tool feedback animations */
      @keyframes stampPress {
        0% { transform: scale(1.8) rotate(-8deg); opacity: 0.4; }
        35% { transform: scale(0.85) rotate(2deg); opacity: 1; }
        55% { transform: scale(1.15) rotate(-1deg); }
        100% { transform: scale(1) rotate(0deg); }
      }
      @keyframes inkSmear {
        0% { transform: scaleX(0.3); opacity: 0.4; filter: blur(2px); }
        40% { transform: scaleX(1.2); opacity: 0.9; filter: blur(1px); }
        100% { transform: scaleX(1); opacity: 1; filter: blur(0); }
      }
      @keyframes tapeStretch {
        0% { transform: scaleX(0); opacity: 0; }
        30% { transform: scaleX(1.15); opacity: 0.6; }
        100% { transform: scaleX(1); opacity: 1; }
      }
      @keyframes sealDrip {
        0% { transform: scale(0.5) rotate(-15deg); opacity: 0; }
        30% { transform: scale(1.2) rotate(5deg); opacity: 1; }
        50% { transform: scale(0.95) rotate(-2deg); }
        100% { transform: scale(1) rotate(0); }
      }

      /* Tape visual between splice fragments */
      .splice-tape {
        display: block;
        height: 6px;
        margin: 4px auto;
        width: 60%;
        background: linear-gradient(90deg, transparent 0%, rgba(255,220,150,0.25) 15%, rgba(255,220,150,0.4) 50%, rgba(255,220,150,0.25) 85%, transparent 100%);
        border-radius: 1px;
        animation: tapeStretch 0.5s ease-out;
      }

      /* Tool rack shake feedback */
      @keyframes toolShake {
        0%, 100% { transform: translateX(0); }
        20% { transform: translateX(-3px) rotate(-2deg); }
        40% { transform: translateX(3px) rotate(2deg); }
        60% { transform: translateX(-2px) rotate(-1deg); }
        80% { transform: translateX(2px) rotate(1deg); }
      }
      .wb-tool.shake { animation: toolShake 0.4s ease; }

      .letter-actions {
        display: flex;
        gap: 6px;
        flex-wrap: wrap;
      }
      .letter-action-btn {
        padding: 4px 10px;
        font-size: 11px;
        border: 1px solid #333;
        background: #1e1e2a;
        color: #aaa;
        border-radius: 6px;
        cursor: pointer;
        font-family: inherit;
        transition: all 0.15s;
      }
      .letter-action-btn:hover {
        background: #2a2a3a;
        color: #e0e0e0;
      }
      .letter-action-btn.active {
        border-color: #e84157;
        color: #ffa8a8;
        background: #e8415718;
      }
      .letter-action-btn.reset {
        border-color: #51cf6640;
        color: #8ce99a;
      }
      .letter-action-btn.reset:hover {
        background: #51cf6618;
      }

      .letter-tamper-badge {
        position: absolute;
        top: 8px;
        right: 10px;
        font-size: 9px;
        padding: 2px 8px;
        border-radius: 4px;
        background: #e8415730;
        color: #ffa8a8;
        font-weight: 600;
      }

      .letter-recipient-dropdown {
        position: fixed;
        background: #1e1e2e;
        border: 1px solid #333;
        border-radius: 8px;
        padding: 4px;
        z-index: 1200;
        min-width: 120px;
        box-shadow: 0 4px 16px #0008;
      }
      .letter-recipient-dropdown button {
        display: block;
        width: 100%;
        padding: 6px 14px;
        text-align: left;
        border: none;
        background: transparent;
        color: #ccc;
        font-size: 12px;
        border-radius: 4px;
        cursor: pointer;
        font-family: inherit;
      }
      .letter-recipient-dropdown button:hover {
        background: #2a2a3a;
        color: #fff;
      }

      /* ===== Letter table 3D pass ===== */
      .workbench-overlay {
        background:
          radial-gradient(circle at 52% 18%, rgba(210, 160, 96, 0.18), transparent 30%),
          radial-gradient(circle at 8% 92%, rgba(80, 45, 25, 0.34), transparent 36%),
          linear-gradient(180deg, rgba(18, 10, 8, 0.96), rgba(5, 4, 7, 0.98));
        padding: clamp(14px, 2vw, 28px);
        perspective: 1400px;
      }
      .workbench-layout {
        gap: 18px;
        border-radius: 28px;
        background:
          linear-gradient(145deg, rgba(95, 58, 34, 0.20), rgba(12, 8, 8, 0.42)),
          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.48' numOctaves='5' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='0.08'/%3E%3C/svg%3E");
        box-shadow:
          0 34px 90px rgba(0, 0, 0, 0.68),
          inset 0 1px 0 rgba(255, 220, 170, 0.08);
        overflow: hidden;
        transform: rotateX(2deg);
        transform-style: preserve-3d;
      }
      .wb-tool-rack {
        width: 92px;
        gap: 10px;
        padding: 24px 10px;
        background:
          radial-gradient(ellipse at 50% 12%, rgba(255, 214, 150, 0.16), transparent 34%),
          linear-gradient(90deg, #3a2117, #7b4b2e 46%, #2b1711);
        border-right: 1px solid rgba(255, 205, 150, 0.10);
        border-radius: 24px 8px 8px 24px;
        box-shadow:
          inset -14px 0 24px rgba(0, 0, 0, 0.36),
          inset 8px 0 14px rgba(255, 210, 150, 0.08);
      }
      .wb-tool-rack::before {
        content: "笔筒";
        display: grid;
        place-items: center;
        width: 64px;
        height: 26px;
        margin-bottom: 4px;
        border-radius: 999px;
        background: radial-gradient(ellipse at center, rgba(26, 12, 8, 0.88), rgba(5, 3, 3, 0.96));
        border: 1px solid rgba(255, 220, 170, 0.16);
        color: rgba(255, 231, 196, 0.72);
        font-size: 11px;
        letter-spacing: 0.18em;
      }
      .wb-tool {
        width: 64px;
        height: 64px;
        border-radius: 18px 18px 12px 12px;
        background:
          linear-gradient(180deg, rgba(255, 225, 180, 0.11), rgba(0, 0, 0, 0.18)),
          rgba(42, 25, 18, 0.62);
        border-color: rgba(255, 220, 170, 0.10);
        box-shadow:
          0 12px 18px rgba(0, 0, 0, 0.28),
          inset 0 1px 0 rgba(255, 235, 200, 0.10);
        transform: translateZ(24px) rotate(-2deg);
      }
      .wb-tool:nth-child(2n) { transform: translateZ(18px) rotate(3deg); }
      .wb-tool:hover {
        background:
          linear-gradient(180deg, rgba(255, 224, 174, 0.18), rgba(62, 34, 22, 0.48));
        border-color: rgba(238, 186, 118, 0.48);
        transform: translateZ(34px) translateY(-3px) rotate(0deg);
      }
      .wb-tool.active {
        background:
          radial-gradient(circle at 50% 24%, rgba(192, 45, 38, 0.28), transparent 48%),
          linear-gradient(180deg, rgba(255, 221, 171, 0.22), rgba(66, 26, 19, 0.72));
        border-color: rgba(210, 58, 46, 0.72);
        box-shadow:
          0 18px 26px rgba(0, 0, 0, 0.38),
          0 0 0 3px rgba(210, 58, 46, 0.12),
          inset 0 1px 0 rgba(255, 235, 200, 0.16);
      }
      .wb-tool-icon {
        font-size: 25px;
        filter: drop-shadow(0 3px 2px rgba(0, 0, 0, 0.4));
      }
      .wb-tool-label {
        color: rgba(255, 231, 202, 0.68);
      }
      .wb-tool-divider {
        background: rgba(255, 220, 170, 0.14);
      }
      .wb-workspace {
        background: transparent;
      }
      .wb-workspace-header {
        min-height: 64px;
        padding: 16px 26px 10px;
        border-bottom: 0;
        text-align: left;
        background: linear-gradient(180deg, rgba(12, 7, 5, 0.48), transparent);
      }
      .wb-workspace-header h2 {
        color: #f3dfbf;
        font-size: 20px;
        letter-spacing: 0.12em;
        text-shadow: 0 2px 14px rgba(0, 0, 0, 0.45);
      }
      .wb-subtitle {
        color: rgba(235, 211, 179, 0.62);
      }
      .wb-paper-area {
        overflow: auto;
        padding: 0 26px 20px;
        background:
          radial-gradient(ellipse at 44% 26%, rgba(240, 184, 105, 0.16), transparent 34%),
          radial-gradient(ellipse at 50% 115%, rgba(0, 0, 0, 0.60), transparent 60%),
          linear-gradient(115deg, #57351f 0%, #2e1a12 48%, #160e0b 100%);
        background-color: #2e1a12;
        transform-style: preserve-3d;
      }
      .wb-paper-area::before {
        content: "";
        position: absolute;
        inset: 0;
        pointer-events: none;
        background:
          repeating-linear-gradient(98deg, rgba(255, 230, 190, 0.025) 0 1px, transparent 1px 18px),
          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.78' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='240' height='160' filter='url(%23n)' opacity='0.075'/%3E%3C/svg%3E");
        mix-blend-mode: screen;
        opacity: 0.6;
      }
      .wb-paper-area::after {
        background:
          linear-gradient(90deg, rgba(0,0,0,0.38), transparent 18%, transparent 82%, rgba(0,0,0,0.46)),
          radial-gradient(ellipse at center, transparent 45%, rgba(0,0,0,0.36) 100%);
      }
      .wb-letter-stage {
        min-height: 100%;
        display: flex;
        flex-direction: column;
        gap: 18px;
        transform-style: preserve-3d;
      }
      .wb-tool-cloth {
        width: min(760px, 88%);
        margin: 0 auto;
        display: flex;
        justify-content: space-between;
        gap: 22px;
        align-items: center;
        padding: 14px 22px 16px;
        color: #4b2719;
        background:
          radial-gradient(circle at 12% 0%, rgba(255, 255, 255, 0.48), transparent 28%),
          linear-gradient(180deg, #e3c08d, #b78355 68%, #6f3f2a);
        border: 1px solid rgba(82, 42, 24, 0.42);
        border-radius: 0 0 22px 22px;
        box-shadow:
          0 20px 34px rgba(0, 0, 0, 0.34),
          inset 0 -10px 18px rgba(72, 30, 16, 0.20);
        clip-path: polygon(0 0, 100% 0, 98% 82%, 88% 100%, 71% 88%, 57% 100%, 39% 89%, 24% 100%, 9% 84%);
        transform: translateZ(62px) rotateX(-3deg);
        animation: clothDrop 0.36s cubic-bezier(0.22, 1, 0.36, 1);
      }
      .wb-tool-cloth.idle {
        opacity: 0.88;
      }
      .cloth-kicker {
        color: rgba(75, 39, 25, 0.62);
        font-size: 10px;
        letter-spacing: 0.22em;
      }
      .cloth-title {
        font-weight: 800;
        letter-spacing: 0.08em;
        font-size: 16px;
      }
      .cloth-copy {
        margin-top: 3px;
        color: rgba(75, 39, 25, 0.74);
        font-size: 12px;
      }
      .cloth-controls {
        display: flex;
        gap: 10px;
        flex-wrap: wrap;
        justify-content: flex-end;
      }
      .stamp-cloth .stamp-word-option {
        min-width: 42px;
        border-radius: 999px;
        border: 1px solid rgba(92, 39, 27, 0.28);
        color: #8f211c;
        background:
          radial-gradient(circle at 50% 35%, rgba(255,255,255,0.42), transparent 46%),
          rgba(110, 48, 32, 0.12);
        box-shadow: inset 0 -3px 0 rgba(97, 38, 25, 0.16);
      }
      .stamp-cloth .stamp-word-option.active {
        color: #f8d9b6;
        background:
          radial-gradient(circle at 50% 35%, rgba(255,255,255,0.18), transparent 42%),
          #8b231f;
        border-color: rgba(80, 18, 14, 0.58);
      }
      .letter-camera-rail {
        flex: 1;
        display: grid;
        grid-template-columns: minmax(420px, 1fr) 160px;
        gap: 26px;
        min-height: 0;
        perspective: 1200px;
      }
      .letter-table-top {
        position: relative;
        min-height: 520px;
        border-radius: 30px;
        transform: rotateX(7deg) translateZ(0);
        transform-origin: 50% 20%;
        transform-style: preserve-3d;
      }
      .table-lamp-glow {
        position: absolute;
        inset: 4% 10% auto;
        height: 46%;
        pointer-events: none;
        background: radial-gradient(ellipse at center, rgba(255, 214, 145, 0.22), transparent 66%);
        filter: blur(8px);
        transform: translateZ(4px);
      }
      .letter-scatter {
        position: relative;
        display: grid;
        grid-template-columns: repeat(2, minmax(230px, 1fr));
        gap: 22px 24px;
        align-content: center;
        min-height: 500px;
        padding: clamp(22px, 4vw, 52px);
        transform-style: preserve-3d;
      }
      .letter-table-empty {
        margin: auto;
        padding: 42px;
        color: rgba(244, 217, 184, 0.58);
        text-align: center;
        border: 1px dashed rgba(244, 217, 184, 0.18);
        border-radius: 24px;
        background: rgba(28, 15, 10, 0.34);
      }
      .letter-card {
        min-height: 205px;
        margin: 0;
        padding: 20px 18px 16px;
        color: #2d1c12;
        background:
          linear-gradient(102deg, rgba(255, 255, 255, 0.42), transparent 34%),
          linear-gradient(180deg, #f0dfbe, #caa579 92%);
        background-image:
          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='110' height='110'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.1' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='110' height='110' filter='url(%23n)' opacity='0.09'/%3E%3C/svg%3E"),
          linear-gradient(180deg, #f0dfbe, #caa579 92%);
        border: 1px solid rgba(104, 59, 32, 0.28);
        border-radius: 6px;
        box-shadow:
          0 18px 22px rgba(20, 8, 3, 0.36),
          0 2px 0 rgba(255,255,255,0.26) inset,
          0 -5px 0 rgba(80, 39, 17, 0.08) inset;
        transform:
          translate3d(var(--scatter-x), var(--scatter-y), 32px)
          rotate(var(--paper-rot));
        transition:
          transform 0.26s cubic-bezier(0.22, 1, 0.36, 1),
          box-shadow 0.26s,
          filter 0.26s;
        cursor: pointer;
        transform-style: preserve-3d;
      }
      .letter-card:hover,
      .letter-card.focused {
        transform:
          translate3d(calc(var(--scatter-x) * 0.35), calc(var(--scatter-y) * 0.35 - 12px), 94px)
          rotate(0deg)
          scale(1.045) !important;
        z-index: 6;
        box-shadow:
          0 34px 54px rgba(16, 6, 2, 0.54),
          0 0 0 1px rgba(172, 74, 48, 0.30),
          0 2px 0 rgba(255,255,255,0.34) inset;
      }
      .letter-card.tampered {
        border-color: rgba(139, 35, 31, 0.52);
        background-image:
          url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='110' height='110'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.1' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='110' height='110' filter='url(%23n)' opacity='0.09'/%3E%3C/svg%3E"),
          linear-gradient(180deg, #efd7b8, #bd846f 92%);
      }
      .letter-corner-pin {
        position: absolute;
        top: 9px;
        left: 10px;
        width: 14px;
        height: 14px;
        border-radius: 50%;
        background: radial-gradient(circle at 38% 30%, #fff2, #9b271f 55%, #38100c);
        box-shadow: 0 3px 4px rgba(0, 0, 0, 0.28);
      }
      .letter-meta {
        margin: 5px 0 10px;
        color: #5f3925;
        font-size: 14px;
        align-items: flex-start;
      }
      .letter-arrow { color: rgba(95, 57, 37, 0.42); }
      .letter-recipient-block {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        gap: 5px;
        min-width: 0;
        flex: 1;
      }
      .letter-to {
        color: #682c1c;
        border-color: rgba(104, 44, 28, 0.30);
        background: rgba(255, 244, 218, 0.42);
        width: fit-content;
      }
      .letter-to:hover {
        background: rgba(255, 244, 218, 0.72);
      }
      .letter-to.changed {
        color: #9b271f;
        border-color: rgba(155, 39, 31, 0.44);
        background: rgba(155, 39, 31, 0.10);
      }
      .letter-impression-row {
        display: grid;
        grid-template-columns: 1fr;
        gap: 4px;
        width: 100%;
        margin: 0;
        color: rgba(67, 38, 24, 0.62);
      }
      .letter-impression-side {
        flex: unset;
        background: rgba(255, 248, 226, 0.30);
        border: 1px solid rgba(105, 61, 34, 0.10);
        padding: 3px 6px;
        font-size: 10px;
        min-height: 18px;
      }
      .letter-content {
        color: #3a2417;
        background:
          repeating-linear-gradient(180deg, transparent 0 25px, rgba(105, 61, 34, 0.10) 26px 27px),
          rgba(255, 250, 229, 0.56);
        border: 1px solid rgba(105, 61, 34, 0.12);
        border-radius: 4px;
      }
      .letter-content.stamp-picking {
        background: rgba(255, 238, 214, 0.74);
        border-color: rgba(145, 37, 31, 0.38);
      }
      .letter-content.ink-picking {
        background: rgba(230, 216, 190, 0.76);
        border-color: rgba(36, 24, 18, 0.42);
      }
      .letter-tool-hint {
        color: rgba(72, 39, 24, 0.62);
        font-size: 11px;
      }
      .letter-action-btn {
        background: rgba(70, 39, 25, 0.12);
        border-color: rgba(75, 39, 25, 0.22);
        color: #5e3927;
      }
      .letter-action-btn:hover {
        background: rgba(70, 39, 25, 0.22);
        color: #2d1c12;
      }
      .letter-tamper-badge {
        background: rgba(124, 29, 24, 0.16);
        color: #7c1d18;
        border: 1px solid rgba(124, 29, 24, 0.22);
      }
      .recipient-docks {
        align-self: center;
        display: flex;
        flex-direction: column;
        gap: 12px;
        padding: 18px 14px;
        border-radius: 26px;
        background:
          linear-gradient(180deg, rgba(255, 229, 185, 0.12), rgba(45, 23, 15, 0.62)),
          rgba(35, 20, 14, 0.76);
        border: 1px solid rgba(255, 221, 175, 0.12);
        box-shadow:
          0 22px 40px rgba(0, 0, 0, 0.38),
          inset 0 1px 0 rgba(255, 232, 196, 0.08);
        transform: rotateX(6deg) translateZ(42px);
      }
      .recipient-docks-title {
        color: rgba(244, 217, 184, 0.72);
        font-size: 12px;
        text-align: center;
        letter-spacing: 0.22em;
      }
      .recipient-dock {
        display: flex;
        flex-direction: column;
        align-items: stretch;
        gap: 4px;
        min-width: 112px;
        padding: 12px 13px;
        border: 1px solid color-mix(in srgb, var(--dock-color) 42%, rgba(255,255,255,0.18));
        border-radius: 16px 16px 8px 8px;
        color: #f2dfc4;
        background:
          linear-gradient(180deg, color-mix(in srgb, var(--dock-color) 24%, rgba(74, 38, 25, 0.84)), rgba(26, 13, 10, 0.86));
        box-shadow: 0 10px 16px rgba(0,0,0,0.30), inset 0 1px 0 rgba(255,255,255,0.10);
        cursor: default;
        font-family: inherit;
      }
      .recipient-name {
        font-weight: 700;
      }
      .recipient-count {
        color: rgba(245, 220, 190, 0.58);
        font-size: 11px;
      }
      .wb-materials {
        width: 270px;
        background:
          linear-gradient(180deg, rgba(61, 37, 25, 0.78), rgba(20, 12, 10, 0.92));
        border-left: 1px solid rgba(255, 218, 170, 0.10);
        border-radius: 8px 24px 24px 8px;
      }
      .wb-materials-tabs {
        border-bottom-color: rgba(255, 218, 170, 0.10);
      }
      .wb-mat-tab.active {
        color: #f0d9b7;
        border-bottom-color: #b78355;
      }
      .wb-letter-mini {
        background: rgba(229, 200, 158, 0.10);
        border-color: rgba(255, 220, 170, 0.12);
        border-radius: 14px;
      }
      .wb-letter-mini:hover,
      .wb-letter-mini.focused {
        border-color: rgba(215, 151, 91, 0.62);
        background: rgba(229, 200, 158, 0.16);
      }
      .wb-workspace-footer {
        border-top: 1px solid rgba(255, 220, 170, 0.10);
        background: linear-gradient(180deg, transparent, rgba(0,0,0,0.20));
      }
      .wb-dispatch-btn {
        border-radius: 999px;
        background:
          radial-gradient(circle at 50% 22%, rgba(255,255,255,0.22), transparent 42%),
          linear-gradient(180deg, #a83429, #5a1713);
        box-shadow:
          0 12px 22px rgba(0, 0, 0, 0.34),
          inset 0 1px 0 rgba(255, 230, 200, 0.18);
      }
      .wb-dispatch-btn:hover {
        transform: translateY(-2px);
        box-shadow:
          0 18px 30px rgba(0, 0, 0, 0.42),
          0 0 0 4px rgba(168, 52, 41, 0.16);
      }
      .wb-dispatch-summary {
        color: rgba(234, 210, 181, 0.58);
      }
      @keyframes clothDrop {
        from {
          opacity: 0;
          transform: translate3d(0, -24px, 62px) rotateX(-12deg);
        }
        to {
          opacity: 1;
          transform: translateZ(62px) rotateX(-3deg);
        }
      }
      @media (max-width: 1100px) {
        .letter-camera-rail {
          grid-template-columns: 1fr;
        }
        .recipient-docks {
          flex-direction: row;
          flex-wrap: wrap;
          justify-content: center;
          transform: translateZ(36px);
        }
        .wb-materials {
          display: none;
        }
      }

      /* Letter table pass: foreground letters with inline recipient relationship info. */
      .workbench-overlay[data-mode="letters"] .wb-materials {
        display: none;
      }
      .workbench-overlay[data-mode="letters"] .wb-tool-rack {
        display: none;
      }
      .workbench-overlay[data-mode="letters"] .wb-tool[data-tool="envelope"],
      .workbench-overlay[data-mode="letters"] .wb-tool[data-tool="blank"] {
        display: none;
      }
      .workbench-overlay[data-mode="letters"] .workbench-layout {
        display: grid;
        grid-template-columns: minmax(0, 1fr);
      }
      .workbench-overlay[data-held-tool="stamp"] .wb-paper-area,
      .workbench-overlay[data-held-tool="ink"] .wb-paper-area {
        cursor: none;
      }
      .workbench-overlay[data-mode="letters"] .wb-workspace-header {
        text-align: center;
        min-height: 50px;
        padding: 10px 20px 6px;
      }
      .workbench-overlay[data-mode="letters"] .letter-camera-rail {
        display: block;
        height: 100%;
      }
      .workbench-overlay[data-mode="letters"] .letter-table-top {
        height: min(560px, calc(100vh - 220px));
        min-height: 440px;
        transform: rotateX(5deg) translateZ(0);
      }
      .workbench-overlay[data-mode="letters"] .wb-paper-area {
        overflow: hidden;
        padding: 0 18px 10px;
      }
      .workbench-overlay[data-mode="letters"] .wb-letter-stage {
        height: 100%;
        gap: 8px;
      }
      .workbench-overlay[data-mode="letters"] .wb-tool-cloth {
        padding: 8px 16px 12px;
        transform: translateZ(42px) rotateX(-3deg);
      }
      .relationship-diorama {
        display: none;
      }
      .relationship-title {
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%) rotateX(-16deg);
        color: rgba(244, 217, 184, 0.45);
        font-size: 11px;
        letter-spacing: 0.24em;
        pointer-events: none;
      }
      .relationship-lines {
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
        overflow: visible;
        transform: translateZ(42px);
        filter: drop-shadow(0 10px 7px rgba(0,0,0,0.24));
      }
      .relation-thread {
        stroke: rgba(162, 42, 36, 0.52);
        stroke-width: 2.2;
        stroke-linecap: round;
        stroke-dasharray: 6 6;
      }
      .relation-thread.strong {
        stroke: rgba(201, 43, 35, 0.90);
        stroke-width: 3.2;
        stroke-dasharray: none;
      }
      .relation-thread.faint {
        opacity: 0.28;
        stroke-dasharray: 4 8;
      }
      .relation-figure {
        position: absolute;
        left: var(--rx);
        top: var(--ry);
        width: 46px;
        height: 72px;
        transform: translate(-50%, -50%) translateZ(66px) rotateX(-16deg);
        display: flex;
        flex-direction: column;
        align-items: center;
        pointer-events: none;
      }
      .relation-head {
        width: 28px;
        height: 28px;
        border-radius: 50%;
        display: grid;
        place-items: center;
        color: #fff;
        font-size: 13px;
        font-weight: 800;
        background: var(--char-color);
        box-shadow: 0 10px 18px rgba(0,0,0,0.32), 0 0 0 3px rgba(255,235,200,0.12);
        z-index: 2;
      }
      .relation-body {
        width: 20px;
        height: 28px;
        margin-top: -3px;
        border-radius: 12px 12px 6px 6px;
        background: linear-gradient(180deg, color-mix(in srgb, var(--char-color) 58%, #2d1812), #1b0f0c);
        box-shadow: 0 12px 14px rgba(0,0,0,0.28);
      }
      .relation-name {
        margin-top: 4px;
        color: rgba(255, 232, 196, 0.78);
        font-size: 10px;
        text-shadow: 0 2px 8px rgba(0,0,0,0.56);
      }
      .letter-sorting-table {
        position: relative;
        display: block;
        height: 100%;
        min-height: 360px;
        padding: clamp(18px, 3vw, 42px) clamp(24px, 5vw, 72px) clamp(22px, 4vw, 48px);
        transform-style: preserve-3d;
      }
      .desk-props {
        position: absolute;
        inset: 0;
        z-index: 5;
        pointer-events: none;
        transform-style: preserve-3d;
      }
      .desk-tool {
        position: absolute;
        border: 0;
        background: transparent;
        padding: 0;
        color: inherit;
        cursor: pointer;
        pointer-events: auto;
        font-family: inherit;
        transform-style: preserve-3d;
        transition: transform 0.22s cubic-bezier(0.22, 1, 0.36, 1), filter 0.22s, opacity 0.22s;
      }
      .desk-tool:hover {
        filter: brightness(1.1);
      }
      .desk-tool.active {
        opacity: 0.28;
        filter: saturate(0.5);
      }
      .desk-tool.active::after {
        content: "";
        position: absolute;
        inset: -16px;
        border: 1px dashed rgba(245, 213, 169, 0.42);
        border-radius: 999px;
        transform: translateZ(-4px) rotateX(18deg);
        box-shadow: inset 0 0 18px rgba(0, 0, 0, 0.22);
      }
      .desk-tool-shadow {
        position: absolute;
        left: 50%;
        bottom: -13px;
        width: 92%;
        height: 22px;
        border-radius: 999px;
        background: rgba(0,0,0,0.35);
        filter: blur(10px);
        transform: translateX(-50%) translateZ(-8px);
      }
      .desk-tool-label {
        position: absolute;
        left: 50%;
        top: calc(100% + 9px);
        transform: translateX(-50%) rotateX(-5deg);
        padding: 3px 9px;
        border-radius: 999px;
        background: rgba(34, 17, 10, 0.68);
        border: 1px solid rgba(255, 224, 172, 0.12);
        color: rgba(255, 231, 196, 0.78);
        font-size: 10px;
        letter-spacing: 0.08em;
        white-space: nowrap;
        box-shadow: 0 8px 14px rgba(0,0,0,0.28);
      }
      .desk-tool-stamp {
        right: clamp(44px, 8vw, 116px);
        top: 38%;
        width: 82px;
        height: 96px;
        transform: translate3d(0, 0, 72px) rotate(-11deg) rotateX(4deg);
      }
      .desk-tool-stamp:hover {
        transform: translate3d(0, -7px, 104px) rotate(-5deg) rotateX(2deg);
      }
      .desk-tool-stamp.active {
        transform: translate3d(0, 0, 30px) rotate(-11deg) rotateX(4deg);
      }
      .desk-tool-body {
        position: absolute;
        inset: 0;
        display: grid;
        place-items: center;
        transform-style: preserve-3d;
      }
      .desk-stamp-handle {
        position: absolute;
        top: 3px;
        width: 34px;
        height: 52px;
        border-radius: 18px 18px 10px 10px;
        background:
          radial-gradient(circle at 40% 18%, rgba(255,255,255,0.35), transparent 28%),
          linear-gradient(180deg, #9d5841, #4a2119 72%, #21100d);
        box-shadow:
          0 14px 18px rgba(0,0,0,0.34),
          inset 0 1px 0 rgba(255,235,200,0.24);
        transform: translateZ(32px);
      }
      .desk-stamp-face {
        position: absolute;
        bottom: 12px;
        display: grid;
        place-items: center;
        width: 64px;
        height: 34px;
        border-radius: 50%;
        color: #f6d3b3;
        background:
          radial-gradient(circle at 50% 45%, rgba(255, 215, 172, 0.22), transparent 44%),
          linear-gradient(180deg, #8b231f, #4d120f);
        border: 1px solid rgba(35, 5, 3, 0.54);
        font-weight: 900;
        font-size: 18px;
        text-shadow: 0 2px 2px rgba(0,0,0,0.35);
        box-shadow:
          0 10px 16px rgba(0,0,0,0.34),
          inset 0 -4px 0 rgba(39, 6, 4, 0.26);
        transform: translateZ(18px) rotateX(12deg);
      }
      .desk-tool-ink {
        right: clamp(58px, 10vw, 144px);
        bottom: 16%;
        width: 142px;
        height: 42px;
        transform: translate3d(0, 0, 70px) rotate(18deg) rotateX(6deg);
      }
      .desk-tool-ink:hover {
        transform: translate3d(0, -7px, 104px) rotate(10deg) rotateX(2deg);
      }
      .desk-tool-ink.active {
        transform: translate3d(0, 0, 28px) rotate(18deg) rotateX(6deg);
      }
      .desk-pen-body {
        position: absolute;
        left: 8px;
        top: 11px;
        width: 112px;
        height: 18px;
        border-radius: 999px;
        background:
          linear-gradient(90deg, #171313 0 14%, #2b2721 14% 54%, #1d1a16 54% 100%);
        border: 1px solid rgba(255,255,255,0.08);
        box-shadow:
          0 10px 18px rgba(0,0,0,0.34),
          inset 0 1px 0 rgba(255,255,255,0.18);
      }
      .desk-pen-cap {
        position: absolute;
        left: 10px;
        top: -4px;
        width: 34px;
        height: 26px;
        border-radius: 999px;
        background:
          linear-gradient(180deg, #40362d, #15120f);
        box-shadow: inset 0 1px 0 rgba(255,255,255,0.16);
      }
      .desk-pen-tip {
        position: absolute;
        right: -22px;
        top: 3px;
        width: 34px;
        height: 12px;
        clip-path: polygon(0 0, 74% 0, 100% 50%, 74% 100%, 0 100%);
        background: linear-gradient(90deg, #1b1712, #050505 80%);
        transform: rotate(-2deg);
      }
      .desk-stamp-words {
        position: absolute;
        right: clamp(12px, 5vw, 78px);
        top: calc(38% - 52px);
        display: flex;
        gap: 8px;
        pointer-events: none;
        opacity: 0;
        transform: translate3d(0, 10px, 130px) rotateX(-5deg);
        transition: opacity 0.16s, transform 0.16s;
      }
      .desk-stamp-words.visible {
        pointer-events: auto;
        opacity: 1;
        transform: translate3d(0, 0, 130px) rotateX(-5deg);
      }
      .desk-stamp-word {
        min-width: 36px;
        height: 36px;
        border-radius: 12px 12px 5px 5px;
        border: 1px solid rgba(112, 43, 28, 0.38);
        color: #7d211c;
        background:
          radial-gradient(circle at 50% 20%, rgba(255,255,255,0.44), transparent 36%),
          #e5c391;
        box-shadow:
          0 12px 16px rgba(0,0,0,0.28),
          inset 0 -4px 0 rgba(108, 48, 25, 0.14);
        font-weight: 900;
      }
      .desk-stamp-word:hover,
      .desk-stamp-word.active {
        color: #f8dfc5;
        background:
          radial-gradient(circle at 50% 22%, rgba(255,255,255,0.18), transparent 38%),
          #8b231f;
        border-color: rgba(80, 18, 14, 0.68);
        transform: translateY(-3px);
      }
      .desk-held-cursor {
        position: fixed;
        left: 0;
        top: 0;
        z-index: 12000;
        width: 76px;
        height: 76px;
        pointer-events: none;
        opacity: 0;
        transform: translate(-18px, -18px) rotate(-14deg);
        transition: opacity 0.08s;
        filter: drop-shadow(0 22px 22px rgba(0,0,0,0.42));
      }
      .desk-held-cursor.visible {
        opacity: 1;
      }
      .desk-held-cursor.stamp::before {
        content: attr(data-word);
        position: absolute;
        left: 18px;
        top: 22px;
        display: grid;
        place-items: center;
        width: 52px;
        height: 30px;
        border-radius: 50%;
        color: #f8d9b6;
        background: linear-gradient(180deg, #9c2c25, #4e110f);
        border: 1px solid rgba(30, 4, 3, 0.58);
        font-size: 18px;
        font-weight: 900;
        box-shadow: 0 10px 15px rgba(0,0,0,0.36);
      }
      .desk-held-cursor.stamp::after {
        content: "";
        position: absolute;
        left: 30px;
        top: -1px;
        width: 28px;
        height: 40px;
        border-radius: 16px 16px 8px 8px;
        background: linear-gradient(180deg, #b56b4e, #432018);
        box-shadow: inset 0 1px 0 rgba(255,235,200,0.24);
      }
      .desk-held-cursor.ink {
        width: 118px;
        height: 40px;
        transform: translate(-26px, -16px) rotate(-28deg);
      }
      .desk-held-cursor.ink::before {
        content: "";
        position: absolute;
        left: 8px;
        top: 11px;
        width: 86px;
        height: 17px;
        border-radius: 999px;
        background: linear-gradient(90deg, #101010, #383028 56%, #111);
        border: 1px solid rgba(255,255,255,0.10);
      }
      .desk-held-cursor.ink::after {
        content: "";
        position: absolute;
        right: 7px;
        top: 14px;
        width: 26px;
        height: 10px;
        clip-path: polygon(0 0, 78% 0, 100% 50%, 78% 100%, 0 100%);
        background: #050505;
      }
      .letter-sorting-table .letter-scatter {
        display: grid;
        grid-template-columns: repeat(2, minmax(260px, 1fr));
        grid-template-rows: repeat(2, minmax(190px, 1fr));
        gap: clamp(18px, 3vw, 36px);
        width: min(880px, calc(100% - 190px));
        min-height: 100%;
        padding: 0;
        z-index: 3;
      }
      .letter-sorting-table .letter-card {
        min-height: 0;
        max-width: 520px;
        padding: 15px 16px 12px;
        align-self: center;
        transform:
          translate3d(var(--scatter-x), var(--scatter-y), 52px)
          rotate(var(--paper-rot));
      }
      .letter-sorting-table .letter-card:hover,
      .letter-sorting-table .letter-card.focused {
        transform:
          translate3d(18px, -8px, 96px)
          rotate(0deg)
          scale(1.03) !important;
      }
      .letter-card.drag-source {
        opacity: 0.28;
        transform: translate3d(var(--scatter-x), var(--scatter-y), 12px) rotate(var(--paper-rot)) scale(0.97);
      }
      .letter-envelope-flap {
        position: absolute;
        inset: 0;
        pointer-events: none;
        opacity: 0.24;
        background:
          linear-gradient(28deg, transparent 49%, rgba(95,57,37,0.22) 50%, transparent 51%),
          linear-gradient(152deg, transparent 49%, rgba(95,57,37,0.18) 50%, transparent 51%);
      }
      .letter-route-layer {
        display: none;
      }
      .letter-route {
        fill: none;
        stroke: rgba(238, 204, 147, 0.46);
        stroke-width: 2.2;
        stroke-linecap: round;
        stroke-dasharray: 7 5;
      }
      .letter-route.changed {
        stroke: rgba(168, 52, 41, 0.92);
        stroke-width: 3.2;
        stroke-dasharray: none;
      }
      .letter-sorting-table .recipient-docks {
        display: none;
      }
      .letter-sorting-table .recipient-dock {
        position: relative;
        min-height: 64px;
        justify-content: center;
        border-radius: 18px 18px 10px 10px;
        cursor: grab;
        transform: translateZ(0);
        transition: transform 0.18s, box-shadow 0.18s, border-color 0.18s;
      }
      .letter-sorting-table .recipient-dock::before {
        content: "";
        position: absolute;
        left: 12px;
        right: 12px;
        top: 12px;
        height: 10px;
        border-radius: 999px;
        background: rgba(0,0,0,0.34);
        box-shadow: inset 0 2px 4px rgba(0,0,0,0.46);
      }
      .recipient-dock.drop-ready {
        border-color: rgba(255, 224, 172, 0.44);
      }
      .recipient-dock.drop-hover {
        transform: translateZ(24px) translateX(-8px) scale(1.05);
        border-color: rgba(255, 224, 172, 0.84);
        box-shadow:
          0 22px 32px rgba(0,0,0,0.38),
          0 0 0 4px rgba(255, 224, 172, 0.14),
          inset 0 1px 0 rgba(255,255,255,0.18);
      }
      .letter-drag-ghost {
        position: fixed;
        z-index: 10020;
        margin: 0;
        pointer-events: none;
        opacity: 0.96;
        transform-origin: center;
        filter: drop-shadow(0 28px 28px rgba(0,0,0,0.44));
      }
      .letter-drag-ghost.dropping {
        opacity: 0;
        transform: translateY(6px) scale(0.94) !important;
        transition: opacity 0.16s, transform 0.16s;
      }
      .workbench-overlay[data-mode="letters"] .wb-workspace-footer {
        padding: 10px 24px 12px;
      }

      /* (dispatch-footer, dispatch-confirm-btn, dispatch-summary removed — replaced by wb-dispatch-btn/summary) */

/* === end module: letter_dispatch === */
