.app{display:flex;height:100vh;background:#fff3f6;color:#333;font-family:'Microsoft YaHei',Arial,sans-serif}
.sidebar{width:420px;overflow:auto;border-right:1px solid #e8d7dc;padding:16px;background:#fff7fa}
.brand{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.brand .logo{width:28px;height:28px;border-radius:8px;background:#ff6ea8;color:#fff;display:flex;align-items:center;justify-content:center}
.brand .name{font-weight:700;color:#444}
.preview{flex:1;display:flex;align-items:center;justify-content:center;position:relative}
#previewCanvas{max-width:90%;max-height:90%;background:#f2f2f2;box-shadow:0 2px 12px rgba(0,0,0,0.06)}
.overlay{position:absolute;pointer-events:none}
.preview-header{position:absolute;top:8px;left:16px;color:#666;font-weight:600}
.preview-footer{position:absolute;bottom:12px;left:16px;right:16px;display:flex;gap:8px;align-items:center}
.section{margin-bottom:16px}
.section-title{font-size:14px;font-weight:700;margin-bottom:8px;color:#444}
.upload{border:1px dashed #e4c7cf;border-radius:8px;padding:12px;display:flex;gap:8px;align-items:center;background:#fff}
.upload .hint{font-size:12px;color:#a88d96}
.actions-row{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}
button{background:#ff6ea8;border:none;color:#fff;padding:8px 12px;border-radius:6px;cursor:pointer}
button:disabled{opacity:.5;cursor:not-allowed}
textarea{width:100%;border:1px solid #e8d7dc;border-radius:6px;background:#fff;color:#333;padding:8px}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
label{display:flex;flex-direction:column;font-size:12px;gap:4px}
input,select{border:1px solid #e8d7dc;border-radius:6px;background:#fff;color:#333;padding:6px}
.inline-row{display:flex;gap:8px;align-items:center;margin:8px 0}
