/* ★ 2026-10-09「系统图标、提示，是否可以参考这样做成 3D 图标，比如侧边栏」——
   侧栏菜单、空状态（.empty-state）、系统弹窗 / 轻提示改用立体图标。
   图片来自 Microsoft Fluent Emoji 3D（MIT 许可，见 icons3d/LICENSE），缩成 96px webp 放本地（不依赖外网）。
   做法：按 Bootstrap 图标的类名换成图片 —— 菜单 / 模板一行不用改，新菜单用了已有的图标类自动是 3D；没配图的类名照旧显示线条图标。
   开关：右上角「主题」菜单里「3D 图标」（每个人自己选，默认开）；html 上有 icons-3d 类才生效。
   新增图标：tools/build_icons3d.py 里加「bi 类名 → emoji」一行，重跑脚本即可。 */
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi:is(
  .bi-activity,
  .bi-airplane,
  .bi-arrow-left,
  .bi-arrow-left-right,
  .bi-bank,
  .bi-bar-chart,
  .bi-bar-chart-fill,
  .bi-bar-chart-line,
  .bi-bell,
  .bi-book,
  .bi-book-half,
  .bi-box,
  .bi-box-arrow-in-down,
  .bi-box-arrow-in-right,
  .bi-box-arrow-up,
  .bi-box-seam,
  .bi-boxes,
  .bi-building,
  .bi-buildings,
  .bi-calculator,
  .bi-calendar-check,
  .bi-calendar2-check,
  .bi-camera-video,
  .bi-cash-coin,
  .bi-cash-stack,
  .bi-chat-dots,
  .bi-chat-dots-fill,
  .bi-chat-left-dots,
  .bi-check-circle,
  .bi-check2-circle,
  .bi-check2-square,
  .bi-clipboard-check,
  .bi-clipboard-data,
  .bi-clock,
  .bi-clock-history,
  .bi-cloud-arrow-down,
  .bi-cloud-upload-fill,
  .bi-collection,
  .bi-cpu,
  .bi-currency-exchange,
  .bi-database,
  .bi-diagram-2,
  .bi-diagram-3,
  .bi-droplet,
  .bi-emoji-smile,
  .bi-envelope-arrow-down,
  .bi-envelope-at,
  .bi-envelope-paper,
  .bi-exclamation-triangle,
  .bi-file-code,
  .bi-file-earmark-arrow-down,
  .bi-file-earmark-ruled,
  .bi-file-earmark-text,
  .bi-file-earmark-text-fill,
  .bi-fingerprint,
  .bi-folder-fill,
  .bi-folder2-open,
  .bi-gear,
  .bi-gear-fill,
  .bi-geo-alt,
  .bi-gift,
  .bi-git,
  .bi-globe-americas,
  .bi-globe-asia-australia,
  .bi-globe2,
  .bi-graph-up,
  .bi-graph-up-arrow,
  .bi-grid-1x2,
  .bi-grid-1x2-fill,
  .bi-grid-3x3,
  .bi-hdd,
  .bi-hdd-network,
  .bi-hdd-rack,
  .bi-hourglass-bottom,
  .bi-house-door,
  .bi-house-heart,
  .bi-images,
  .bi-inbox,
  .bi-info-circle,
  .bi-input-cursor-text,
  .bi-journal-bookmark,
  .bi-journal-check,
  .bi-journal-text,
  .bi-journal-x,
  .bi-key,
  .bi-layout-sidebar,
  .bi-life-preserver,
  .bi-lightbulb,
  .bi-linkedin,
  .bi-list-check,
  .bi-list-columns,
  .bi-list-ul,
  .bi-lock,
  .bi-mailbox,
  .bi-mortarboard,
  .bi-paperclip,
  .bi-patch-check,
  .bi-pc-display,
  .bi-people,
  .bi-people-fill,
  .bi-percent,
  .bi-person-badge,
  .bi-person-bounding-box,
  .bi-person-gear,
  .bi-person-lines-fill,
  .bi-person-vcard,
  .bi-pie-chart,
  .bi-play-btn,
  .bi-plug,
  .bi-plus-square,
  .bi-question-circle,
  .bi-radar,
  .bi-receipt,
  .bi-robot,
  .bi-rocket-takeoff,
  .bi-router,
  .bi-search,
  .bi-send,
  .bi-shield-check,
  .bi-shield-lock,
  .bi-signpost,
  .bi-sliders,
  .bi-speedometer,
  .bi-speedometer2,
  .bi-tags,
  .bi-terminal,
  .bi-train-front,
  .bi-trophy,
  .bi-truck,
  .bi-truck-front,
  .bi-upc,
  .bi-upc-scan,
  .bi-wallet2,
  .bi-water,
  .bi-wechat,
  .bi-window-stack
) {
  display: inline-block; width: 20px; height: 20px; flex: 0 0 20px; vertical-align: middle; margin-top: -3px; line-height: 20px;
  background-position: center; background-size: contain; background-repeat: no-repeat; color: transparent !important; font-size: 0 !important;
  filter: drop-shadow(0 1px 1.5px rgba(0, 0, 0, .18));
}
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi:is(
  .bi-activity,
  .bi-airplane,
  .bi-arrow-left,
  .bi-arrow-left-right,
  .bi-bank,
  .bi-bar-chart,
  .bi-bar-chart-fill,
  .bi-bar-chart-line,
  .bi-bell,
  .bi-book,
  .bi-book-half,
  .bi-box,
  .bi-box-arrow-in-down,
  .bi-box-arrow-in-right,
  .bi-box-arrow-up,
  .bi-box-seam,
  .bi-boxes,
  .bi-building,
  .bi-buildings,
  .bi-calculator,
  .bi-calendar-check,
  .bi-calendar2-check,
  .bi-camera-video,
  .bi-cash-coin,
  .bi-cash-stack,
  .bi-chat-dots,
  .bi-chat-dots-fill,
  .bi-chat-left-dots,
  .bi-check-circle,
  .bi-check2-circle,
  .bi-check2-square,
  .bi-clipboard-check,
  .bi-clipboard-data,
  .bi-clock,
  .bi-clock-history,
  .bi-cloud-arrow-down,
  .bi-cloud-upload-fill,
  .bi-collection,
  .bi-cpu,
  .bi-currency-exchange,
  .bi-database,
  .bi-diagram-2,
  .bi-diagram-3,
  .bi-droplet,
  .bi-emoji-smile,
  .bi-envelope-arrow-down,
  .bi-envelope-at,
  .bi-envelope-paper,
  .bi-exclamation-triangle,
  .bi-file-code,
  .bi-file-earmark-arrow-down,
  .bi-file-earmark-ruled,
  .bi-file-earmark-text,
  .bi-file-earmark-text-fill,
  .bi-fingerprint,
  .bi-folder-fill,
  .bi-folder2-open,
  .bi-gear,
  .bi-gear-fill,
  .bi-geo-alt,
  .bi-gift,
  .bi-git,
  .bi-globe-americas,
  .bi-globe-asia-australia,
  .bi-globe2,
  .bi-graph-up,
  .bi-graph-up-arrow,
  .bi-grid-1x2,
  .bi-grid-1x2-fill,
  .bi-grid-3x3,
  .bi-hdd,
  .bi-hdd-network,
  .bi-hdd-rack,
  .bi-hourglass-bottom,
  .bi-house-door,
  .bi-house-heart,
  .bi-images,
  .bi-inbox,
  .bi-info-circle,
  .bi-input-cursor-text,
  .bi-journal-bookmark,
  .bi-journal-check,
  .bi-journal-text,
  .bi-journal-x,
  .bi-key,
  .bi-layout-sidebar,
  .bi-life-preserver,
  .bi-lightbulb,
  .bi-linkedin,
  .bi-list-check,
  .bi-list-columns,
  .bi-list-ul,
  .bi-lock,
  .bi-mailbox,
  .bi-mortarboard,
  .bi-paperclip,
  .bi-patch-check,
  .bi-pc-display,
  .bi-people,
  .bi-people-fill,
  .bi-percent,
  .bi-person-badge,
  .bi-person-bounding-box,
  .bi-person-gear,
  .bi-person-lines-fill,
  .bi-person-vcard,
  .bi-pie-chart,
  .bi-play-btn,
  .bi-plug,
  .bi-plus-square,
  .bi-question-circle,
  .bi-radar,
  .bi-receipt,
  .bi-robot,
  .bi-rocket-takeoff,
  .bi-router,
  .bi-search,
  .bi-send,
  .bi-shield-check,
  .bi-shield-lock,
  .bi-signpost,
  .bi-sliders,
  .bi-speedometer,
  .bi-speedometer2,
  .bi-tags,
  .bi-terminal,
  .bi-train-front,
  .bi-trophy,
  .bi-truck,
  .bi-truck-front,
  .bi-upc,
  .bi-upc-scan,
  .bi-wallet2,
  .bi-water,
  .bi-wechat,
  .bi-window-stack
)::before { content: '' !important; }
html.icons-3d .empty-state i.bi { width: 72px; height: 72px; margin: 0 auto 12px; opacity: 1 !important; display: block; }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-activity { background-image: url("icons3d/activity.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-airplane { background-image: url("icons3d/airplane.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-arrow-left { background-image: url("icons3d/arrow-left.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-arrow-left-right { background-image: url("icons3d/arrow-left-right.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-bank { background-image: url("icons3d/bank.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-bar-chart { background-image: url("icons3d/bar-chart.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-bar-chart-fill { background-image: url("icons3d/bar-chart-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-bar-chart-line { background-image: url("icons3d/bar-chart-line.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-bell { background-image: url("icons3d/bell.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-book { background-image: url("icons3d/book.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-book-half { background-image: url("icons3d/book-half.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-box { background-image: url("icons3d/box.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-box-arrow-in-down { background-image: url("icons3d/box-arrow-in-down.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-box-arrow-in-right { background-image: url("icons3d/box-arrow-in-right.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-box-arrow-up { background-image: url("icons3d/box-arrow-up.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-box-seam { background-image: url("icons3d/box-seam.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-boxes { background-image: url("icons3d/boxes.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-building { background-image: url("icons3d/building.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-buildings { background-image: url("icons3d/buildings.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-calculator { background-image: url("icons3d/calculator.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-calendar-check { background-image: url("icons3d/calendar-check.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-calendar2-check { background-image: url("icons3d/calendar2-check.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-camera-video { background-image: url("icons3d/camera-video.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-cash-coin { background-image: url("icons3d/cash-coin.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-cash-stack { background-image: url("icons3d/cash-stack.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-chat-dots { background-image: url("icons3d/chat-dots.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-chat-dots-fill { background-image: url("icons3d/chat-dots-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-chat-left-dots { background-image: url("icons3d/chat-left-dots.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-check-circle { background-image: url("icons3d/check-circle.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-check2-circle { background-image: url("icons3d/check2-circle.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-check2-square { background-image: url("icons3d/check2-square.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-clipboard-check { background-image: url("icons3d/clipboard-check.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-clipboard-data { background-image: url("icons3d/clipboard-data.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-clock { background-image: url("icons3d/clock.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-clock-history { background-image: url("icons3d/clock-history.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-cloud-arrow-down { background-image: url("icons3d/cloud-arrow-down.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-cloud-upload-fill { background-image: url("icons3d/cloud-upload-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-collection { background-image: url("icons3d/collection.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-cpu { background-image: url("icons3d/cpu.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-currency-exchange { background-image: url("icons3d/currency-exchange.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-database { background-image: url("icons3d/database.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-diagram-2 { background-image: url("icons3d/diagram-2.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-diagram-3 { background-image: url("icons3d/diagram-3.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-droplet { background-image: url("icons3d/droplet.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-emoji-smile { background-image: url("icons3d/emoji-smile.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-envelope-arrow-down { background-image: url("icons3d/envelope-arrow-down.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-envelope-at { background-image: url("icons3d/envelope-at.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-envelope-paper { background-image: url("icons3d/envelope-paper.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-exclamation-triangle { background-image: url("icons3d/exclamation-triangle.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-file-code { background-image: url("icons3d/file-code.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-file-earmark-arrow-down { background-image: url("icons3d/file-earmark-arrow-down.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-file-earmark-ruled { background-image: url("icons3d/file-earmark-ruled.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-file-earmark-text { background-image: url("icons3d/file-earmark-text.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-file-earmark-text-fill { background-image: url("icons3d/file-earmark-text-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-fingerprint { background-image: url("icons3d/fingerprint.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-folder-fill { background-image: url("icons3d/folder-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-folder2-open { background-image: url("icons3d/folder2-open.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-gear { background-image: url("icons3d/gear.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-gear-fill { background-image: url("icons3d/gear-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-geo-alt { background-image: url("icons3d/geo-alt.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-gift { background-image: url("icons3d/gift.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-git { background-image: url("icons3d/git.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-globe-americas { background-image: url("icons3d/globe-americas.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-globe-asia-australia { background-image: url("icons3d/globe-asia-australia.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-globe2 { background-image: url("icons3d/globe2.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-graph-up { background-image: url("icons3d/graph-up.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-graph-up-arrow { background-image: url("icons3d/graph-up-arrow.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-grid-1x2 { background-image: url("icons3d/grid-1x2.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-grid-1x2-fill { background-image: url("icons3d/grid-1x2-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-grid-3x3 { background-image: url("icons3d/grid-3x3.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-hdd { background-image: url("icons3d/hdd.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-hdd-network { background-image: url("icons3d/hdd-network.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-hdd-rack { background-image: url("icons3d/hdd-rack.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-hourglass-bottom { background-image: url("icons3d/hourglass-bottom.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-house-door { background-image: url("icons3d/house-door.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-house-heart { background-image: url("icons3d/house-heart.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-images { background-image: url("icons3d/images.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-inbox { background-image: url("icons3d/inbox.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-info-circle { background-image: url("icons3d/info-circle.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-input-cursor-text { background-image: url("icons3d/input-cursor-text.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-journal-bookmark { background-image: url("icons3d/journal-bookmark.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-journal-check { background-image: url("icons3d/journal-check.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-journal-text { background-image: url("icons3d/journal-text.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-journal-x { background-image: url("icons3d/journal-x.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-key { background-image: url("icons3d/key.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-layout-sidebar { background-image: url("icons3d/layout-sidebar.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-life-preserver { background-image: url("icons3d/life-preserver.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-lightbulb { background-image: url("icons3d/lightbulb.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-linkedin { background-image: url("icons3d/linkedin.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-list-check { background-image: url("icons3d/list-check.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-list-columns { background-image: url("icons3d/list-columns.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-list-ul { background-image: url("icons3d/list-ul.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-lock { background-image: url("icons3d/lock.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-mailbox { background-image: url("icons3d/mailbox.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-mortarboard { background-image: url("icons3d/mortarboard.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-paperclip { background-image: url("icons3d/paperclip.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-patch-check { background-image: url("icons3d/patch-check.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-pc-display { background-image: url("icons3d/pc-display.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-people { background-image: url("icons3d/people.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-people-fill { background-image: url("icons3d/people-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-percent { background-image: url("icons3d/percent.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-person-badge { background-image: url("icons3d/person-badge.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-person-bounding-box { background-image: url("icons3d/person-bounding-box.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-person-gear { background-image: url("icons3d/person-gear.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-person-lines-fill { background-image: url("icons3d/person-lines-fill.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-person-vcard { background-image: url("icons3d/person-vcard.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-pie-chart { background-image: url("icons3d/pie-chart.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-play-btn { background-image: url("icons3d/play-btn.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-plug { background-image: url("icons3d/plug.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-plus-square { background-image: url("icons3d/plus-square.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-question-circle { background-image: url("icons3d/question-circle.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-radar { background-image: url("icons3d/radar.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-receipt { background-image: url("icons3d/receipt.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-robot { background-image: url("icons3d/robot.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-rocket-takeoff { background-image: url("icons3d/rocket-takeoff.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-router { background-image: url("icons3d/router.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-search { background-image: url("icons3d/search.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-send { background-image: url("icons3d/send.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-shield-check { background-image: url("icons3d/shield-check.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-shield-lock { background-image: url("icons3d/shield-lock.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-signpost { background-image: url("icons3d/signpost.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-sliders { background-image: url("icons3d/sliders.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-speedometer { background-image: url("icons3d/speedometer.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-speedometer2 { background-image: url("icons3d/speedometer2.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-tags { background-image: url("icons3d/tags.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-terminal { background-image: url("icons3d/terminal.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-train-front { background-image: url("icons3d/train-front.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-trophy { background-image: url("icons3d/trophy.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-truck { background-image: url("icons3d/truck.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-truck-front { background-image: url("icons3d/truck-front.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-upc { background-image: url("icons3d/upc.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-upc-scan { background-image: url("icons3d/upc-scan.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-wallet2 { background-image: url("icons3d/wallet2.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-water { background-image: url("icons3d/water.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-wechat { background-image: url("icons3d/wechat.webp"); }
html.icons-3d :is(.sidebar-link, .nav-group-header, .sidebar-sublink, .empty-state) i.bi-window-stack { background-image: url("icons3d/window-stack.webp"); }
html.icons-3d .empty-state i.bi-inbox { background-image: url("icons3d/x-empty.webp"); }
/* 弹窗 / 轻提示用的立体图标（ot_dialogs.js 生成 <span class="i3d i3d-warning">） */
.i3d { display: none; }
html.icons-3d .i3d { display: inline-block; width: 22px; height: 22px; flex: 0 0 22px; background-position: center; background-size: contain; background-repeat: no-repeat; vertical-align: -5px; margin-right: 6px; filter: drop-shadow(0 1px 1.5px rgba(0,0,0,.18)); }
html.icons-3d .i3d-lg { width: 44px; height: 44px; flex-basis: 44px; margin-right: 12px; }
html.icons-3d .i3d-empty { background-image: url("icons3d/x-empty.webp"); }
html.icons-3d .i3d-info { background-image: url("icons3d/x-info.webp"); }
html.icons-3d .i3d-warning { background-image: url("icons3d/x-warning.webp"); }
html.icons-3d .i3d-error { background-image: url("icons3d/x-error.webp"); }
html.icons-3d .i3d-success { background-image: url("icons3d/x-success.webp"); }
html.icons-3d .i3d-question { background-image: url("icons3d/x-question.webp"); }
html.icons-3d .i3d-ask { background-image: url("icons3d/x-ask.webp"); }
html.icons-3d .i3d-danger { background-image: url("icons3d/x-danger.webp"); }
