:root{--bg:#0b0f19;--panel:#131b2a;--panel2:#1b2537;--stroke:#344155;--text:#f2f6ff;--muted:#a2b1c8;--cyan:#06b6d4;--gold:#f59e0b;--purple:#a855f7;--red:#fb5b69;--green:#34d399}*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0}body{font:16px/1.45 system-ui,-apple-system,Segoe UI,sans-serif;background:var(--bg);color:var(--text);overflow:hidden}button,select,input,textarea{font:inherit}button{cursor:pointer;touch-action:manipulation;color:inherit}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid var(--cyan);outline-offset:2px}.hidden{display:none!important}.topbar{height:78px;position:absolute;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:0 25px;background:linear-gradient(#0b0f19f5,#0b0f19c7);border-bottom:1px solid #283449}.brand{display:flex;gap:12px;align-items:center}.brand-icon{color:var(--cyan);font-size:40px;text-shadow:0 0 18px var(--cyan)}.brand strong{display:block;font-size:22px;letter-spacing:.4px}.brand em{color:var(--cyan);font-style:normal}.brand small{display:block;font-size:10px;letter-spacing:2.2px;color:var(--muted)}.top-actions{display:flex;align-items:center;gap:10px}.status{font-size:13px;color:var(--green);margin-right:10px}.btn{min-height:48px;padding:10px 18px;border:1px solid #39506a;border-radius:12px;background:#1b2940;font-weight:700;white-space:nowrap}.btn:hover{border-color:var(--cyan);background:#253855}.btn.primary{background:linear-gradient(125deg,#067c9e,#06b6d4);border-color:#35d3ed;color:#04111b}.btn.subtle{background:#111b2b}.btn:disabled{opacity:.45;cursor:not-allowed}#workspace{position:absolute;inset:78px 0 0;overflow:hidden;touch-action:none;cursor:grab;background-color:var(--bg);background-image:radial-gradient(#28364a 1.3px,transparent 1.3px);background-size:26px 26px}#workspace:active{cursor:grabbing}.world{position:absolute;width:6000px;height:5000px;transform-origin:0 0;left:0;top:0}.connectors,.effects,#tablesLayer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.connectors{overflow:visible}.connector{fill:none;stroke:#06b6d4;stroke-width:3;filter:drop-shadow(0 0 5px #06b6d480);pointer-events:stroke;cursor:pointer}.connector.one{stroke:#d4b2ff}.connector.highlight{stroke:#f59e0b;stroke-width:5}.connector.danger{stroke:var(--red);stroke-dasharray:10 6}.connector-label{font-size:16px;fill:#f7faff;font-weight:900;paint-order:stroke;stroke:#0b0f19;stroke-width:5}.db-table{position:absolute;width:310px;border:2px solid #33445c;border-radius:16px;background:linear-gradient(155deg,#1c2a40f9,#101a2bf9);box-shadow:0 18px 40px #0009,0 0 0 1px #162a41;pointer-events:auto;overflow:hidden;touch-action:none;user-select:none}.db-table.selected{border-color:#f59e0b;box-shadow:0 0 22px #f59e0b50}.db-table.magnetic{border-color:#06b6d4;box-shadow:0 0 0 10px #06b6d419,0 0 35px #06b6d48f;animation:breathe .75s ease-in-out infinite alternate}.db-table.shield{animation:shield .42s ease 2}.db-table.is-junction{border-color:#9156e6}.table-head{height:65px;display:flex;align-items:center;gap:7px;padding:8px 9px;background:linear-gradient(100deg,#213553,#17273e);border-bottom:1px solid #344963}.table-name{flex:1;font-size:19px;font-weight:850;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drag-handle,.icon-btn{width:48px;height:48px;display:grid;place-items:center;border:0;border-radius:10px;background:#243a57;color:#eaf3ff;flex-shrink:0}.drag-handle{font-size:27px;cursor:grab}.icon-btn{font-size:22px}.columns{padding:9px}.column{min-height:43px;display:flex;gap:7px;align-items:center;padding:7px 9px;border-radius:9px;margin:3px 0;font-size:15px}.column .col-name{flex:1;overflow-wrap:anywhere;font-weight:650}.column .data-type{color:#98aac6;font-size:11px;letter-spacing:.3px}.column.pk{border:1px solid #f59e0b9c;background:#f59e0b1b;box-shadow:inset 0 0 12px #f59e0b14}.column.fk{border:1px solid #06b6d48e;background:#06b6d41b}.column.pk.fk{border-color:#b45af5;background:linear-gradient(95deg,#ec489927,#8b5cf625)}.key-badge{font-size:11px;font-weight:900;padding:3px 5px;border-radius:6px;background:#69470d;color:#ffdb85}.fk .key-badge{background:#065363;color:#8beeff}.pk.fk .key-badge{background:#773b99;color:#f5dbff}.unique-badge{font-size:10px;color:#dcb6ff}.table-foot{display:flex;justify-content:space-between;gap:5px;border-top:1px solid #344054;padding:7px 15px;color:#93a5be;font-size:12px}.side-hint{position:absolute;left:21px;bottom:134px;z-index:3;display:flex;flex-direction:column;gap:2px;pointer-events:none;color:#a6bad3;font-size:13px}.side-hint strong{font-size:12px;letter-spacing:1.9px;color:#6fe9f8}.side-hint #zoomLabel{padding-top:9px}.dock{position:absolute;z-index:15;bottom:18px;left:50%;transform:translateX(-50%);display:flex;gap:8px;align-items:center;padding:9px 13px;border-radius:21px;border:1px solid #49617b;background:#111b2af2;box-shadow:0 12px 50px #000b;max-width:calc(100vw - 20px);overflow-x:auto}.dock-group{display:flex;gap:5px}.dock-divider{height:47px;width:1px;background:#42516a;flex-shrink:0}.tool{min-width:58px;min-height:63px;padding:5px 9px;border:1px solid transparent;border-radius:13px;background:transparent;font-size:23px;font-weight:850;white-space:nowrap}.tool span{display:block;font-size:10px;font-weight:650;color:#99acc4}.tool:hover,.tool.active{background:#134059;border-color:#06b6d4}.tool.active{box-shadow:inset 0 0 9px #06b6d440}.tool.main-tool{color:#ffcf79}.tool.accent{color:#62e5f7}.query-drawer{position:absolute;z-index:20;top:85px;right:12px;bottom:106px;width:min(1050px,calc(100vw - 24px));overflow:auto;background:#111a29f9;border:1px solid #466080;border-radius:17px;box-shadow:0 25px 100px #000e;display:flex;flex-direction:column}.drawer-head{display:flex;justify-content:space-between;gap:8px;align-items:center;padding:13px 17px;border-bottom:1px solid #34445e}.drawer-head h2{font-size:20px;margin:0}.drawer-head>div{display:flex;gap:8px}.lab-grid{flex:1;min-height:0;display:grid;grid-template-columns:1.1fr .9fr;gap:12px;padding:14px;overflow:auto}.query-editor,.join-panel{min-width:0}.editor-top{display:flex;gap:6px;align-items:center;margin-bottom:8px}select,input,textarea{border:1px solid #43536e;background:#0d1625;color:#f4f7ff;border-radius:9px;padding:11px;min-height:48px}select{min-width:0;max-width:100%;flex:1}.data-grid{overflow:auto;max-height:200px;min-height:95px;border:1px solid #33425a;border-radius:9px;background:#0c1422}.data-grid table{border-collapse:collapse;min-width:100%;font-size:13px}.data-grid th,.data-grid td{border-bottom:1px solid #34425a;border-right:1px solid #293c50;padding:8px;white-space:nowrap;text-align:left}.data-grid th{background:#23344d;color:#9cdef0;position:sticky;top:0}.data-grid td input{min-height:36px;width:98px;padding:5px;font-size:13px}.row-actions{white-space:nowrap}.small-btn{border:1px solid #48556d;background:#1e3047;border-radius:7px;min-width:43px;min-height:38px}.small-btn.danger{color:#ff8b95}.query-title{font-weight:800;margin:13px 0 7px;color:#d6e6ff}.query-title small{font-size:11px;color:#96aaca;font-weight:400}#sqlInput{display:block;resize:vertical;width:100%;min-height:106px;font:15px/1.5 ui-monospace,Consolas,monospace}.chips,.editor-buttons,.join-buttons{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.chip{min-height:40px;border:1px solid #38637d;background:#123049;padding:5px 10px;border-radius:8px;color:#99f0ff;font-family:monospace;font-weight:800}.editor-buttons{align-items:center}#sqlFeedback{font-size:12px;color:#a3b3ce}.join-buttons .btn{flex:1;padding:8px;min-width:75px}.join-buttons .active{background:#126f79;color:#fff;border-color:#06b6d4}#vennSvg{width:100%;height:152px;margin:6px 0}#vennSvg .venn-ring{fill:#1c2e46;stroke:#86a4c4;stroke-width:2.5}#vennSvg text{fill:#fff;font-size:16px;font-weight:900;text-anchor:middle}.join-controls{display:flex;flex-wrap:wrap;gap:7px}.join-controls select{min-width:110px}.join-controls button{flex:1}#joinExplanation{color:#93aaca;font-size:13px;margin-top:9px;min-height:37px}.result-grid{max-height:215px}.sql-log{padding:10px 15px;border-top:1px solid #40516b;display:flex;gap:12px;align-items:flex-start}.sql-log span{font-size:10px;color:#78dcec;letter-spacing:1px;min-width:130px}.sql-log code{color:#ffda87;font:12px/1.4 monospace;white-space:pre-wrap;overflow-wrap:anywhere}.touch-keyboard{display:grid;grid-template-columns:repeat(8,1fr);gap:5px;margin-top:7px}.touch-keyboard button{min-height:48px;border-radius:8px;border:1px solid #415775;background:#21334a}.modal-backdrop{position:absolute;inset:0;z-index:50;display:grid;place-items:center;background:#02050cba;padding:15px}.modal{width:min(590px,96vw);max-height:88vh;overflow-y:auto;background:#182237;border:1px solid #58718b;border-radius:20px;box-shadow:0 18px 95px #000d;padding:18px}.modal-header{display:flex;align-items:center;justify-content:space-between;gap:9px}.modal-header h2{font-size:23px;margin:0}.modal-footer{display:flex;justify-content:flex-end;gap:9px;flex-wrap:wrap;margin-top:16px}.modal .form-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:9px 0}.modal .form-row input,.modal .form-row select{flex:1;min-width:100px}.modal .form-row label{min-width:85px}.modal .hint{color:#b1c2d8;font-size:13px}.modal .option-card{width:100%;text-align:left;display:block;padding:13px;background:#213550;border:1px solid #475e76;border-radius:10px;margin:8px 0;min-height:52px}.modal .option-card:hover{border-color:var(--cyan)}.schema-row{display:grid;grid-template-columns:1fr 120px 70px 55px;gap:6px;align-items:center;margin:7px 0}.schema-row input,.schema-row select{min-width:0;width:100%}.schema-row label{font-size:12px;text-align:center}.schema-row .remove-field{min-width:48px;min-height:48px}.challenge-card{position:absolute;left:20px;top:92px;width:min(400px,calc(100vw - 40px));z-index:10;border:1px solid #a67b36;border-radius:13px;padding:15px;background:#221b2cf5;box-shadow:0 14px 35px #0008}.challenge-card strong{color:#ffd477}.challenge-card p{font-size:14px}.challenge-actions{display:flex;gap:8px}.challenge-actions .btn{font-size:13px}.stars{color:#ffc44e;font-size:27px}#toast{position:absolute;top:88px;right:22px;z-index:70;max-width:min(450px,90vw);background:#1b3643;border:1px solid #30bcda;border-radius:11px;padding:12px 17px;box-shadow:0 10px 28px #000a;display:none}#toast.error{background:#48202f;border-color:#fa5e70}.fx-key{position:absolute;z-index:30;border:2px solid #ffc153;padding:9px 16px;border-radius:14px;background:#513516;color:#ffe5a4;font-weight:900;white-space:nowrap;pointer-events:none;box-shadow:0 0 35px #f59e0b}.fx-particle{position:absolute;width:7px;height:7px;background:#17d6f2;border-radius:50%;pointer-events:none;box-shadow:0 0 10px #06b6d4}.pulse-dot{fill:#f59e0b;filter:drop-shadow(0 0 7px #f59e0b)}@keyframes breathe{to{box-shadow:0 0 0 18px #06b6d407,0 0 60px #06b6d4c2}}@keyframes shield{0%,100%{box-shadow:0 0 0 0 transparent}50%{box-shadow:0 0 0 14px #fb5b694d,0 0 36px #fb5b69}}@media(max-width:800px){.topbar{height:70px;padding:0 10px}.brand strong{font-size:17px}.brand small{font-size:8px;letter-spacing:1px}.top-actions .status{display:none}.top-actions{gap:5px}.top-actions .btn{padding:8px 10px;font-size:12px}.dock{left:8px;right:8px;transform:none;justify-content:flex-start}.side-hint{bottom:114px}.query-drawer{top:73px;bottom:107px}.lab-grid{grid-template-columns:1fr}.drawer-head h2{font-size:16px}.drawer-head .btn{padding:7px;font-size:12px}.schema-row{grid-template-columns:1fr 92px 61px 45px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
