:root{--brand:#6a8dff;--brand2:#b06aff;--ink:#222;--muted:#777;--bg:#f6f7fb;--line:#e6e8f0}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",PingFang SC,Microsoft YaHei,sans-serif;color:var(--ink);background:var(--bg);line-height:1.6}
a{color:var(--brand);text-decoration:none}
a:hover{opacity:.85}
.container{max-width:1120px;margin:0 auto;padding:0 20px}
.topbar{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:50}
.topbar-inner{display:flex;align-items:center;justify-content:space-between;height:60px}
.brand{font-weight:700;font-size:18px;color:var(--ink)}
.nav a{margin-left:18px;color:#444;font-size:14px}
.btn-sm,.btn{display:inline-block;background:var(--brand);color:#fff!important;padding:6px 14px;border-radius:6px;border:none;cursor:pointer;font-size:14px}
.btn{padding:10px 20px;font-size:15px}
.btn.secondary{background:#fff;color:var(--brand)!important;border:1px solid var(--brand)}
.btn.ghost{background:transparent;color:#555!important;border:1px solid var(--line)}
.main{padding:28px 20px 60px}
.hero{background:linear-gradient(120deg,var(--brand),var(--brand2));color:#fff;border-radius:16px;padding:56px 40px;margin-bottom:32px}
.hero h1{font-size:34px;margin:0 0 12px}
.hero p{font-size:17px;opacity:.95;max-width:640px}
.hero .btn{margin-top:20px;background:#fff;color:var(--brand)!important}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px}
.card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px}
.card h3{margin:0 0 8px;font-size:16px}
.tpl-card{overflow:hidden;padding:0}
.tpl-thumb{height:150px;background:linear-gradient(135deg,#dfe4ff,#efe0ff);display:flex;align-items:center;justify-content:center;color:#7a7fbf;font-size:13px}
.tpl-body{padding:12px 14px}
.tpl-body .meta{color:var(--muted);font-size:12px}
.tag{display:inline-block;background:#eef1ff;color:#5566cc;border-radius:20px;padding:2px 10px;font-size:12px;margin:2px 4px 2px 0}
.section-title{font-size:22px;margin:28px 0 16px}
.form{background:#fff;border:1px solid var(--line);border-radius:12px;padding:24px;max-width:520px}
.form.wide{max-width:100%}
.form label{display:block;margin:12px 0 4px;font-size:14px;color:#444}
.form input,.form select,.form textarea{width:100%;padding:10px;border:1px solid var(--line);border-radius:8px;font-size:14px;font-family:inherit}
.form textarea{min-height:100px}
.flashes{margin-bottom:18px}
.flash{padding:10px 14px;border-radius:8px;margin-bottom:8px;font-size:14px}
.flash-error{background:#ffe9e9;color:#c0392b}
.flash-success{background:#e6f7ec;color:#1e8e5a}
.footer{border-top:1px solid var(--line);background:#fff;padding:22px 0;color:var(--muted);font-size:13px}
.footer .container{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
.table{width:100%;border-collapse:collapse;background:#fff;border-radius:10px;overflow:hidden}
.table th,.table td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left;font-size:14px}
.table th{background:#fafbff}
.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.pricing{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px}
.plan{background:#fff;border:1px solid var(--line);border-radius:14px;padding:24px;text-align:center}
.plan.pro{border-color:var(--brand);box-shadow:0 8px 24px rgba(106,141,255,.15)}
.plan .price{font-size:32px;font-weight:700;margin:10px 0}
.plan ul{list-style:none;padding:0;text-align:left;font-size:14px;color:#555}
.plan li{padding:5px 0;border-bottom:1px dashed var(--line)}
.editor-wrap{display:grid;grid-template-columns:1fr 320px;gap:20px}
#canvas-stage{background:#eef0f6;border:1px solid var(--line);border-radius:10px;overflow:auto;max-height:74vh;padding:16px;display:flex;justify-content:center}
.cv-stage{position:relative;box-shadow:0 4px 18px rgba(0,0,0,.12);overflow:hidden;flex:none}
.cv-node{position:absolute;display:flex;align-items:center;overflow:hidden;cursor:move;box-sizing:border-box}
.cv-node .cv-text{width:100%;white-space:pre-wrap;word-break:break-word;line-height:1.2;padding:0 2px}
.cv-node.selected{outline:2px dashed var(--brand);outline-offset:1px}
.cv-node .cv-ph{width:100%;text-align:center;color:#8890c8;font-size:14px}
.cv-handle{position:absolute;right:-6px;bottom:-6px;width:12px;height:12px;background:var(--brand);border:2px solid #fff;border-radius:50%;cursor:nwse-resize}
.cv-guide{position:absolute;z-index:9999;pointer-events:none;background:#ff3b7f}
.cv-guide-v{top:0;bottom:0;width:1px}
.cv-guide-h{left:0;right:0;height:1px}
.cv-band{position:absolute;z-index:9998;background:rgba(106,141,255,.15);border:1px solid var(--brand);pointer-events:none}
.layers{max-height:180px;overflow:auto;margin-top:8px}
.layer-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--line);border-radius:6px;margin-bottom:6px;font-size:13px;cursor:pointer;background:#fff}
.layer-row.active{border-color:var(--brand);background:#f2f5ff}
.layer-row .li{width:18px;text-align:center;color:#8890c8}
.layer-row .ln{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.layer-row .lt{width:22px;text-align:center;cursor:pointer;opacity:.7}
.layer-row .lt:hover{opacity:1}
.side-panel .btn.ghost.on{background:#eef1ff;color:var(--brand)!important;border-color:var(--brand)}
.export-menu{position:relative;display:inline-block}
.export-list{display:none;position:absolute;right:0;top:100%;background:#fff;border:1px solid var(--line);border-radius:8px;padding:6px;z-index:100;min-width:90px;box-shadow:0 6px 18px rgba(0,0,0,.1)}
.export-menu:hover .export-list{display:block}
.export-list a{display:block;padding:6px 10px;color:#444;border-radius:6px}
.export-list a:hover{background:#f2f5ff}
.cv-palette{flex-wrap:wrap;gap:8px;margin-bottom:14px}
.icon-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin-top:8px;max-height:220px;overflow:auto}
.icon-cell{border:1px solid var(--line);border-radius:6px;background:#fff;padding:6px;cursor:pointer;aspect-ratio:1;display:flex;align-items:center;justify-content:center}
.icon-cell:hover{border-color:var(--brand);background:#f5f7ff}
.icon-cell img{width:100%;height:100%;object-fit:contain}
.cv-palette .btn{padding:6px 12px}
.side-panel{background:#fff;border:1px solid var(--line);border-radius:10px;padding:16px;max-height:74vh;overflow:auto}
.side-panel .grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.side-panel label{display:block;margin:10px 0 4px;font-size:13px;color:#444}
.side-panel input,.side-panel select,.side-panel textarea{width:100%;padding:8px;border:1px solid var(--line);border-radius:6px;font-size:13px;font-family:inherit}
.side-panel textarea{min-height:60px}
.node-item{border:1px solid var(--line);border-radius:8px;padding:8px;margin-bottom:8px;font-size:13px}
.muted{color:var(--muted)}
.prose{background:#fff;border:1px solid var(--line);border-radius:12px;padding:28px;max-width:820px}
.prose h2{margin-top:24px}
.split{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.detail-wrap{display:grid;grid-template-columns:1fr 340px;gap:20px}
.preview-pane{background:#eef0f6;border:1px solid var(--line);border-radius:12px;padding:20px;display:flex;align-items:center;justify-content:center;min-height:420px}
.preview-img{max-width:100%;max-height:72vh;background:#fff;box-shadow:0 6px 22px rgba(0,0,0,.14);border-radius:4px}
.detail-side .card h3{margin-top:0}
.layer-legend{display:flex;flex-direction:column;gap:6px}
.legend-row{display:flex;align-items:center;gap:8px;font-size:13px}
.legend-row .li{width:18px;text-align:center;color:#8890c8}
.legend-row .ln{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:800px){.editor-wrap,.split,.detail-wrap{grid-template-columns:1fr}}
