:root{--bg: #0b0d12;--bg-gradient: radial-gradient(1200px 800px at 20% -10%, #16202e 0%, transparent 55%), radial-gradient(1000px 700px at 110% 110%, #14263a 0%, transparent 50%), linear-gradient(180deg, #0d1117 0%, #0a0c10 100%);--surface: #151a22;--surface-raised: #1c222c;--surface-sunken: #0f131a;--border: #2b3340;--border-strong: #3d4756;--text: #e8edf5;--text-muted: #8b97a8;--text-faint: #5c6675;--accent: #4c8bff;--accent-strong: #3d7dfa;--accent-hover: #6fa2ff;--accent-glow: rgba(76, 139, 255, .28);--accent-gradient: linear-gradient(135deg, #4c8bff 0%, #3672f2 100%);--accent-on: #ffffff;--danger: #ff6b6b;--danger-strong: #f04848;--danger-glow: rgba(255, 107, 107, .22);--ok: #4ade80;--ok-strong: #22c55e;--ok-glow: rgba(74, 222, 128, .2);--warn: #f59e0b;--warn-glow: rgba(245, 158, 11, .2);--radius-sm: 6px;--radius: 10px;--radius-lg: 14px;--shadow-xs: 0 1px 2px rgb(0 0 0 / .24);--shadow-sm: 0 2px 6px rgb(0 0 0 / .28);--shadow-md: 0 8px 20px rgb(0 0 0 / .32);--shadow-lg: 0 18px 40px rgb(0 0 0 / .42);--shadow-glow: 0 0 0 3px var(--accent-glow);--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--dur-fast: .12s;--dur-base: .2s;--dur-slow: .32s;color-scheme:dark}@media (prefers-color-scheme: light){:root{--bg: #eef1f5;--bg-gradient: radial-gradient(1200px 800px at 20% -10%, #dfe8f5 0%, transparent 55%), radial-gradient(1000px 700px at 110% 110%, #e0ecf7 0%, transparent 50%), linear-gradient(180deg, #f4f6fa 0%, #e9edf3 100%);--surface: #ffffff;--surface-raised: #f8fafc;--surface-sunken: #eef2f7;--border: #d4dce6;--border-strong: #b8c4d2;--text: #1a2028;--text-muted: #5a6675;--text-faint: #8a95a4;--accent: #2563eb;--accent-strong: #1d4ed8;--accent-hover: #3b74f0;--accent-glow: rgba(37, 99, 235, .18);--shadow-xs: 0 1px 2px rgb(15 23 42 / .06);--shadow-sm: 0 2px 6px rgb(15 23 42 / .08);--shadow-md: 0 8px 20px rgb(15 23 42 / .1);--shadow-lg: 0 18px 40px rgb(15 23 42 / .14);--shadow-glow: 0 0 0 3px var(--accent-glow);color-scheme:light}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-scale{0%{opacity:0;transform:scale(.96) translateY(6px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes slide-in-right{0%{opacity:0;transform:translate(12px)}to{opacity:1;transform:translate(0)}}@keyframes pulse-glow{0%,to{box-shadow:0 0 0 0 var(--accent-glow)}50%{box-shadow:0 0 0 6px transparent}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ripple{to{opacity:0;transform:scale(2.4)}}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-4px)}40%{transform:translate(4px)}60%{transform:translate(-2px)}80%{transform:translate(2px)}}@keyframes check-pop{0%{transform:scale(0)}60%{transform:scale(1.2)}to{transform:scale(1)}}.icon-spin{animation:spin .9s linear infinite}.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;font:inherit;font-weight:500;white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid transparent;border-radius:var(--radius-sm);transition:background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out);-webkit-font-smoothing:antialiased}.btn:hover:not(:disabled){transform:translateY(-1px)}.btn:active:not(:disabled){transform:translateY(1px) scale(.98);transition-duration:60ms}.btn:focus-visible{outline:none;box-shadow:var(--shadow-glow)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}.btn-loading{cursor:progress}.btn-sm{height:30px;padding:0 12px;font-size:12px}.btn-md{height:36px;padding:0 16px;font-size:13px}.btn-lg{height:42px;padding:0 22px;font-size:14px}.btn-block{width:100%}.btn-icon-only{padding:0;width:36px}.btn-icon-only.btn-sm{width:30px}.btn-icon-only.btn-lg{width:42px}.btn-primary{background:var(--accent-gradient);color:var(--accent-on);box-shadow:0 1px #ffffff24 inset,0 2px 8px var(--accent-glow),var(--shadow-xs)}.btn-primary:hover:not(:disabled){background:linear-gradient(135deg,var(--accent-hover) 0%,var(--accent-strong) 100%);box-shadow:0 1px #ffffff2e inset,0 6px 18px var(--accent-glow),var(--shadow-sm)}.btn-primary:active:not(:disabled){box-shadow:0 1px #ffffff1a inset,0 2px 6px var(--accent-glow)}.btn-secondary{background:var(--surface-raised);color:var(--text);border-color:var(--border);box-shadow:var(--shadow-xs)}.btn-secondary:hover:not(:disabled){background:var(--surface);border-color:var(--border-strong);box-shadow:var(--shadow-sm)}.btn-secondary:active:not(:disabled){background:var(--surface-raised)}.btn-ghost{background:transparent;color:var(--text-muted);border-color:transparent}.btn-ghost:hover:not(:disabled){background:color-mix(in srgb,var(--text) 8%,transparent);color:var(--text)}.btn-ghost:active:not(:disabled){background:color-mix(in srgb,var(--text) 14%,transparent)}.btn-danger{background:color-mix(in srgb,var(--danger) 12%,transparent);color:var(--danger);border-color:color-mix(in srgb,var(--danger) 28%,transparent)}.btn-danger:hover:not(:disabled){background:color-mix(in srgb,var(--danger) 18%,transparent);border-color:color-mix(in srgb,var(--danger) 45%,transparent);box-shadow:0 4px 12px var(--danger-glow)}.btn-danger:active:not(:disabled){background:color-mix(in srgb,var(--danger) 26%,transparent)}.btn-ripple{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;pointer-events:none;overflow:hidden}.btn-ripple:after{content:"";position:absolute;width:12px;height:12px;margin:-6px;border-radius:50%;background:currentColor;opacity:0;transform:scale(0);transition:transform .45s var(--ease-out),opacity .45s var(--ease-out);left:50%;top:50%;pointer-events:none}.btn:active:not(:disabled) .btn-ripple:after{transform:scale(0);opacity:0}.btn:not(:disabled) .btn-ripple:after{animation:ripple .6s var(--ease-out)}.btn:active:not(:disabled) .btn-ripple{background:currentColor;opacity:.12;border-radius:inherit}.btn:not(:disabled) .btn-ripple{transition:opacity var(--dur-fast) var(--ease-out)}.btn-icon{flex-shrink:0;margin-top:-1px}.btn-icon-right{margin-top:-1px;margin-left:2px}.btn-text{line-height:1}:root{--bg: #0f1115;--surface: #181b22;--surface-raised: #1f232c;--border: #2a2f3a;--text: #e6e9ef;--text-muted: #9aa3b2;--accent: #4c8bff;--accent-hover: #5f99ff;--danger: #ff6b6b;--ok: #4ade80;--radius: 10px;color-scheme:dark}@media (prefers-color-scheme: light){:root{--bg: #f5f6f8;--surface: #ffffff;--surface-raised: #f0f2f5;--border: #d8dce3;--text: #1a1d23;--text-muted: #5f6773;color-scheme:light}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg-gradient);background-attachment:fixed;background-color:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}.shell{display:grid;place-items:center;min-height:100%;padding:24px}.card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:32px 28px}.card.wide{max-width:560px}.brand h1{margin:0;font-size:20px;font-weight:600;letter-spacing:-.01em}.subtitle{margin:6px 0 0;color:var(--text-muted);font-size:13px}.form{display:flex;flex-direction:column;gap:16px;margin-top:24px}.field{display:flex;flex-direction:column;gap:6px}.field>span{font-size:12px;color:var(--text-muted)}input{width:100%;padding:10px 12px;background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font:inherit;transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}input:hover:not(:disabled){border-color:var(--border-strong)}input:focus{outline:none;border-color:var(--accent);box-shadow:var(--shadow-glow);background:var(--surface)}input:disabled{opacity:.6;cursor:not-allowed}button{padding:10px 16px;border:1px solid transparent;border-radius:6px;font:inherit;font-weight:500;cursor:pointer;transition:background-color .15s ease}button.primary{background:var(--accent);color:#fff}button.primary:hover:not(:disabled){background:var(--accent-hover)}button.secondary{background:transparent;border-color:var(--border);color:var(--text);margin-top:24px}button.secondary:hover{background:var(--surface-raised)}button:disabled{opacity:.55;cursor:not-allowed}.error{margin:0;padding:10px 12px;background:color-mix(in srgb,var(--danger) 12%,transparent);border:1px solid color-mix(in srgb,var(--danger) 35%,transparent);border-radius:var(--radius-sm);color:var(--danger);font-size:13px;animation:shake var(--dur-slow) var(--ease-out)}.status{margin:20px 0 0;padding:8px 12px;border-radius:6px;font-size:13px}.status.pending{background:var(--surface-raised);color:var(--text-muted)}.status.bad{background:color-mix(in srgb,var(--danger) 12%,transparent);color:var(--danger)}.note{margin-top:24px;padding-top:16px;border-top:1px solid var(--border);color:var(--text-muted);font-size:12px;line-height:1.6}.details{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin:24px 0 0}.details>div{padding:12px;background:var(--surface-raised);border-radius:6px}.details dt{color:var(--text-muted);font-size:12px;margin-bottom:4px}.details dd{margin:0;font-size:14px;word-break:break-word}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px!important}.app-shell{display:flex;flex-direction:column;min-height:100%}.app-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;border-bottom:1px solid var(--border);background:var(--surface);flex-wrap:wrap}.app-title{display:flex;align-items:baseline;gap:10px}.app-title h1{margin:0;font-size:17px;font-weight:600}.count{color:var(--text-muted);font-size:12px}.app-actions{display:flex;align-items:center;gap:8px}.search{width:220px;padding:8px 12px;background:var(--surface-raised);border:1px solid var(--border);border-radius:6px;color:var(--text);font:inherit}.search:focus{outline:none;border-color:var(--accent)}.app-body{flex:1;padding:24px;max-width:1200px;width:100%;margin:0 auto}.hint{color:var(--text-muted);font-size:13px}.notice{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:16px 24px 0;padding:10px 14px;background:color-mix(in srgb,var(--ok) 10%,transparent);border:1px solid color-mix(in srgb,var(--ok) 30%,transparent);border-radius:var(--radius-sm);font-size:13px;box-shadow:var(--shadow-xs);animation:slide-in-right var(--dur-base) var(--ease-out)}.notice-close{background:none;border:none;color:var(--text-muted);font-size:18px;line-height:1;padding:0 4px;cursor:pointer}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;list-style:none;padding:0;margin:16px 0 0}.project-card{display:flex;flex-direction:column;gap:12px;padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-xs);cursor:default;animation:fade-in-up var(--dur-base) var(--ease-out) both;transition:transform var(--dur-base) var(--ease-out),border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-base) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}.project-card:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--border));box-shadow:var(--shadow-md);transform:translateY(-3px);background:var(--surface-raised)}.project-card:active{transform:translateY(-1px) scale(.995);transition-duration:80ms}.project-card .secondary.full{opacity:.65;transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}.project-card:hover .secondary.full{opacity:1}.project-card-head{display:flex;align-items:center;justify-content:space-between;position:relative}.badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500;white-space:nowrap}.tone-blue{background:color-mix(in srgb,#4c8bff 18%,transparent);color:#7aa9ff}.tone-violet{background:color-mix(in srgb,#9b7bff 18%,transparent);color:#b39bff}.tone-teal{background:color-mix(in srgb,#2dd4bf 18%,transparent);color:#5eead4}.tone-amber{background:color-mix(in srgb,#f59e0b 18%,transparent);color:#fbbf24}@media (prefers-color-scheme: light){.tone-blue{color:#2563eb}.tone-violet{color:#7c3aed}.tone-teal{color:#0d9488}.tone-amber{color:#b45309}}.project-name{margin:0;font-size:15px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-meta{display:grid;gap:6px;margin:0;font-size:12px}.project-meta>div{display:flex;justify-content:space-between;gap:8px}.project-meta dt{color:var(--text-muted)}.project-meta dd{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-button{width:28px;height:28px;padding:0;display:grid;place-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--text-muted);font-size:16px;line-height:1;cursor:pointer}.icon-button:hover{background:var(--surface-raised);color:var(--text)}.menu-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10}.project-menu{position:absolute;top:32px;right:0;z-index:11;min-width:120px;margin:0;padding:4px;list-style:none;background:var(--surface-raised);border:1px solid var(--border);border-radius:6px;box-shadow:0 8px 24px #00000040}.project-menu button{width:100%;padding:6px 10px;background:transparent;border:none;border-radius:4px;color:var(--text);font:inherit;text-align:left;cursor:pointer}.project-menu button:hover{background:var(--surface)}.project-menu button.danger{color:var(--danger)}button.full{width:100%;margin-top:auto}button.ghost{background:transparent;border-color:transparent;color:var(--text-muted)}button.ghost:hover:not(:disabled){background:var(--surface-raised);color:var(--text)}.empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:64px 24px;text-align:center}.empty h2{margin:0;font-size:16px;font-weight:600}.empty p{margin:0;max-width:420px}.empty .secondary{margin-top:12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:grid;place-items:center;padding:24px;background:#0000007f;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:fade-in var(--dur-base) var(--ease-out)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal{width:100%;max-width:560px;max-height:calc(100vh - 48px);display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-lg);animation:fade-in-scale var(--dur-slow) var(--ease-spring)}.modal form{display:flex;flex-direction:column;min-height:0}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.modal-header h2{margin:0;font-size:16px;font-weight:600}.modal-body{display:flex;flex-direction:column;gap:16px;padding:20px;overflow-y:auto}.modal-footer{display:flex;justify-content:flex-end;gap:8px;padding:16px 20px;border-top:1px solid var(--border)}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.field small{color:var(--text-muted);font-size:11px;line-height:1.4}.type-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0;padding:0;border:none}.type-grid legend{padding:0;margin-bottom:8px;color:var(--text-muted);font-size:12px}.type-card{position:relative;display:flex;flex-direction:column;gap:6px;padding:12px;background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;overflow:hidden;transition:border-color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out),box-shadow var(--dur-base) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}.type-card:hover{border-color:color-mix(in srgb,var(--accent) 55%,var(--border));transform:translateY(-2px);box-shadow:var(--shadow-sm)}.type-card.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--surface-raised));box-shadow:var(--shadow-glow);transform:translateY(-1px)}.type-card.selected:after{content:"";position:absolute;top:8px;right:8px;width:18px;height:18px;border-radius:50%;background:var(--accent-gradient);box-shadow:0 2px 8px var(--accent-glow);animation:check-pop var(--dur-slow) var(--ease-spring)}.type-card input{position:absolute;opacity:0;pointer-events:none}.type-hint{color:var(--text-muted);font-size:11px;line-height:1.5}@media (max-width: 560px){.type-grid,.field-row{grid-template-columns:1fr}.search{width:100%}}.dropzone{display:flex;flex-direction:column;align-items:center;gap:4px;padding:20px;margin-bottom:8px;background:var(--surface);border:1px dashed var(--border);border-radius:var(--radius);text-align:center;transition:border-color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out),transform var(--dur-base) var(--ease-out),box-shadow var(--dur-base) var(--ease-out)}.dropzone:hover{border-color:var(--border-strong);background:var(--surface-raised)}.dropzone.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--surface));transform:scale(1.01);box-shadow:var(--shadow-glow)}.dropzone.busy{opacity:.7}.dropzone-title{margin:0;font-size:13px;font-weight:500}.dropzone .hint{margin:0}.dropzone .error{width:100%;margin-top:8px;text-align:left}.editor-shell{height:100vh;overflow:hidden}.editor-shell .app-header{flex:0 0 auto}.editor-title{max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}button.back{width:30px;height:30px;padding:0;font-size:16px;border-radius:6px}.pill{padding:3px 9px;border-radius:999px;font-size:11px;font-weight:500;transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);animation:fade-in-up var(--dur-base) var(--ease-out)}.pill.pending{background:color-mix(in srgb,var(--warn) 16%,transparent);color:var(--warn)}.pill.ok{background:color-mix(in srgb,var(--ok) 16%,transparent);color:var(--ok-strong);animation:check-pop var(--dur-slow) var(--ease-spring)}.pill.bad{background:color-mix(in srgb,var(--danger) 16%,transparent);color:var(--danger);animation:shake var(--dur-slow) var(--ease-out)}.diag-summary{font-size:12px;padding:2px 8px;border-radius:999px}.diag-summary.ok{color:#16a34a;background:color-mix(in srgb,var(--ok) 12%,transparent)}.diag-summary.warn{color:#d97706;background:color-mix(in srgb,#f59e0b 12%,transparent)}.diag-summary.bad{color:var(--danger);background:color-mix(in srgb,var(--danger) 12%,transparent)}.notice.bad{background:color-mix(in srgb,var(--danger) 10%,transparent);border-color:color-mix(in srgb,var(--danger) 30%,transparent);color:var(--danger)}.editor-body{flex:1;display:grid;grid-template-columns:220px minmax(0,1fr) 300px;min-height:0}.editor-outline{border-right:1px solid var(--border);overflow-y:auto;background:var(--surface);padding:12px 0}.editor-outline h2,.editor-problems h2{display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:0 12px;font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.editor-outline ul,.editor-problems ul{list-style:none;margin:0;padding:0}.outline-item{position:relative;display:block;width:100%;padding:4px 12px;background:none;border:none;color:var(--text);font:inherit;font-size:12px;text-align:left;cursor:pointer;border-radius:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),padding-left var(--dur-fast) var(--ease-out)}.outline-item:hover{background:var(--surface-raised);padding-left:calc(var(--outline-indent, 8px) + 4px)!important}.outline-item.kind-section{font-weight:600;color:var(--text)}.outline-item.kind-component{color:var(--accent)}.outline-item.kind-action{color:#16a34a}.outline-item.kind-field{color:var(--text-muted)}.editor-main{min-width:0;min-height:0;position:relative;background:var(--bg)}.yaml-editor{display:flex;height:100%;min-height:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;line-height:20px}.yaml-gutter{flex:0 0 auto;padding:12px 8px 12px 12px;text-align:right;color:var(--text-muted);-webkit-user-select:none;user-select:none;opacity:.6;overflow:hidden;background:var(--surface);border-right:1px solid var(--border)}.yaml-line-number{height:20px;font-variant-numeric:tabular-nums}.yaml-line-number.sev-error{color:var(--danger);opacity:1;font-weight:600}.yaml-line-number.sev-warning{color:#d97706;opacity:1}.yaml-line-number.in-range{background:color-mix(in srgb,var(--accent) 16%,transparent)}.yaml-surface{position:relative;flex:1;min-width:0}.yaml-highlight,.yaml-surface textarea{position:absolute;top:0;right:0;bottom:0;left:0;margin:0;padding:12px 16px;font:inherit;line-height:20px;white-space:pre;overflow:auto;border:0;-moz-tab-size:2;tab-size:2}.yaml-highlight{pointer-events:none;color:var(--text)}.yaml-highlight .yaml-line{height:20px}.yaml-highlight .yaml-line.in-range{background:color-mix(in srgb,var(--accent) 10%,transparent)}.yaml-surface textarea{background:transparent;color:transparent;caret-color:var(--text);resize:none;outline:none}.yaml-surface textarea::selection{background:color-mix(in srgb,var(--accent) 32%,transparent)}.tok-key{color:#60a5fa}.tok-string{color:#86efac}.tok-number{color:#fbbf24}.tok-boolean{color:#c084fc}.tok-comment{color:var(--text-muted);font-style:italic}.tok-punctuation{color:var(--text-muted)}.tok-anchor{color:#f472b6}.tok-plain{color:var(--text)}@media (prefers-color-scheme: light){.tok-key{color:#1d4ed8}.tok-string{color:#15803d}.tok-number{color:#b45309}.tok-boolean{color:#7c3aed}.tok-anchor{color:#be185d}}.editor-problems{border-left:1px solid var(--border);background:var(--surface);overflow-y:auto;padding:12px 0;min-width:0}.editor-problems .hint{padding:0 12px}.problem-item{display:grid;grid-template-columns:8px auto minmax(0,1fr);gap:6px;align-items:start;width:100%;padding:6px 12px;background:none;border:none;color:var(--text);font:inherit;font-size:12px;text-align:left;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}.problem-item:hover{background:var(--surface-raised);transform:translate(2px)}.severity-dot{width:8px;height:8px;margin-top:5px;border-radius:50%}.severity-dot.sev-error{background:var(--danger)}.severity-dot.sev-warning{background:#f59e0b}.severity-dot.sev-info{background:var(--accent)}.problem-line{color:var(--text-muted);white-space:nowrap;font-variant-numeric:tabular-nums}.problem-message{grid-column:3;line-height:1.4;word-break:break-word}.problem-code{grid-column:3;color:var(--text-muted);font-size:11px;font-family:ui-monospace,monospace}@media (max-width: 1100px){.editor-body{grid-template-columns:180px minmax(0,1fr) 240px}}@media (max-width: 860px){.editor-body{grid-template-columns:minmax(0,1fr)}.editor-outline,.editor-problems{display:none}}.editor-main{display:flex;flex-direction:column}.editor-tabs{display:flex;gap:2px;padding:0 12px;border-bottom:1px solid var(--border);background:var(--surface);flex:0 0 auto}.editor-tabs button{padding:8px 16px;background:none;border:none;border-bottom:2px solid transparent;border-radius:0;color:var(--text-muted);font-size:13px;cursor:pointer}.editor-tabs button:hover{color:var(--text)}.editor-tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}.editor-tab-body{flex:1;min-height:0;position:relative}.preview-panel{display:flex;flex-direction:column;height:100%;min-height:0}.preview-toolbar{display:flex;align-items:center;gap:16px;padding:8px 12px;border-bottom:1px solid var(--border);background:var(--surface);flex:0 0 auto;flex-wrap:wrap}.preview-toolbar label{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-muted)}.preview-toolbar select{padding:4px 8px;background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font:inherit;font-size:12px;cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}.preview-toolbar select:hover{border-color:var(--border-strong);transform:translateY(-1px)}.preview-toolbar select:focus{outline:none;border-color:var(--accent);box-shadow:var(--shadow-glow)}.preview-meta{margin-left:auto;font-size:11px;color:var(--text-muted);font-family:ui-monospace,monospace}.preview-stage{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:16px;overflow:auto;background:#0a0c10}.preview-canvas{image-rendering:pixelated;border:1px solid var(--border);box-shadow:0 8px 32px #0006;flex:0 0 auto;align-self:center;max-width:100%}.preview-error{text-align:center;color:var(--danger)}.preview-error p{margin:4px 0}.preview-error .hint{color:var(--text-muted);font-family:ui-monospace,monospace;font-size:12px}.preview-scroll{display:flex;align-items:center;gap:12px;padding:8px 12px;border-top:1px solid var(--border);background:var(--surface);flex:0 0 auto}.preview-scroll input[type=range]{flex:1;accent-color:var(--accent)}.checkbox-label{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-muted);cursor:pointer}.checkbox-label input{width:auto;accent-color:var(--accent)}.editor-workbench{flex:1;min-height:0;display:grid;grid-template-columns:200px minmax(0,1fr) 460px;position:relative}.editor-workbench.panel-none{grid-template-columns:200px minmax(0,1fr)}.wb-outline{border-right:1px solid var(--border);background:var(--surface);overflow-y:auto;padding:12px 0;min-width:0}.wb-outline h2{margin:0 0 8px;padding:0 12px;font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.wb-outline ul{list-style:none;margin:0;padding:0}.outline-item.selected{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent)!important}.wb-canvas{min-width:0;min-height:0;display:flex;flex-direction:column;background:#0a0c10}.wb-side{border-left:1px solid var(--border);background:var(--surface);display:flex;flex-direction:column;min-width:0;min-height:0;animation:slide-in-right var(--dur-base) var(--ease-out)}.wb-side-tabs{display:flex;align-items:center;gap:2px;padding:0 8px;border-bottom:1px solid var(--border);flex:0 0 auto}.wb-side-tabs button{position:relative;padding:8px 12px;background:none;border:none;border-bottom:2px solid transparent;border-radius:0;color:var(--text-muted);font-size:12px;cursor:pointer;display:flex;align-items:center;gap:6px;transition:color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}.wb-side-tabs button:hover{color:var(--text);background:color-mix(in srgb,var(--text) 5%,transparent)}.wb-side-tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}.wb-side-tabs button.active:after{content:"";position:absolute;bottom:-1px;left:8px;right:8px;height:2px;background:var(--accent-gradient);border-radius:2px 2px 0 0}.wb-side-close,.wb-side-open{padding:4px 8px;background:none;border:none;color:var(--text-muted);font-size:14px;cursor:pointer;transition:color var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}.wb-side-close:hover{color:var(--text);background:var(--surface-raised);transform:scale(1.1)}.wb-side-open:hover{transform:scale(1.1) translateY(-50%)}.wb-side-tabs .wb-side-close{margin-left:auto;border-bottom:none}.wb-side-close:hover,.wb-side-open:hover{color:var(--text);background:var(--surface-raised)}.wb-side-open{position:absolute;right:0;top:50%;transform:translateY(-50%);width:20px;height:48px;padding:0;background:var(--surface);border:1px solid var(--border);border-right:none;border-radius:6px 0 0 6px;z-index:2}.tab-badge{padding:0 5px;border-radius:999px;font-size:10px;line-height:15px;font-weight:600}.tab-badge.bad{background:var(--danger);color:#fff}.tab-badge.warn{background:#f59e0b;color:#1a1d23}.wb-side-body{flex:1;min-height:0;position:relative}.problem-list{list-style:none;margin:0;padding:0}.selected-chip{padding:2px 8px;border-radius:4px;background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);font-size:11px;font-family:ui-monospace,monospace;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 1200px){.editor-workbench{grid-template-columns:160px minmax(0,1fr) 380px}}@media (max-width: 900px){.editor-workbench{grid-template-columns:minmax(0,1fr)}.wb-outline{display:none}.wb-side{position:absolute;right:0;top:0;bottom:0;width:min(420px,90vw);z-index:5;box-shadow:-8px 0 24px #00000059}.editor-workbench.panel-none .wb-side{display:none}}.type-card-head{display:flex;align-items:center;gap:8px}.type-icon{width:32px;height:32px;padding:7px;border-radius:var(--radius-sm);background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);transition:background-color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out)}.type-card:hover .type-icon{background:color-mix(in srgb,var(--accent) 18%,transparent);transform:scale(1.08) rotate(-4deg)}.type-card.selected .type-icon{background:var(--accent-gradient);color:#fff;transform:scale(1);box-shadow:0 2px 8px var(--accent-glow)}.type-card .badge{transition:transform var(--dur-fast) var(--ease-out)}.type-card:hover .badge{transform:translate(2px)}.save-hint{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;margin-left:4px;border-radius:50%;background:color-mix(in srgb,var(--ok) 20%,transparent);color:var(--ok-strong);animation:check-pop var(--dur-slow) var(--ease-spring)}.app-header .app-actions{gap:10px}.diag-summary{margin-right:4px}.app-title .btn-icon-only{color:var(--text-muted)}.app-title .btn-icon-only:hover{color:var(--accent)}.property-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:48px 24px;color:var(--text-muted);text-align:center}.property-empty svg{opacity:.5}.property-empty p{margin:0;font-size:13px}.property-panel{padding:16px;display:flex;flex-direction:column;gap:14px;animation:fade-in-up var(--dur-base) var(--ease-out)}.property-header{display:flex;align-items:center;gap:8px;padding-bottom:12px;border-bottom:1px solid var(--border)}.property-kind{padding:3px 8px;border-radius:4px;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);font-size:11px;font-weight:500}.property-id{color:var(--text-muted);font-size:11px;font-family:ui-monospace,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.property-geometry{display:flex;gap:6px;flex-wrap:wrap}.geo-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;background:var(--surface-raised);border:1px solid var(--border);border-radius:4px;font-family:ui-monospace,monospace;font-size:11px;color:var(--text-muted)}.property-fields{display:flex;flex-direction:column;gap:14px}.property-row{display:flex;flex-direction:column;gap:5px;position:relative}.property-row-check{flex-direction:row;align-items:center;justify-content:space-between}.property-label{font-size:11px;color:var(--text-muted);font-weight:500}.property-input{width:100%;padding:7px 10px;background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font:inherit;font-size:13px;transition:border-color var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out),background-color var(--dur-fast) var(--ease-out)}.property-input:hover{border-color:var(--border-strong)}.property-input:focus{outline:none;border-color:var(--accent);box-shadow:var(--shadow-glow);background:var(--surface)}.property-textarea{resize:vertical;font-family:ui-monospace,monospace;line-height:1.5}.property-hint{font-size:10px;color:var(--text-faint);line-height:1.4}.property-row.saving .property-input{border-color:var(--ok);box-shadow:0 0 0 3px var(--ok-glow);animation:pulse-glow .8s var(--ease-out)}.property-row-check input{width:auto;accent-color:var(--accent);cursor:pointer;transition:transform var(--dur-fast) var(--ease-spring)}.property-row-check input:hover{transform:scale(1.1)}.selected-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:4px;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);font-size:11px;font-family:ui-monospace,monospace;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;animation:fade-in-scale var(--dur-base) var(--ease-out)}
