DevTools Sidebar — CSS

Styles for DevTools Sidebar

Από την 29/05/2026. Δείτε την τελευταία έκδοση.

Αυτός ο κώδικας δεν πρέπει να εγκατασταθεί άμεσα. Είναι μια βιβλιοθήκη για άλλους κώδικες που περιλαμβάνεται μέσω της οδηγίας meta // @require https://update.greasyfork.org/scripts/580258/1837605/DevTools%20Sidebar%20%E2%80%94%20CSS.js

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

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

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

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

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

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.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==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); }
`;