DevTools Sidebar — CSS

Styles for DevTools Sidebar

As of 29. 05. 2026. See the latest version.

This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greasyfork.org/scripts/580258/1837605/DevTools%20Sidebar%20%E2%80%94%20CSS.js

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         DevTools Sidebar — CSS
// @namespace    http://tampermonkey.net/
// @version      7.0.0
// @description  Styles for DevTools Sidebar
// @author       MrNosferatu
// ==/UserScript==

// ─── CSS ─────────────────────────────────────────────────────────────────────
const CSS = `
  @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@300;400;500&display=swap');

  #dt-tab,#dt-sidebar,#dt-req-overlay,#dt-res-overlay,
  #dt-tab *,#dt-sidebar *,#dt-req-overlay *,#dt-res-overlay * {
    box-sizing:border-box;
    font-family:'IBM Plex Sans',-apple-system,sans-serif;
    line-height:1.5;
  }

  /* Flash-free */
  #dt-sidebar { visibility:hidden; transition:none; }
  #dt-req-overlay,#dt-res-overlay { visibility:hidden; transition:none; opacity:0; pointer-events:none; }
  #dt-sidebar.dt-ready { visibility:visible; transition:transform 0.28s cubic-bezier(.4,0,.2,1); }
  #dt-req-overlay.dt-ready,#dt-res-overlay.dt-ready { visibility:visible; transition:opacity 0.18s ease; }
  #dt-req-overlay.dt-ready #dt-req-modal,#dt-res-overlay.dt-ready #dt-res-modal { transition:transform 0.22s cubic-bezier(.34,1.2,.64,1); }
  #dt-req-overlay.visible,#dt-res-overlay.visible { opacity:1; pointer-events:all; }

  :root {
    --bg:#fff; --sf:#f7f7f7; --sf2:#efefef;
    --bd:#e2e2e2; --bd2:#cacaca;
    --tx:#111; --tx2:#444; --mu:#777; --fa:#bbb;
    --ac:#2563eb; --ac-bg:#eff6ff; --ac-bd:#bfdbfe;
    --gn:#16a34a; --gn-bg:#f0fdf4; --gn-bd:#bbf7d0;
    --rd:#dc2626; --rd-bg:#fef2f2; --rd-bd:#fecaca;
    --am:#d97706; --am-bg:#fffbeb; --am-bd:#fde68a;
    --vi:#7c3aed; --vi-bg:#faf5ff; --vi-bd:#e9d5ff;
    --w:360px; --ease:cubic-bezier(.4,0,.2,1);
  }

  /* Pull tab */
  #dt-tab { position:fixed; top:50%; right:0; transform:translateY(-50%); z-index:2147483645; width:28px; height:96px; background:var(--bg); border:1px solid var(--bd); border-right:none; border-radius:10px 0 0 10px; cursor:pointer; display:flex; align-items:center; justify-content:center; box-shadow:-2px 0 10px rgba(0,0,0,.07); transition:width .18s var(--ease),background .15s,border-color .15s,right .28s cubic-bezier(.4,0,.2,1); overflow:hidden; user-select:none; }
  #dt-tab:hover { width:34px; background:var(--sf); border-color:var(--bd2); }
  #dt-tab.active { border-color:var(--ac-bd); background:var(--ac-bg); }
  #dt-tab-inner { display:flex; flex-direction:column; align-items:center; gap:7px; pointer-events:none; }
  #dt-tab-dot { width:6px; height:6px; border-radius:50%; background:var(--fa); transition:background .2s,box-shadow .2s; flex-shrink:0; }
  #dt-tab-dot.active { background:var(--gn); box-shadow:0 0 0 3px var(--gn-bg); }
  #dt-tab-label { writing-mode:vertical-rl; text-orientation:mixed; font-family:'IBM Plex Mono',monospace; font-size:9px; font-weight:500; letter-spacing:.16em; color:var(--mu); text-transform:uppercase; transform:rotate(180deg); transition:color .15s; }
  #dt-tab:hover #dt-tab-label,#dt-tab.active #dt-tab-label { color:var(--ac); }
  #dt-tab-chevron { font-size:11px; color:var(--fa); transition:transform .25s var(--ease),color .15s; line-height:1; }
  #dt-tab.active #dt-tab-chevron { transform:scaleX(-1); color:var(--ac); }

  /* Sidebar */
  #dt-sidebar { position:fixed; top:0; right:0; bottom:0; z-index:2147483644; width:var(--w); transform:translateX(var(--w)); background:var(--bg); display:flex; flex-direction:column; box-shadow:-4px 0 24px rgba(0,0,0,.10),-1px 0 0 var(--bd); overflow:hidden; }
  #dt-sidebar.open { transform:translateX(0); }
  .dt-head { padding:18px 18px 14px; border-bottom:1px solid var(--bd); flex-shrink:0; display:flex; align-items:center; gap:11px; }
  .dt-head-icon { width:32px; height:32px; background:var(--ac-bg); border:1px solid var(--ac-bd); border-radius:8px; display:flex; align-items:center; justify-content:center; flex-shrink:0; font-size:15px; }
  .dt-head-text { flex:1; }
  .dt-head-title { font-size:14px; font-weight:600; color:var(--tx); letter-spacing:-.01em; }
  .dt-head-sub { font-family:'IBM Plex Mono',monospace; font-size:9.5px; color:var(--mu); margin-top:1px; }
  .dt-head-close { width:28px; height:28px; border-radius:7px; background:transparent; border:1px solid var(--bd); color:var(--mu); cursor:pointer; display:flex; align-items:center; justify-content:center; font-size:14px; transition:all .15s; flex-shrink:0; }
  .dt-head-close:hover { background:var(--rd-bg); border-color:var(--rd-bd); color:var(--rd); }
  .dt-nav { display:flex; border-bottom:1px solid var(--bd); background:var(--sf); flex-shrink:0; padding:0 14px; }
  .dt-nav-btn { padding:10px 10px 9px; font-size:12px; font-weight:500; color:var(--mu); cursor:pointer; background:none; border:none; border-bottom:2px solid transparent; margin-bottom:-1px; transition:color .15s,border-color .15s; }
  .dt-nav-btn:hover { color:var(--tx2); }
  .dt-nav-btn.active { color:var(--ac); border-bottom-color:var(--ac); }
  .dt-scroll { flex:1; overflow-y:auto; }
  .dt-scroll::-webkit-scrollbar { width:4px; }
  .dt-scroll::-webkit-scrollbar-thumb { background:var(--bd); border-radius:4px; }
  .dt-panel { display:none; }
  .dt-panel.active { display:block; }
  .dt-section { padding:16px 18px; border-bottom:1px solid var(--bd); }
  .dt-section:last-child { border-bottom:none; }
  .dt-slabel { font-family:'IBM Plex Mono',monospace; font-size:9px; font-weight:500; letter-spacing:.14em; text-transform:uppercase; color:var(--mu); margin-bottom:13px; }
  .dt-row { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:12px; }
  .dt-row:last-child { margin-bottom:0; }
  .dt-row-info { flex:1; min-width:0; }
  .dt-row-label { font-size:13px; font-weight:500; color:var(--tx); }
  .dt-row-sub { font-size:11px; color:var(--mu); margin-top:2px; line-height:1.5; }
  .dt-toggle { position:relative; width:40px; height:22px; cursor:pointer; flex-shrink:0; }
  .dt-toggle input { opacity:0; width:0; height:0; position:absolute; }
  .dt-toggle-track { position:absolute; inset:0; background:var(--sf2); border:1.5px solid var(--bd); border-radius:11px; transition:all .18s var(--ease); }
  .dt-toggle input:checked ~ .dt-toggle-track { background:var(--ac); border-color:var(--ac); }
  .dt-toggle-thumb { position:absolute; top:3px; left:3px; width:14px; height:14px; background:#fff; border-radius:50%; box-shadow:0 1px 3px rgba(0,0,0,.2); transition:left .18s var(--ease); }
  .dt-toggle input:checked ~ .dt-toggle-track .dt-toggle-thumb { left:20px; }
  .dt-method-grid { display:flex; flex-wrap:wrap; gap:5px; margin-top:2px; }
  .dt-method-check { display:none; }
  .dt-method-pill { padding:3px 10px; border-radius:20px; font-size:10px; font-weight:600; font-family:'IBM Plex Mono',monospace; letter-spacing:.06em; cursor:pointer; border:1.5px solid var(--bd); color:var(--mu); background:var(--sf); transition:all .15s; user-select:none; }
  .dt-method-check:checked + .dt-method-pill { color:#fff; border-color:transparent; }
  .dt-method-check[data-m="GET"]:checked + .dt-method-pill { background:#0891b2; }
  .dt-method-check[data-m="POST"]:checked + .dt-method-pill { background:#16a34a; }
  .dt-method-check[data-m="PUT"]:checked + .dt-method-pill { background:#2563eb; }
  .dt-method-check[data-m="PATCH"]:checked + .dt-method-pill { background:#7c3aed; }
  .dt-method-check[data-m="DELETE"]:checked + .dt-method-pill { background:#dc2626; }
  .dt-chip { font-family:'IBM Plex Mono',monospace; font-size:10px; font-weight:500; letter-spacing:.06em; padding:3px 9px; border-radius:20px; border:1px solid var(--bd); color:var(--mu); background:var(--sf); white-space:nowrap; }
  .dt-chip.on { background:var(--gn-bg); border-color:var(--gn-bd); color:var(--gn); }
  .dt-queue { display:flex; align-items:center; gap:9px; padding:10px 12px; background:var(--sf); border:1px solid var(--bd); border-radius:8px; margin-top:12px; }
  .dt-queue-dot { width:7px; height:7px; border-radius:50%; background:var(--fa); flex-shrink:0; transition:all .2s; }
  .dt-queue-dot.active { background:var(--am); box-shadow:0 0 0 3px var(--am-bg); animation:dt-pulse 1.6s ease-in-out infinite; }
  @keyframes dt-pulse { 0%,100%{opacity:1} 50%{opacity:.35} }
  .dt-queue-text { font-size:12px; color:var(--tx2); }
  .dt-queue-text strong { color:var(--am); }
  .dt-mode-group { display:flex; gap:6px; margin-top:12px; }
  .dt-mode-btn { flex:1; padding:8px; font-size:11.5px; font-weight:500; background:var(--sf); border:1.5px solid var(--bd); border-radius:7px; color:var(--mu); cursor:pointer; transition:all .15s; }
  .dt-mode-btn:hover { border-color:var(--bd2); color:var(--tx2); }
  .dt-mode-btn.active { background:var(--ac-bg); border-color:var(--ac-bd); color:var(--ac); }
  .dt-regex-wrap { max-height:0; overflow:hidden; opacity:0; transition:max-height .22s var(--ease),opacity .18s; }
  .dt-regex-wrap.visible { max-height:80px; opacity:1; margin-top:12px; }
  .dt-flabel { font-family:'IBM Plex Mono',monospace; font-size:9px; font-weight:500; letter-spacing:.12em; text-transform:uppercase; color:var(--mu); margin-bottom:6px; }
  .dt-regex-field { display:flex; align-items:center; background:var(--bg); border:1.5px solid var(--bd); border-radius:7px; padding:0 10px; gap:5px; transition:border-color .15s,box-shadow .15s; }
  .dt-regex-field:focus-within { border-color:var(--ac); box-shadow:0 0 0 3px var(--ac-bg); }
  .dt-regex-delim { font-family:'IBM Plex Mono',monospace; font-size:14px; font-weight:300; color:var(--fa); flex-shrink:0; }
  .dt-regex-input { flex:1; background:none; border:none; outline:none; font-family:'IBM Plex Mono',monospace; font-size:11.5px; color:var(--tx); padding:8px 0; caret-color:var(--ac); }
  .dt-regex-input::placeholder { color:var(--fa); }
  .dt-regex-dot { width:6px; height:6px; border-radius:50%; background:var(--bd); flex-shrink:0; transition:background .15s; }
  .dt-regex-dot.valid { background:var(--gn); }
  .dt-regex-dot.invalid { background:var(--rd); }
  .dt-persist-note { font-size:11px; color:var(--mu); padding:9px 11px; background:var(--sf); border:1px solid var(--bd); border-radius:7px; margin-top:10px; line-height:1.55; }
  .dt-persist-note.on { background:var(--ac-bg); border-color:var(--ac-bd); color:var(--ac); }
  .dt-about-hero { padding:24px 18px 18px; border-bottom:1px solid var(--bd); text-align:center; }
  .dt-about-icon { width:48px; height:48px; background:var(--ac-bg); border:1px solid var(--ac-bd); border-radius:13px; display:flex; align-items:center; justify-content:center; font-size:22px; margin:0 auto 10px; }
  .dt-about-title { font-size:16px; font-weight:600; color:var(--tx); margin-bottom:3px; }
  .dt-about-version { font-family:'IBM Plex Mono',monospace; font-size:10px; color:var(--mu); }
  .dt-feature-list { padding:14px 18px; }
  .dt-feature-item { display:flex; gap:11px; align-items:flex-start; padding:11px; border:1px solid var(--bd); border-radius:8px; margin-bottom:7px; background:var(--sf); }
  .dt-feature-item:last-child { margin-bottom:0; }
  .dt-feature-ico { font-size:15px; flex-shrink:0; margin-top:1px; }
  .dt-feature-name { font-size:12.5px; font-weight:600; color:var(--tx); margin-bottom:2px; }
  .dt-feature-desc { font-size:11px; color:var(--mu); line-height:1.55; }

  /* ── Sidebar Settings Panel ─────────────────────────────────────────────── */
  .dt-settings-group-label { font-family:'IBM Plex Mono',monospace; font-size:9px; font-weight:500; letter-spacing:.14em; text-transform:uppercase; color:var(--mu); margin-bottom:10px; }
  /* Theme swatches */
  .dt-theme-grid { display:flex; flex-wrap:wrap; gap:7px; }
  .dt-theme-swatch { cursor:pointer; border-radius:8px; overflow:hidden; border:2px solid transparent; transition:all .15s; flex-shrink:0; }
  .dt-theme-swatch.active { border-color:var(--ac); box-shadow:0 0 0 3px var(--ac-bg); }
  .dt-swatch-preview { width:60px; height:36px; display:flex; align-items:center; justify-content:center; }
  .dt-swatch-preview-inner { font-size:9px; font-family:'IBM Plex Mono',monospace; opacity:.8; }
  .dt-swatch-name { font-size:9px; font-weight:500; color:var(--tx2); text-align:center; padding:3px 0; background:var(--sf); border-top:1px solid var(--bd); }
  /* Font selector */
  .dt-font-list { display:flex; flex-direction:column; gap:5px; }
  .dt-font-opt { display:flex; align-items:center; gap:10px; padding:7px 10px; border:1px solid var(--bd); border-radius:7px; cursor:pointer; transition:all .15s; background:var(--bg); }
  .dt-font-opt:hover { border-color:var(--bd2); background:var(--sf); }
  .dt-font-opt.active { border-color:var(--ac-bd); background:var(--ac-bg); }
  .dt-font-opt-radio { width:14px; height:14px; border-radius:50%; border:1.5px solid var(--bd); flex-shrink:0; display:flex; align-items:center; justify-content:center; transition:all .15s; }
  .dt-font-opt.active .dt-font-opt-radio { border-color:var(--ac); background:var(--ac); }
  .dt-font-opt.active .dt-font-opt-radio::after { content:''; width:5px; height:5px; background:#fff; border-radius:50%; }
  .dt-font-opt-name { font-size:12px; color:var(--tx); flex:1; }
  .dt-font-opt-preview { font-size:10px; color:var(--mu); }
  /* Font size slider */
  .dt-size-row { display:flex; align-items:center; gap:12px; }
  .dt-size-slider { flex:1; appearance:none; height:4px; border-radius:2px; background:var(--sf2); outline:none; cursor:pointer; }
  .dt-size-slider::-webkit-slider-thumb { appearance:none; width:16px; height:16px; border-radius:50%; background:var(--ac); cursor:pointer; box-shadow:0 1px 4px rgba(37,99,235,.3); }
  .dt-size-val { font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--tx2); min-width:28px; text-align:right; }
  /* Custom colors */
  .dt-custom-colors { display:flex; flex-direction:column; gap:10px; }
  .dt-color-group { flex:1; }
  .dt-color-label { font-size:11px; color:var(--mu); margin-bottom:5px; }
  .dt-color-input-row { display:flex; gap:6px; align-items:center; }
  .dt-color-picker { width:32px; height:32px; border-radius:7px; border:1px solid var(--bd); cursor:pointer; padding:2px; background:var(--sf); }
  .dt-color-hex { flex:1; font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--tx); background:var(--sf); border:1px solid var(--bd); border-radius:6px; padding:6px 9px; outline:none; transition:border-color .15s; }
  .dt-color-hex:focus { border-color:var(--ac); }
  .dt-color-clear { font-size:10px; color:var(--mu); background:transparent; border:1px solid var(--bd); border-radius:5px; padding:4px 7px; cursor:pointer; transition:all .15s; }
  .dt-color-clear:hover { border-color:var(--rd-bd); color:var(--rd); }
  /* Preview box */
  .dt-ed-preview { border-radius:8px; overflow:hidden; margin-top:4px; }
  .dt-ed-preview-inner { padding:12px 14px; font-size:12px; line-height:1.7; white-space:pre; }
  /* Apply button */
  .dt-settings-apply-row { display:flex; justify-content:flex-end; gap:8px; padding-top:4px; }
  .dt-btn-apply { font-size:12px; font-weight:500; padding:8px 16px; border-radius:7px; cursor:pointer; background:var(--ac); border:1px solid var(--ac); color:#fff; transition:all .15s; }
  .dt-btn-apply:hover { background:#1d4ed8; }
  .dt-btn-reset { font-size:12px; font-weight:500; padding:8px 16px; border-radius:7px; cursor:pointer; background:transparent; border:1px solid var(--bd); color:var(--tx2); transition:all .15s; }
  .dt-btn-reset:hover { border-color:var(--bd2); }

  /* Modal overlay */
  .dt-overlay { position:fixed; inset:0; z-index:2147483647; background:rgba(0,0,0,.42); backdrop-filter:blur(3px); display:flex; align-items:center; justify-content:center; }

  /* Modal — resizable, fixed initial size */
  .dt-modal { width:700px; height:620px; min-width:500px; min-height:400px; max-width:98vw; max-height:96vh; background:var(--bg); border:1px solid var(--bd); border-radius:14px; overflow:hidden; display:flex; flex-direction:column; box-shadow:0 20px 60px rgba(0,0,0,.18),0 4px 16px rgba(0,0,0,.08); transform:translateY(10px) scale(.98); resize:both; }
  .dt-overlay.visible .dt-modal { transform:translateY(0) scale(1); }
  .dt-modal-head { padding:16px 18px 14px; border-bottom:1px solid var(--bd); display:flex; align-items:flex-start; gap:12px; flex-shrink:0; background:var(--sf); }
  .dt-modal-icon { width:36px; height:36px; border-radius:9px; display:flex; align-items:center; justify-content:center; flex-shrink:0; font-size:16px; }
  .dt-modal-icon.req { background:var(--am-bg); border:1px solid var(--am-bd); }
  .dt-modal-icon.res { background:var(--vi-bg); border:1px solid var(--vi-bd); }
  .dt-modal-meta { flex:1; min-width:0; }
  .dt-modal-title { font-size:14px; font-weight:600; color:var(--tx); margin-bottom:3px; letter-spacing:-.01em; }
  .dt-modal-url { font-family:'IBM Plex Mono',monospace; font-size:10px; color:var(--mu); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .dt-method-tag { padding:3px 9px; border-radius:5px; font-family:'IBM Plex Mono',monospace; font-size:9.5px; font-weight:600; letter-spacing:.08em; flex-shrink:0; }
  .dt-method-tag.GET    { background:#ecfeff; color:#0891b2; border:1px solid #a5f3fc; }
  .dt-method-tag.POST   { background:var(--gn-bg); color:var(--gn); border:1px solid var(--gn-bd); }
  .dt-method-tag.PUT    { background:var(--ac-bg); color:var(--ac); border:1px solid var(--ac-bd); }
  .dt-method-tag.PATCH  { background:var(--vi-bg); color:var(--vi); border:1px solid var(--vi-bd); }
  .dt-method-tag.DELETE { background:var(--rd-bg); color:var(--rd); border:1px solid var(--rd-bd); }

  .dt-modal-body { flex:1; overflow-y:auto; overflow-x:hidden; padding:0; display:flex; flex-direction:column; min-height:0; }
  .dt-modal-body::-webkit-scrollbar { width:4px; }
  .dt-modal-body::-webkit-scrollbar-thumb { background:var(--bd); border-radius:4px; }
  .dt-modal-inner { padding:16px 18px; display:flex; flex-direction:column; gap:14px; flex:1; min-height:0; }
  .dt-payload-section { display:flex; flex-direction:column; flex:1; min-height:160px; }

  /* Response status banner */
  .dt-res-status { display:flex; align-items:center; gap:8px; padding:8px 12px; border-radius:7px; font-size:12px; font-weight:500; flex-shrink:0; }
  .dt-res-status.ok  { background:var(--gn-bg); border:1px solid var(--gn-bd); color:var(--gn); }
  .dt-res-status.err { background:var(--rd-bg); border:1px solid var(--rd-bd); color:var(--rd); }
  .dt-res-status.oth { background:var(--am-bg); border:1px solid var(--am-bd); color:var(--am); }
  .dt-res-status-code { font-family:'IBM Plex Mono',monospace; font-size:11px; font-weight:600; }
  .dt-res-status-text { font-family:'IBM Plex Mono',monospace; font-size:10px; opacity:.8; }

  /* Response mode tab strip */
  .dt-res-tabs { display:flex; gap:0; margin-bottom:2px; border:1px solid var(--bd); border-radius:8px; overflow:hidden; flex-shrink:0; }
  .dt-res-tab { flex:1; padding:8px 10px; font-size:11px; font-weight:500; color:var(--mu); cursor:pointer; background:var(--sf); border:none; border-right:1px solid var(--bd); transition:all .15s; text-align:center; }
  .dt-res-tab:last-child { border-right:none; }
  .dt-res-tab:hover { color:var(--tx2); background:var(--sf2); }
  .dt-res-tab.active { background:var(--ac-bg); color:var(--ac); }

  /* Editor wrapper */
  .dt-editor-wrap { border:1px solid var(--bd); border-radius:9px; overflow:hidden; display:flex; flex-direction:column; flex:1; min-height:120px; resize:none; min-width:260px; }
  .dt-editor-outer { position:relative; flex:1; min-height:0; display:flex; flex-direction:column; }
  .dt-hl-overlay { position:absolute; top:0; left:0; right:0; bottom:0; pointer-events:none; line-height:1.7; padding:13px 15px; tab-size:2; white-space:pre; overflow:hidden; color:transparent; }
  .dt-hl-overlay mark { border-radius:2px; color:transparent; }
  .dt-editor { flex:1; width:100%; min-height:0; border:none; outline:none; resize:none; line-height:1.7; padding:13px 15px; tab-size:2; white-space:pre; overflow:auto; }
  .dt-editor-bar { display:flex; align-items:center; gap:5px; padding:7px 10px; flex-shrink:0; }
  .dt-editor-btn { font-family:'IBM Plex Mono',monospace; font-size:9.5px; padding:3px 9px; border-radius:4px; cursor:pointer; transition:all .12s; }
  .dt-editor-btn:disabled { opacity:.35; cursor:default; }
  .dt-search-toggle-btn { margin-left:auto; font-family:'IBM Plex Mono',monospace; font-size:9.5px; padding:3px 9px; border-radius:4px; cursor:pointer; transition:all .12s; display:flex; align-items:center; gap:5px; }
  .dt-json-badge { font-family:'IBM Plex Mono',monospace; font-size:9.5px; }

  /* Search bar */
  .dt-search-bar { display:flex; align-items:center; gap:6px; padding:6px 10px; flex-shrink:0; }
  .dt-search-bar.hidden { display:none; }
  .dt-search-wrap { display:flex; align-items:center; flex:1; border-radius:5px; padding:0 8px; gap:5px; transition:border-color .15s; }
  .dt-search-icon { font-size:11px; flex-shrink:0; }
  .dt-search-input { flex:1; background:none; border:none; outline:none; font-family:'IBM Plex Mono',monospace; font-size:11px; padding:5px 0; }
  .dt-search-count { font-family:'IBM Plex Mono',monospace; font-size:10px; white-space:nowrap; flex-shrink:0; min-width:46px; text-align:right; }
  .dt-snav { width:22px; height:22px; border-radius:4px; cursor:pointer; background:transparent; display:flex; align-items:center; justify-content:center; font-size:11px; transition:all .12s; flex-shrink:0; }
  .dt-sclose { width:20px; height:20px; border-radius:4px; cursor:pointer; background:transparent; border:none; font-size:13px; display:flex; align-items:center; justify-content:center; transition:color .12s; flex-shrink:0; }

  /* Headers */
  .dt-headers-section { flex-shrink:0; }
  .dt-headers-toggle { display:flex; align-items:center; gap:7px; cursor:pointer; padding:8px 10px; background:var(--sf); border:1px solid var(--bd); border-radius:8px; transition:border-radius .15s; }
  .dt-headers-toggle.open { border-radius:8px 8px 0 0; }
  .dt-headers-arrow { font-size:10px; color:var(--fa); transition:transform .18s; flex-shrink:0; }
  .dt-headers-toggle.open .dt-headers-arrow { transform:rotate(90deg); }
  .dt-headers-label { font-family:'IBM Plex Mono',monospace; font-size:9px; font-weight:500; letter-spacing:.12em; text-transform:uppercase; color:var(--mu); }
  .dt-headers-count { margin-left:auto; font-family:'IBM Plex Mono',monospace; font-size:9px; color:var(--fa); }
  .dt-headers-body { display:none; border:1px solid var(--bd); border-top:none; border-radius:0 0 8px 8px; background:var(--bg); }
  .dt-headers-body.open { display:block; }
  .dt-headers-inner { padding:8px; display:flex; flex-direction:column; gap:4px; }
  .dt-header-row { display:flex; gap:10px; align-items:baseline; padding:5px 9px; border:1px solid var(--bd); border-radius:5px; background:var(--sf); }
  .dt-hkey { font-family:'IBM Plex Mono',monospace; font-size:10px; font-weight:500; color:var(--tx2); min-width:130px; flex-shrink:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .dt-hval { font-family:'IBM Plex Mono',monospace; font-size:10px; font-weight:300; color:var(--mu); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; min-width:0; }

  /* GET params */
  .dt-params-section { display:flex; flex-direction:column; min-height:0; }
  .dt-params-list { display:flex; flex-direction:column; gap:6px; margin-bottom:8px; }
  .dt-param-row { display:flex; gap:6px; align-items:center; }
  .dt-param-input { flex:1; background:var(--sf); border:1px solid var(--bd); border-radius:6px; padding:6px 9px; font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--tx); outline:none; transition:border-color .15s; }
  .dt-param-input:focus { border-color:var(--ac); box-shadow:0 0 0 3px var(--ac-bg); }
  .dt-param-input::placeholder { color:var(--fa); }
  .dt-param-eq { font-family:'IBM Plex Mono',monospace; font-size:12px; color:var(--fa); flex-shrink:0; }
  .dt-param-del { width:24px; height:24px; border-radius:5px; cursor:pointer; background:transparent; border:1px solid var(--bd); color:var(--fa); font-size:13px; display:flex; align-items:center; justify-content:center; flex-shrink:0; transition:all .12s; }
  .dt-param-del:hover { border-color:var(--rd-bd); color:var(--rd); background:var(--rd-bg); }
  .dt-add-param { font-size:11px; font-weight:500; color:var(--ac); background:var(--ac-bg); border:1px solid var(--ac-bd); border-radius:6px; padding:6px 12px; cursor:pointer; transition:all .15s; width:fit-content; }
  .dt-add-param:hover { background:#dbeafe; }

  /* Response transform — GUI path builder */
  .dt-transform-section { display:flex; flex-direction:column; gap:10px; flex:1; min-height:0; }
  .dt-transform-note { font-size:11px; color:var(--mu); padding:8px 10px; background:var(--vi-bg); border:1px solid var(--vi-bd); border-radius:7px; line-height:1.55; flex-shrink:0; }
  .dt-transform-cols { display:flex; gap:10px; flex:1; min-height:180px; }
  .dt-transform-pane { flex:1; display:flex; flex-direction:column; min-width:0; }
  .dt-transform-pane-label { font-family:'IBM Plex Mono',monospace; font-size:9px; font-weight:500; letter-spacing:.12em; text-transform:uppercase; color:var(--mu); margin-bottom:6px; flex-shrink:0; }
  .dt-tree { flex:1; overflow-y:auto; overflow-x:hidden; background:var(--sf); border:1px solid var(--bd); border-radius:8px; padding:8px; font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--tx2); }
  .dt-tree::-webkit-scrollbar { width:3px; }
  .dt-tree::-webkit-scrollbar-thumb { background:var(--bd); border-radius:3px; }
  .dt-tree-node { display:flex; align-items:center; gap:4px; padding:2px 4px; border-radius:4px; cursor:pointer; white-space:nowrap; transition:background .1s; }
  .dt-tree-node:hover { background:var(--sf2); }
  .dt-tree-node.selected { background:var(--ac-bg); color:var(--ac); }
  .dt-tree-indent { display:inline-block; width:14px; flex-shrink:0; }
  .dt-tree-arrow { font-size:9px; color:var(--fa); flex-shrink:0; width:10px; }
  .dt-tree-key { color:var(--tx); font-weight:500; }
  .dt-tree-type { font-size:9px; color:var(--fa); margin-left:4px; }
  .dt-tree-val { color:var(--mu); margin-left:4px; max-width:100px; overflow:hidden; text-overflow:ellipsis; }
  .dt-path-builder { display:flex; flex-direction:column; gap:8px; flex-shrink:0; }
  .dt-path-display { font-family:'IBM Plex Mono',monospace; font-size:10px; color:var(--vi); background:var(--vi-bg); border:1px solid var(--vi-bd); border-radius:6px; padding:7px 10px; word-break:break-all; min-height:32px; }
  .dt-path-actions { display:flex; gap:6px; flex-wrap:wrap; }
  .dt-path-btn { font-size:11px; font-weight:500; padding:6px 12px; border-radius:6px; cursor:pointer; transition:all .15s; border:1.5px solid; }
  .dt-path-btn-extract { background:var(--ac-bg); border-color:var(--ac-bd); color:var(--ac); }
  .dt-path-btn-extract:hover { background:#dbeafe; }
  .dt-path-btn-wrap { background:var(--gn-bg); border-color:var(--gn-bd); color:var(--gn); }
  .dt-path-btn-wrap:hover { background:#dcfce7; }
  .dt-custom-wrap-input { font-family:'IBM Plex Mono',monospace; font-size:11px; color:var(--tx); background:var(--sf); border:1px solid var(--bd); border-radius:6px; padding:6px 9px; outline:none; width:100%; transition:border-color .15s; }
  .dt-custom-wrap-input:focus { border-color:var(--ac); box-shadow:0 0 0 3px var(--ac-bg); }
  .dt-custom-wrap-input::placeholder { color:var(--fa); }

  /* JS Transform */
  .dt-code-section { display:flex; flex-direction:column; flex:1; min-height:0; gap:8px; }
  .dt-code-note { font-size:11px; color:var(--mu); line-height:1.55; }
  .dt-code-note code { font-family:'IBM Plex Mono',monospace; background:var(--sf); padding:1px 5px; border-radius:3px; font-size:10px; color:var(--vi); }
  .dt-transform-editor { flex:1; width:100%; min-height:80px; border:1px solid var(--bd); border-radius:8px; padding:10px 12px; font-family:'IBM Plex Mono',monospace; font-size:11.5px; color:var(--tx); background:var(--sf); outline:none; resize:none; line-height:1.6; tab-size:2; caret-color:var(--ac); transition:border-color .15s; }
  .dt-transform-editor:focus { border-color:var(--ac); box-shadow:0 0 0 3px var(--ac-bg); }
  .dt-transform-run-btn { font-size:11.5px; font-weight:500; padding:8px 16px; border-radius:7px; cursor:pointer; background:var(--vi-bg); border:1.5px solid var(--vi-bd); color:var(--vi); transition:all .15s; width:fit-content; flex-shrink:0; }
  .dt-transform-run-btn:hover { background:#ede9fe; }
  .dt-transform-err { font-family:'IBM Plex Mono',monospace; font-size:10px; color:var(--rd); background:var(--rd-bg); border:1px solid var(--rd-bd); border-radius:6px; padding:6px 10px; display:none; }
  .dt-transform-err.show { display:block; }

  /* Footer */
  .dt-modal-foot { padding:12px 18px; border-top:1px solid var(--bd); display:flex; align-items:center; gap:10px; flex-shrink:0; background:var(--sf); }
  .dt-modal-count { font-family:'IBM Plex Mono',monospace; font-size:9.5px; color:var(--mu); white-space:nowrap; }
  .dt-foot-btn { flex:1; padding:9px; font-size:12.5px; font-weight:500; border-radius:8px; cursor:pointer; border:1.5px solid; transition:all .15s; }
  .dt-foot-btn-abort { background:var(--bg); border-color:var(--bd); color:var(--tx2); }
  .dt-foot-btn-abort:hover { border-color:var(--rd-bd); color:var(--rd); background:var(--rd-bg); }
  .dt-foot-btn-send { background:var(--ac); border-color:var(--ac); color:#fff; }
  .dt-foot-btn-send:hover { background:#1d4ed8; border-color:#1d4ed8; box-shadow:0 4px 12px rgba(37,99,235,.28); }
  .dt-foot-btn-send.res-send { background:var(--vi); border-color:var(--vi); }
  .dt-foot-btn-send.res-send:hover { background:#6d28d9; border-color:#6d28d9; box-shadow:0 4px 12px rgba(124,58,237,.28); }
  .dt-foot-btn:hover { border-color:var(--bd2); color:var(--tx); }
`;