:root{--bg:#f4f4f6;--panel:#f8f8f9;--card:#fff;--line:#e3e1ee;--txt:#2b2b33;--sub:#7a7a86;--accent:#1f6fb2;--accent-h:#185a91;--soft:#eef5fb}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--txt);font-family:Segoe UI,Malgun Gothic,sans-serif}.wrap{height:100vh;min-height:640px;display:flex}.gallery{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;width:300px;min-width:260px;display:flex}.gallery h2{letter-spacing:.08em;color:var(--sub);padding:18px 16px 8px;font-size:12px;font-weight:600}.cats{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:5px;padding:0 14px 12px;display:flex}.cat{border:1px solid var(--line);cursor:pointer;color:var(--txt);white-space:nowrap;background:#fff;border-radius:14px;padding:5px 9px;font-size:12px}.cat.sel{background:var(--accent);border-color:var(--accent);color:#fff}.cat small{opacity:.65;margin-left:3px}.tpls{flex:1;grid-template-columns:1fr 1fr;grid-auto-rows:max-content;align-content:start;gap:8px;padding:12px 14px 20px;display:grid;overflow-y:auto}.tpl{border:2px solid var(--line);cursor:pointer;text-align:left;font:inherit;color:inherit;background:#fff;border-radius:8px;flex-direction:column;display:flex;overflow:hidden}.tpl.sel{border-color:var(--accent);background:var(--soft)}.tpl .th{background-color:#fff;background-image:linear-gradient(45deg,#f3f3f6 25%,#0000 25%),linear-gradient(-45deg,#f3f3f6 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#f3f3f6 75%),linear-gradient(-45deg,#0000 75%,#f3f3f6 75%);background-position:0 0,0 5px,5px -5px,-5px 0;background-size:10px 10px;justify-content:center;align-items:center;height:64px;padding:5px;display:flex}.tpl .th svg{max-width:100%;max-height:100%}.tpl .th .ph{color:#b9b9c4;font-size:11px}.tpl .nm{border-top:1px solid var(--line);padding:4px 7px 6px;font-size:11.5px}.stage{flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;min-width:0;padding:18px 24px;display:flex}.toolbar{align-items:center;gap:6px;width:100%;max-width:960px;display:flex}.toolbar .sp{flex:1}.tbtn{border:1px solid var(--line);cursor:pointer;color:var(--txt);background:#fff;border-radius:6px;padding:6px 11px;font-size:13px}.tbtn:hover{border-color:var(--accent);color:var(--accent)}#zoomV{color:var(--sub);text-align:center;font-variant-numeric:tabular-nums;width:44px;font-size:12px}.canvas-card{border:1px solid var(--line);background-color:#fff;background-image:linear-gradient(45deg,#f0f0f3 25%,#0000 25%),linear-gradient(-45deg,#f0f0f3 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#f0f0f3 75%),linear-gradient(-45deg,#0000 75%,#f0f0f3 75%);background-position:0 0,0 10px,10px -10px,-10px 0;background-size:20px 20px;border-radius:10px;width:100%;max-width:960px;height:min(68vh,620px);position:relative;overflow:hidden}#preview{padding:4%;display:flex;position:absolute;inset:0;overflow:auto}#preview svg{flex:none;max-width:100%;max-height:100%;margin:auto}#preview.zoomed svg{max-width:none;max-height:none}#loading{color:var(--sub);z-index:5;text-align:center;background:#ffffffe0;flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:20px;font-size:14px;display:flex;position:absolute;inset:0}.spin{border:4px solid #ddd;border-top-color:var(--accent);border-radius:50%;width:30px;height:30px;animation:1s linear infinite sp}@keyframes sp{to{transform:rotate(360deg)}}.stage .cap{color:var(--sub);font-size:13px}.panel{background:var(--panel);border-left:1px solid var(--line);flex-direction:column;gap:15px;width:320px;min-width:290px;padding:20px 22px 28px;display:flex;overflow-y:auto}label.hd{letter-spacing:.08em;color:var(--sub);margin-bottom:7px;font-size:12px;font-weight:600;display:block}input[type=text]{border:1px solid var(--line);background:#fff;border-radius:8px;outline:none;width:100%;padding:12px 13px;font-size:16px}input[type=text]:focus{border-color:var(--accent)}select{border:1px solid var(--line);background:#fff;border-radius:8px;outline:none;width:100%;padding:9px 10px;font-size:13.5px}.row{gap:10px;display:flex}.row>div{flex:1;min-width:0}.slider-row{align-items:center;gap:10px;margin-bottom:6px;font-size:13px;display:flex}.slider-row>span:first-child{width:66px}.slider-row span.v{text-align:right;width:34px;color:var(--sub);font-variant-numeric:tabular-nums}input[type=range]{accent-color:var(--accent);flex:1;min-width:0}.colors{flex-wrap:wrap;gap:10px 14px;display:flex}.colors label{cursor:pointer;align-items:center;gap:6px;font-size:13px;display:flex}.colors input[type=color]{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:5px;width:32px;height:26px;padding:1px}.linkbtn{color:var(--accent);cursor:pointer;background:0 0;border:none;margin-top:8px;padding:0;font-size:12px}.chk{cursor:pointer;user-select:none;align-items:center;gap:8px;font-size:13.5px;display:flex}hr{border:none;border-top:1px solid var(--line)}.btn{letter-spacing:.05em;color:#fff;background:var(--accent);cursor:pointer;border:none;border-radius:6px;width:100%;padding:13px;font-size:15px;font-weight:700;display:block}.btn:hover{background:var(--accent-h)}.btn:disabled{cursor:default;background:#9db6c9}.btn2{width:100%;color:var(--accent);border:1px solid var(--accent);cursor:pointer;background:#fff;border-radius:6px;padding:10px;font-size:13.5px;font-weight:600;display:block}.btn2:hover{background:var(--soft)}.btn2:disabled{color:#9db6c9;cursor:default;background:#fff;border-color:#c9d8e4}.hint{color:var(--sub);font-size:12px;line-height:1.6}#err{color:#c0392b;font-size:12px;line-height:1.5;display:none}#toast{color:#fff;opacity:0;pointer-events:none;z-index:20;background:#2b2b33;border-radius:18px;padding:9px 16px;font-size:13px;transition:opacity .2s;position:fixed;bottom:28px;left:50%;transform:translate(-50%)}#toast.on{opacity:.95}@media (width<=980px){.wrap{flex-direction:column;height:auto}.gallery,.panel{border:none;width:auto;min-width:0}.tpls{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));max-height:320px}.canvas-card{height:48vh}}@media (width<=768px){.gallery h2{padding-bottom:8px}.cats{scrollbar-width:none;flex-wrap:nowrap;padding-bottom:10px;overflow-x:auto}.tpls{grid-template-columns:none;grid-auto-columns:124px;grid-auto-flow:column;max-height:none;padding:10px 14px 12px;overflow:auto hidden}.stage{gap:8px;padding:10px 12px}.canvas-card{height:40vh;min-height:220px}.panel{padding:16px 16px 28px}}
