File size: 18,796 Bytes
df84e45 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | /* Figma-like skin: floating tool dock at the bottom, layers left, Design panel right. */
html[data-skin="figma"] {
--font-ui: "Inter", "Inter Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--fs-ui: 11px;
--ui-bg: #ffffff; --ui-bg2: #f5f5f5; --ui-fg: rgba(0, 0, 0, 0.9); --ui-muted: rgba(0, 0, 0, 0.5);
--ui-border: #e6e6e6; --ui-hover: #f5f5f5; --ui-active: #e5f4ff;
--accent: #0d99ff; --canvas-bg: #f5f5f5; --sel: #0d99ff; --guide: #f24822;
--input-bg: #f5f5f5; --input-hover: #efefef; --input-border: transparent;
--radius: 5px; --pop-bg: #ffffff; --menu-bg: #1e1e1e;
}
html[data-skin="figma"][data-theme="dark"] {
--ui-bg: #2c2c2c; --ui-bg2: #383838; --ui-fg: #ffffff; --ui-muted: rgba(255, 255, 255, 0.55);
--ui-border: #444444; --ui-hover: #383838; --ui-active: #4a5a6d; --canvas-bg: #1e1e1e;
--input-bg: #383838; --input-hover: #404040; --pop-bg: #2c2c2c; --menu-bg: #1e1e1e;
--checker: repeating-conic-gradient(#3a3a3a 0 25%, #2c2c2c 0 50%) 0 0 / 12px 12px;
}
.skin-figma { background: var(--canvas-bg); }
.fg-panel {
width: 241px; flex: none; background: var(--ui-bg); display: flex; flex-direction: column; min-height: 0; z-index: 2;
}
.fg-left { border-right: 1px solid var(--ui-border); }
.fg-right { border-left: 1px solid var(--ui-border); }
html[data-layout="swap"] .fg-left { border-right: 0; border-left: 1px solid var(--ui-border); }
html[data-layout="swap"] .fg-right { border-left: 0; border-right: 1px solid var(--ui-border); }
.fg-head { display: flex; align-items: center; gap: 8px; height: 48px; padding: 0 8px 0 10px; border-bottom: 1px solid var(--ui-border); flex: none; }
.fg-head-right { gap: 6px; }
.fg-logo { display: flex; align-items: center; gap: 2px; height: 32px; padding: 0 6px; border: 0; background: transparent; border-radius: 6px; cursor: pointer; }
.fg-logo:hover { background: var(--ui-hover); }
.fg-file { min-width: 0; }
.fg-file-name { font-weight: 600; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 170px; }
.fg-file-sub { color: var(--ui-muted); font-size: 11px; }
.fg-tabs { display: flex; gap: 2px; padding: 8px 8px 4px; flex: none; border-bottom: 1px solid var(--ui-border); }
.fg-tabs .tab { border: 0; background: transparent; height: 26px; padding: 0 8px; border-radius: 5px; cursor: pointer; font-weight: 500; color: var(--ui-muted); }
.fg-tabs .tab:hover { color: var(--ui-fg); }
.fg-tabs .tab.on { color: var(--ui-fg); background: var(--ui-bg2); font-weight: 600; }
.fg-pages { padding: 8px 8px 6px; border-bottom: 1px solid var(--ui-border); flex: none; }
.fg-pages-title { font-weight: 600; padding: 2px 6px 6px; }
.fg-page { display: flex; align-items: center; gap: 6px; height: 28px; padding: 0 6px; border-radius: 5px; }
.fg-page.on { background: var(--ui-bg2); font-weight: 500; }
.fg-left-body, .fg-right-body { flex: 1 1 auto; min-height: 0; overflow: auto; display: flex; flex-direction: column; }
.fg-share { background: #0d99ff; color: #fff; border: 0; height: 28px; padding: 0 10px; border-radius: 5px; font-weight: 600; }
.fg-share:hover:not(:disabled) { background: #0c8ce9; }
.fg-share:disabled { background: var(--ui-bg2); color: var(--ui-muted); opacity: 1; }
.fg-play { min-width: 28px; }
.fg-center { position: relative; }
.fg-toolbar {
position: absolute; left: 50%; bottom: 14px; transform: translateX(-50%); z-index: 10; display: flex; align-items: center; gap: 2px;
background: var(--ui-bg); border-radius: 13px; padding: 5px; box-shadow: 0 1px 3px rgba(0,0,0,.1), 0 6px 20px rgba(0,0,0,.12);
border: 1px solid var(--ui-border);
}
.fg-tool { height: 32px; min-width: 32px; border-radius: 8px; }
.fg-tool.on { background: #0d99ff; color: #fff; }
.fg-tool.on:hover { background: #0d99ff !important; }
.fg-caret { height: 32px; min-width: 16px; padding: 0 1px; border-radius: 6px; }
.inspector-figma .insp-title { font-size: 11px; font-weight: 600; }
.skin-figma .layer-row { height: 32px; padding-left: 12px; }
.skin-figma .layer-row.selected { background: var(--ui-active); }
.skin-figma .size-badge { background: #0d99ff; }
.skin-figma .handle { width: 8px; height: 8px; border-radius: 1px; }
/* Dark theme: active toggles and the selected font read as a light accent on the dark highlight. */
html[data-skin="figma"][data-theme="dark"] .icon-btn.on,
html[data-skin="figma"][data-theme="dark"] .font-row.on { color: #7cc4ff; }
html[data-skin="figma"][data-theme="dark"] .fg-toolbar .icon-btn.fg-tool.on { color: #ffffff; }
/* ------------------------------------------------------------ Figma's current layout */
.skin-figma { font-size: 11px; }
.fg-nav { width: 48px; flex: none; display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 8px 0; background: var(--ui-bg); border-right: 1px solid var(--ui-border); z-index: 3; }
.fg-nav .fg-logo { width: 36px; height: 30px; justify-content: center; padding: 0; margin-bottom: 6px; }
.fg-nav-btn { width: 44px; border: 0; background: transparent; color: var(--ui-fg); display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 4px 0 3px; cursor: pointer; border-radius: 6px; font-family: inherit; }
.fg-nav-ic { width: 32px; height: 28px; display: inline-flex; align-items: center; justify-content: center; border-radius: 6px; }
.fg-nav-btn:hover .fg-nav-ic { background: var(--ui-hover); }
.fg-nav-btn.on .fg-nav-ic { background: var(--ui-active); color: #0d99ff; }
.fg-nav-label { font-size: 9px; color: var(--ui-muted); }
.fg-nav-btn.on .fg-nav-label { color: var(--ui-fg); font-weight: 500; }
.fg-mini { height: 24px; min-width: 24px; border-radius: 5px; }
.fg-left { width: 240px; }
.fg-view { display: flex; flex-direction: column; min-height: 0; flex: 1; }
.fg-filehead { display: flex; align-items: flex-start; gap: 6px; padding: 12px 8px 10px 16px; flex: none; }
.fg-filehead .fg-file { flex: 1; min-width: 0; }
.fg-file-row { display: flex; align-items: center; gap: 4px; }
.fg-file-name { font-weight: 600; font-size: 13px; max-width: 170px; }
.fg-caret-ic { display: inline-flex; color: var(--ui-muted); }
.fg-file-sub { font-size: 11px; margin-top: 2px; }
.fg-sec { padding: 4px 8px 8px; border-bottom: 1px solid var(--ui-border); flex: none; }
.fg-sec-head { display: flex; align-items: center; justify-content: space-between; height: 32px; padding: 0 4px 0 8px; font-weight: 600; font-size: 11px; flex: none; }
.fg-layers-head { padding: 4px 12px 0 16px; }
.fg-page { height: 28px; padding: 0 8px; font-size: 11px; }
.fg-page.on { background: var(--ui-bg2); font-weight: 600; }
.fg-page-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--ui-muted); margin-right: 2px; }
.skin-figma .layer-row { height: 28px; padding-left: 16px; font-size: 11px; border-radius: 5px; margin: 0 8px; }
.skin-figma .layers-panel { padding: 0 0 8px; }
.fg-right { width: 240px; }
.fg-head-right { height: 48px; border-bottom: 0; padding: 0 8px 0 12px; }
.fg-present { height: 28px; border: 0; background: transparent; color: var(--ui-fg); display: inline-flex; align-items: center; gap: 2px; padding: 0 4px; border-radius: 5px; cursor: pointer; }
.fg-present:hover { background: var(--ui-hover); }
.fg-share { height: 28px; padding: 0 12px; font-size: 11px; font-weight: 500; border-radius: 5px; }
.fg-tabrow { display: flex; align-items: center; padding: 0 8px 8px; border-bottom: 1px solid var(--ui-border); flex: none; }
.fg-tabrow .fg-tabs { border-bottom: 0; padding: 0; min-width: 0; overflow: hidden; flex: 0 1 auto; }
.fg-tabrow .fg-tabs .tab { padding: 0 7px; white-space: nowrap; }
.fg-tabrow .zoom-label { flex: none; }
.fg-right, .fg-left { overflow: hidden; }
.fg-tabrow .zoom-label { font-size: 11px; height: 24px; }
.fg-proto { padding: 12px 16px; display: flex; flex-direction: column; gap: 8px; }
/* property rows: flat grey fields with the label inside, as in Figma */
.inspector-figma .insp-section { padding: 12px 12px 14px 16px; gap: 8px; }
.inspector-figma .insp-title { font-size: 11px; font-weight: 600; margin-bottom: 2px; }
.inspector-figma .num-field { height: 24px; border-radius: 5px; background: #f5f5f5; }
html[data-skin="figma"][data-theme="dark"] .inspector-figma .num-field { background: #383838; }
.inspector-figma .num-label { color: var(--ui-muted); min-width: 20px; }
.inspector-figma .align-row { background: var(--ui-bg2); border-radius: 5px; padding: 1px; gap: 0; width: fit-content; }
.inspector-figma .align-row .sep { width: 1px; height: 14px; background: var(--ui-border); margin: 0 3px; }
.inspector-figma .align-row .icon-btn { min-width: 26px; height: 22px; }
.inspector-figma .align-row .icon-btn:nth-last-child(-n+3) { display: none; } /* distribute lives in the ... menu */
.inspector-figma .align-row .sep:nth-last-of-type(1) { display: none; }
.inspector-figma .slider-field .range { display: none; } /* opacity reads as a field: "100 %" */
.inspector-figma .slider-field { background: #f5f5f5; border-radius: 5px; height: 24px; padding: 0 8px; flex: 1; }
html[data-skin="figma"][data-theme="dark"] .inspector-figma .slider-field { background: #383838; }
.inspector-figma .slider-field .slider-label { color: var(--ui-muted); }
.inspector-figma .slider-field .range-num { background: transparent; border: 0; }
.inspector-figma .font-btn { height: 24px; background: #f5f5f5; border-color: transparent; border-radius: 5px; }
html[data-skin="figma"][data-theme="dark"] .inspector-figma .font-btn { background: #383838; }
.inspector-figma .color-field .field-label { display: none; }
/* toolbar: Move, Frame, Shape, Pen, Text, Comment, Actions | Draw / Design / Dev */
.fg-toolbar { border-radius: 13px; padding: 6px; gap: 0; }
.fg-tool { height: 32px; min-width: 32px; border-radius: 6px; }
.fg-caret { height: 32px; min-width: 14px; width: 14px; margin-right: 4px; }
.fg-tsep { width: 1px; align-self: stretch; margin: 0 6px; background: var(--ui-border); }
.fg-modes { display: flex; gap: 0; background: var(--ui-bg2); border-radius: 8px; padding: 2px; }
.fg-mode { height: 28px; min-width: 32px; border-radius: 6px; color: var(--ui-muted); }
.fg-mode.on { background: var(--ui-bg); color: #0d99ff; box-shadow: 0 0 0 1px var(--ui-border); }
/* the frame's name above it on the canvas */
.skin-figma .frame-label { position: absolute; font-size: 11px; color: var(--ui-muted); white-space: nowrap; pointer-events: none; }
html[data-layout="swap"] .fg-nav { border-right: 0; border-left: 1px solid var(--ui-border); }
@media (max-width: 920px) { html body .fg-nav { width: 40px; } html body .fg-nav-label { display: none; } html body .fg-nav-btn { width: 36px; } html body .fg-nav-ic { width: 30px; } }
.inspector-figma .insp-sub { font-size: 11px; color: var(--ui-muted); margin: 2px 0 -2px; }
.inspector-figma .insp-subrow { display: flex; gap: 8px; } .inspector-figma .insp-subrow .insp-sub { flex: 1; }
.inspector-figma .insp-plus { display: flex; align-items: center; height: 20px; }
.inspector-figma .insp-plus .icon-btn { height: 24px; min-width: 24px; }
.inspector-figma .insp-kind { display: flex; align-items: center; gap: 4px; padding: 12px 12px 10px 16px; border-bottom: 1px solid var(--ui-border); font-weight: 600; font-size: 12px; }
.inspector-figma .insp-kind[hidden] { display: none; }
.inspector-figma .insp-kind-ic { display: inline-flex; width: 24px; justify-content: center; color: var(--ui-fg); }
.fg-ctxbar { position: absolute; left: 50%; bottom: 62px; transform: translateX(-50%); z-index: 10; display: flex; gap: 2px; padding: 4px;
background: var(--ui-bg); border: 1px solid var(--ui-border); border-radius: 10px; box-shadow: 0 1px 3px rgba(0,0,0,.1), 0 6px 20px rgba(0,0,0,.12); white-space: nowrap; }
.fg-ctxbar[hidden] { display: none; }
.fg-ctx-btn { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 8px; border: 0; background: transparent; color: var(--ui-fg); border-radius: 6px; cursor: pointer; font-size: 11px; font-family: inherit; }
.fg-ctx-btn:hover { background: var(--ui-hover); }
@media (max-width: 1100px) { html body .fg-ctxbar .fg-ctx-btn:nth-child(n+3) { display: none; } }
.inspector-figma .slider-field .slider-label { display: none; }
.skin-figma .frame-label { pointer-events: auto; cursor: default; }
.skin-figma .frame-label.on { color: var(--sel); }
.frame-sel { position: absolute; border: 1px solid var(--sel); pointer-events: none; box-sizing: border-box; }
.frame-badge { transform: translateX(-50%); }
/* ------------------------------------------------------------ floating panels: colour, fonts, type settings */
html[data-skin="figma"] .popover.fg-float { padding: 0; border-radius: 13px; border: 1px solid var(--ui-border); background: var(--ui-bg);
box-shadow: 0 2px 5px rgba(0,0,0,.15), 0 10px 24px rgba(0,0,0,.18); font-size: 11px; }
html[data-skin="figma"] .fg-float .float-head { height: 40px; border-bottom: 1px solid var(--ui-border); padding: 0 6px 0 8px; }
html[data-skin="figma"] .fg-float .float-title { font-size: 11px; font-weight: 600; padding-left: 4px; }
.fgc-tab { height: 24px; display: inline-flex; align-items: center; padding: 0 8px; border-radius: 5px; font-weight: 600; }
.fgc-tab.on { background: var(--ui-bg2); }
.fg-color-panel { width: 240px; }
.fgc-body { display: flex; flex-direction: column; }
.fgc-sv { height: 224px; border-radius: 4px; margin: 8px 8px 0; }
.fgc-sliders { padding: 12px 16px 4px; }
.fgc-hue { height: 12px; border-radius: 6px; }
.fgc-hue .cp-hue-knob { width: 12px; height: 12px; border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0,0,0,.3); border-radius: 50%; top: 0; transform: translateX(-50%); }
.fgc-values { position: relative; display: flex; align-items: center; gap: 6px; padding: 8px 16px 12px; }
.fgc-model { display: inline-flex; align-items: center; gap: 4px; height: 24px; padding: 0 6px; border: 0; border-radius: 5px; background: transparent;
color: var(--ui-fg); font: inherit; cursor: default; }
.fgc-model:hover { background: var(--ui-hover); }
.fgc-fields { flex: 1; display: flex; gap: 2px; min-width: 0; }
.fgc-fields .num-input { flex: 1; min-width: 0; height: 24px; border: 0; border-radius: 5px; background: var(--input-bg); padding: 0 6px; font: inherit; color: var(--ui-fg); }
.fgc-models { position: absolute; z-index: 5; left: 12px; top: 34px; min-width: 96px; padding: 6px; border-radius: 10px; background: var(--menu-bg); color: #fff;
box-shadow: 0 6px 20px rgba(0,0,0,.3); display: flex; flex-direction: column; }
.fgc-models .menu-item { height: 24px; font-size: 11px; }
.fgc-page { border-top: 1px solid var(--ui-border); padding: 10px 16px 14px; }
.fgc-page-title { color: var(--ui-muted); margin-bottom: 8px; }
.fgc-swatches { display: flex; flex-wrap: wrap; gap: 6px; }
.fgc-swatch { width: 16px; height: 16px; border-radius: 3px; box-shadow: inset 0 0 0 1px rgba(0,0,0,.12); }
.fg-font-panel { width: 240px; height: min(560px, calc(100vh - 32px)); }
.fgf-body { display: flex; flex-direction: column; min-height: 0; flex: 1; }
.fgf-searchrow { display: flex; align-items: center; gap: 6px; margin: 8px 8px 4px; height: 28px; padding: 0 8px; border-radius: 5px; box-shadow: inset 0 0 0 1px var(--accent); }
.fgf-search-ic { display: inline-flex; color: var(--ui-muted); }
.fgf-search { flex: 1; min-width: 0; border: 0; background: transparent; color: var(--ui-fg); font: inherit; outline: none; }
.fgf-filterrow { position: relative; padding: 0 8px 4px; }
.fgf-filter { width: 100%; display: flex; align-items: center; justify-content: space-between; height: 28px; padding: 0 8px; border: 0; border-radius: 5px;
background: transparent; color: var(--ui-fg); font: inherit; border-bottom: 1px solid var(--ui-border); cursor: default; }
.fgf-filter[hidden] { display: none; }
.fgf-filters { left: 8px; top: 30px; }
.fgf-list { flex: 1; min-height: 0; overflow: auto; max-height: none; padding: 4px 0; }
.fgf-list .font-row { display: flex; align-items: center; gap: 4px; width: 100%; height: 32px; padding: 0 12px 0 8px; font-size: 14px; border-radius: 0; }
.fgf-list .font-row.on { background: transparent; color: var(--ui-fg); }
.fgf-list .font-row:hover { background: var(--ui-hover); }
.fgf-check { width: 16px; display: inline-flex; }
.fgf-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fgf-empty { padding: 12px 16px; color: var(--ui-muted); }
.fg-type-panel { width: 240px; }
.fgt-body { padding: 12px 16px 14px; display: flex; flex-direction: column; gap: 10px; }
.fgt-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.fgt-label { color: var(--ui-muted); }
/* typography rows */
.inspector-figma .fg-weightrow { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.inspector-figma .fg-select { display: flex; align-items: center; justify-content: space-between; height: 24px; padding: 0 6px 0 8px; border: 0; border-radius: 5px;
background: var(--input-bg); color: var(--ui-fg); font: inherit; cursor: default; min-width: 0; }
.inspector-figma .fg-select:disabled { opacity: .5; }
.inspector-figma .fg-size { padding-right: 0; }
.inspector-figma .fg-size .num-label { display: none; }
.inspector-figma .fg-size-caret { height: 22px; min-width: 18px; margin-left: auto; }
.inspector-figma .fg-alignrow { align-items: center; }
.inspector-figma .fg-alignrow .segmented { background: var(--input-bg); border-radius: 5px; padding: 1px; }
.inspector-figma .fg-typeset-btn { height: 24px; min-width: 24px; }
.inspector-figma .font-btn .font-name { font-size: 11px; font-family: inherit !important; }
.inspector-figma .fg-frame-head { border-bottom: 1px solid var(--ui-border); }
.inspector-figma .fg-static { display: inline-flex; align-items: center; gap: 6px; flex: 1; height: 24px; padding: 0 8px; border-radius: 5px;
background: var(--input-bg); color: var(--ui-muted); }
.inspector-figma .fg-export-row { gap: 8px; color: var(--ui-muted); }
.inspector-figma .fg-export-scale, .inspector-figma .fg-export-fmt { display: inline-flex; align-items: center; height: 24px; padding: 0 8px; border-radius: 5px; background: var(--input-bg); flex: 1; }
.inspector-figma .fg-export-btn { width: 100%; height: 28px; border-radius: 5px; background: transparent; box-shadow: inset 0 0 0 1px var(--ui-border); color: var(--ui-fg); font-size: 11px; }
.inspector-figma .fg-export-btn:hover:not(:disabled) { background: var(--ui-hover); }
.skin-figma .layer-row.nested { padding-left: 34px; }
.skin-figma .fg-frame-row { padding-left: 4px; font-weight: 500; }
.skin-figma .layer-caret { display: inline-flex; width: 14px; justify-content: center; color: var(--ui-muted); }
.fgf-list .font-row { flex: none; }
html[data-skin="figma"] .fgf-list .font-row.on { color: var(--ui-fg); background: transparent; }
.fgf-body.font-pop { width: auto; gap: 0; }
.fgf-list.font-list { max-height: none; }
|