:root{font-family:IBM Plex Sans,Segoe UI,sans-serif;color:#1f2937;background:#f3f6f8;--text-main: #1f2937;--text-muted: #334155;--text-strong: #111827;--border-soft: #c9d6df;--border-mid: #9fb7c8;--surface-main: #ffffff;--surface-muted: #eef4f8;--surface-panel: #f8fbfd;--surface-elevated: #f8fcffeb;--surface-app-gradient: radial-gradient(circle at top left, #ffffff 0%, #eaf1f5 55%, #d9e5ed 100%);--map-grid-a: rgba(156, 172, 185, .22);--map-grid-b: rgba(156, 172, 185, .12);--overlay: rgba(15, 23, 42, .45);--overlay-soft: rgba(15, 23, 42, .35);--button-accent: #1f5f85;--button-accent-text: #ffffff;--button-danger: #dc2626;--button-danger-border: #b91c1c;--button-neutral-border: #8da4b4;--button-neutral-bg: #eef4f8;--button-neutral-text: #1f2937;--button-ok: #0f766e;--node-fill: #ffffff;--node-stroke: #1f2937;--node-label-fill: #0f172a;--node-label-stroke: #f8fafc;--edge: #2563eb;--edge-selected: #ea580c;--edge-control-guide: rgba(15, 23, 42, .55);--edge-control-fill: #f8fafc;--edge-control-stroke: #c2410c;--badge-border: #b9c6d1;--badge-bg: rgba(248, 252, 255, .92);--dialog-bg: #ffffff;--dialog-border: #d1d5db;--dialog-shadow: 0 18px 45px rgba(2, 6, 23, .25);--close-hover-bg: #f3f4f6}@media (prefers-color-scheme: dark){:root{color:#e2e8f0;background:#0f172a;--text-main: #e2e8f0;--text-muted: #cbd5e1;--text-strong: #f8fafc;--border-soft: #334155;--border-mid: #475569;--surface-main: #1e293b;--surface-muted: #334155;--surface-panel: #1b2436;--surface-elevated: rgba(15, 23, 42, .82);--surface-app-gradient: radial-gradient(circle at top left, #1f2937 0%, #111827 55%, #0b1220 100%);--map-grid-a: rgba(148, 163, 184, .18);--map-grid-b: rgba(148, 163, 184, .08);--overlay: rgba(2, 6, 23, .64);--overlay-soft: rgba(2, 6, 23, .6);--button-accent: #38bdf8;--button-accent-text: #0f172a;--button-danger: #ef4444;--button-danger-border: #b91c1c;--button-neutral-border: #64748b;--button-neutral-bg: #334155;--button-neutral-text: #e2e8f0;--button-ok: #14b8a6;--node-fill: #e2e8f0;--node-stroke: #0f172a;--node-label-fill: #f8fafc;--node-label-stroke: #0f172a;--edge: #60a5fa;--edge-selected: #fb923c;--edge-control-guide: rgba(148, 163, 184, .75);--edge-control-fill: #cbd5e1;--edge-control-stroke: #f97316;--badge-border: #475569;--badge-bg: rgba(15, 23, 42, .9);--dialog-bg: #111827;--dialog-border: #334155;--dialog-shadow: 0 20px 50px rgba(2, 6, 23, .6);--close-hover-bg: #374151}}*{box-sizing:border-box}html,body,#root{margin:0;width:100%;height:100%}body{color:var(--text-main);background:var(--surface-main)}.appShell{position:relative;height:100%;display:grid;grid-template-rows:auto 1fr auto;background:var(--surface-app-gradient)}.projectBadge{position:fixed;right:12px;bottom:12px;padding:6px 10px;border-radius:8px;border:1px solid var(--badge-border);background:var(--badge-bg);color:var(--text-muted);font-size:12px;font-weight:600;letter-spacing:.02em;z-index:40;pointer-events:none}.toolbar{display:grid;grid-template-columns:auto auto 1fr auto auto auto;gap:12px;align-items:center;padding:12px;border-bottom:1px solid var(--border-soft);background:var(--surface-elevated);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.fileInput{display:inline-flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border-mid);border-radius:8px;background:var(--surface-main)}.fileTypeLabel{font-weight:600}.hiddenFileInput{display:none}.fileButtonLabel{border:1px solid var(--button-neutral-border);border-radius:6px;padding:5px 10px;background:var(--button-neutral-bg);color:var(--button-neutral-text);cursor:pointer}.fileValue{min-width:72px;color:var(--text-muted)}.fileValueButton{min-width:72px;padding:0;border:none;background:transparent;color:var(--button-accent);text-align:left;text-decoration:underline;cursor:pointer}.fileValueButton:hover{color:var(--edge-selected)}.modeGroup{display:flex;flex-wrap:wrap;gap:8px}.modeButtonWithIndicator{display:inline-flex;align-items:center;gap:6px}.modeButton{border:1px solid var(--button-neutral-border);border-radius:999px;background:var(--button-neutral-bg);color:var(--button-neutral-text);padding:6px 12px;cursor:pointer}.modeButton.active{background:var(--button-accent);color:var(--button-accent-text);border-color:var(--button-accent)}.validationIndicator{width:12px;height:12px;border-radius:999px;background:var(--button-danger);box-shadow:0 0 0 1px #00000026;flex:0 0 auto}.validationTooltip{position:fixed;background:#0f172a;color:#fff;padding:6px 8px;border-radius:6px;font-size:12px;line-height:1.35;max-width:min(420px,calc(100vw - 16px));white-space:normal;word-break:break-word;pointer-events:none;z-index:2147483647}.clearButton{border:1px solid var(--button-danger-border);border-radius:8px;background:var(--button-danger);color:#fff;padding:8px 12px;cursor:pointer;font-weight:600}.mapEditor{position:relative;overflow:hidden;background:repeating-linear-gradient(45deg,var(--map-grid-a),var(--map-grid-a) 12px,var(--map-grid-b) 12px,var(--map-grid-b) 24px)}.mapImage,.mapOverlay{position:absolute}.mapImage{object-fit:cover;pointer-events:none}.mapOverlay{cursor:crosshair}.edge{stroke:var(--edge);stroke-linecap:round;opacity:.85}.edge.selected{stroke:var(--edge-selected);opacity:1}.edgeHitArea{stroke:transparent;stroke-linecap:round;stroke-linejoin:round;cursor:pointer}.edgeControlGuide{fill:none;stroke:var(--edge-control-guide);stroke-width:1.5;stroke-dasharray:4 4;pointer-events:none}.edgeControlPoint{fill:var(--edge-control-fill);stroke:var(--edge-control-stroke);stroke-width:3;cursor:grab}.edgeControlPoint:active{cursor:grabbing}.blockzoneArea{fill:#96484857}.node{fill:var(--node-fill);stroke:var(--node-stroke);stroke-width:3;cursor:pointer}.node.selected{stroke:var(--edge-selected)}.node.spawn{fill:#10b981}.node.exit{fill:#ef4444}.node.pending{stroke:#7c3aed;stroke-width:12}.nodeLabel{fill:var(--node-label-fill);font-size:36px;font-weight:600;paint-order:stroke;stroke:var(--node-label-stroke);stroke-width:4}.mapPlaceholder{height:100%;display:grid;place-items:center;font-size:20px;color:var(--text-muted)}.codePanel{border-top:1px solid var(--border-soft);padding:12px;display:flex;align-items:center;background:var(--surface-panel)}.codePanelHeader{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.pathWidthField{display:inline-flex;align-items:center;gap:8px}.pathWidthField input{width:110px;padding:6px 8px}.toggleField{display:inline-flex;align-items:center;gap:6px;color:var(--text-main)}.copyButton{border:none;border-radius:6px;padding:8px 12px;background:var(--button-ok);color:#fff;cursor:pointer}.copyState{min-width:72px;font-size:12px;color:var(--button-ok)}.scaleField{display:inline-flex;align-items:center;gap:8px}.scaleField input{width:80px;padding:6px 8px}.pathWidthField input,.scaleField input{border:1px solid var(--border-mid);border-radius:6px;background:var(--surface-main);color:var(--text-main)}.exportHintOverlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay-soft);display:grid;place-items:center;z-index:60}.exportHintDialog{position:relative;width:min(360px,calc(100vw - 24px));background:var(--dialog-bg);border:1px solid var(--dialog-border);border-radius:10px;box-shadow:0 14px 35px #02061738;padding:16px}.exportHintDialog h3{margin:0 28px 8px 0;font-size:16px;color:var(--text-strong)}.exportHintDialog p{margin:0;color:var(--text-muted);font-size:14px;line-height:1.4}.exportHintCloseButton{position:absolute;top:8px;right:8px;border:none;background:transparent;color:var(--text-muted);font-size:20px;line-height:1;padding:2px 6px;border-radius:6px;cursor:pointer}.exportHintCloseButton:hover{background:var(--close-hover-bg)}.exportHintActions{margin-top:12px;display:flex;justify-content:flex-end}.exportHintOkButton{border:1px solid var(--button-ok);background:var(--button-ok);color:#fff;border-radius:6px;padding:6px 12px;cursor:pointer}.confirmOverlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);display:grid;place-items:center;z-index:50}.confirmDialog{background:var(--dialog-bg);border-radius:12px;padding:18px;width:min(460px,calc(100vw - 24px));border:1px solid var(--dialog-border);box-shadow:var(--dialog-shadow)}.confirmDialog h2{margin:0;font-size:20px;font-weight:600;color:var(--text-strong)}.confirmActions{margin-top:16px;display:flex;justify-content:flex-end;gap:10px}.backButton{border:1px solid var(--button-neutral-border);border-radius:8px;background:var(--surface-main);color:var(--text-main);padding:8px 12px;cursor:pointer}.yesButton{border:1px solid #991b1b;border-radius:8px;background:var(--button-danger);color:#fff;padding:8px 12px;cursor:pointer;font-weight:600}@media (max-width: 1100px){.toolbar{grid-template-columns:1fr}}.uploaderShell{min-height:100%}.uploaderToolbar{grid-template-columns:1fr;gap:10px;align-items:stretch}.toolbarRow{display:grid;gap:12px;min-width:0}.toolbarRowFields{grid-template-columns:repeat(3,minmax(0,1fr))}.toolbarRowPickers{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto}.fieldGroup{display:grid;grid-template-columns:88px minmax(0,1fr);gap:10px;min-width:0;align-items:center}.fieldLabel{font-size:13px;font-weight:700;color:var(--text-muted);letter-spacing:.01em;white-space:nowrap}.textField{width:100%;min-width:0;padding:10px 12px;border:1px solid var(--border-mid);border-radius:8px;background:var(--surface-main);color:var(--text-main);box-shadow:inset 0 1px #ffffff47}.textField:focus,.fileButtonLabel:focus-visible,.sendButton:focus-visible{outline:2px solid color-mix(in srgb,var(--button-accent) 52%,transparent);outline-offset:2px}.licensePicker,.assetPicker{min-height:42px;align-self:stretch;grid-template-columns:140px 120px minmax(0,1fr)}.sendButton{min-height:42px;font-size:15px;font-weight:700}.toolbarSendButton{min-width:120px;align-self:stretch}.sendButtonWrap{display:flex}.sendButton:disabled{border-color:color-mix(in srgb,var(--button-danger-border) 65%,var(--border-mid));background:color-mix(in srgb,var(--button-danger) 58%,var(--surface-muted));color:#fff;cursor:not-allowed;opacity:.82;filter:saturate(.72)}.dropzoneWrap{min-height:0;padding:18px}.dropzone{height:100%;min-height:0;display:grid;grid-template-rows:auto 1fr;gap:18px;padding:20px;border:2px dashed var(--border-mid);border-radius:18px;background:linear-gradient(180deg,#ffffff80,#ffffff29),repeating-linear-gradient(45deg,var(--map-grid-a),var(--map-grid-a) 12px,var(--map-grid-b) 12px,var(--map-grid-b) 24px);transition:border-color .14s ease,background-color .14s ease,transform .14s ease,box-shadow .14s ease}.dropzone.dragging{border-color:var(--button-accent);box-shadow:0 18px 44px #1f5f8529;transform:translateY(-1px)}.dropzoneIntro{display:grid;gap:4px}.dropzoneTitle{margin:0;font-size:clamp(24px,3vw,34px);font-weight:700;color:var(--text-strong)}.dropzoneSubtitle{margin:0;max-width:72ch;color:var(--text-muted);line-height:1.45}.dropzoneEmpty{display:grid;place-items:center;border-radius:14px;border:1px dashed var(--border-soft);background:color-mix(in srgb,var(--surface-elevated) 78%,transparent);color:var(--text-muted);font-size:18px;font-weight:600}.fileGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px;align-content:start;overflow:auto;padding-right:4px}.fileCard{position:relative;display:grid;gap:10px;padding:12px;border:1px solid var(--border-soft);border-radius:16px;background:color-mix(in srgb,var(--surface-main) 84%,transparent);box-shadow:0 10px 26px #0f172a14;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.previewFrame{position:relative;aspect-ratio:1;display:grid;place-items:center;overflow:hidden;border-radius:12px;background:linear-gradient(135deg,var(--surface-panel),var(--surface-muted));border:1px solid var(--border-soft)}.removeFileButton{position:absolute;top:8px;right:8px;width:28px;height:28px;border:1px solid var(--button-danger-border);border-radius:999px;background:color-mix(in srgb,var(--button-danger) 78%,var(--surface-main));color:#fff;font-size:12px;font-weight:800;line-height:1;cursor:pointer;z-index:1}.removeFileButton:hover{filter:brightness(1.05)}.previewImage{width:100%;height:100%;object-fit:cover}.fileGlyph{padding:10px;text-align:center;font-size:22px;font-weight:800;color:var(--button-accent);word-break:break-word}.licenseBadge{position:absolute;top:10px;right:10px;padding:4px 8px;border-radius:999px;background:var(--button-accent);color:var(--button-accent-text);font-size:11px;font-weight:800;letter-spacing:.04em}.fileName{margin:0;font-size:14px;font-weight:600;color:var(--text-main);overflow-wrap:anywhere}.statusBar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px 16px;border-top:1px solid var(--border-soft);background:var(--surface-elevated);font-size:14px;font-weight:600}.statusMessage{min-height:1.2em}.packageMeta{margin-left:auto;color:var(--text-muted);text-align:right;white-space:nowrap}.licenseDialog{position:relative;width:min(760px,calc(100vw - 24px))}.licenseContent{margin:16px 0 0;max-height:min(70vh,680px);overflow:auto;padding:14px;border:1px solid var(--border-soft);border-radius:10px;background:var(--surface-panel);color:var(--text-main);font:13px/1.45 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;white-space:pre-wrap;word-break:break-word}.sendValidationTooltip{width:max-content;min-width:max-content;max-width:none;display:grid;gap:4px;z-index:100;transform:translate(-100%);white-space:nowrap}.status-idle{color:var(--text-muted)}.status-working{color:var(--button-accent)}.status-success{color:var(--button-ok)}.status-error{color:var(--button-danger)}@media (max-width: 1200px){.toolbarRowFields{grid-template-columns:repeat(2,minmax(0,1fr))}.toolbarRowPickers{grid-template-columns:minmax(0,1fr) auto}}@media (max-width: 720px){.toolbar.uploaderToolbar,.toolbarRowFields,.toolbarRowPickers{grid-template-columns:1fr}.fieldGroup{grid-template-columns:1fr;gap:6px;align-items:stretch}.dropzoneWrap{padding:12px}.dropzone{padding:16px}.statusBar{flex-direction:column;align-items:flex-start}.packageMeta{margin-left:0;text-align:left}}
