:root{--bg:#f6f3ee;--panel:#fffdf9;--ink:#1f1c18;--muted:#7a7268;--line:#e4ddd2;--accent:#1f1c18;--ok:#2f7d4f;--warn:#b7791f;--bad:#b4382f}*{box-sizing:border-box}body,html{margin:0;height:100%}body{font-family:-apple-system,PingFang TC,Noto Sans TC,Microsoft JhengHei,sans-serif;background:var(--bg);color:var(--ink)}button{font:inherit;cursor:pointer;border:none;border-radius:10px;padding:10px 14px;font-weight:600}button:disabled{opacity:.45;cursor:default}.btn-dark{background:var(--accent);color:#fff}.btn-ok{background:var(--ok);color:#fff}.btn-ghost{color:var(--ink);border:1px solid var(--line)}.btn-bad,.btn-ghost{background:transparent}.btn-bad{color:var(--bad);border:1px solid #e8c4c0}.login{min-height:100vh;display:grid;place-items:center;padding:16px}.login form{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:28px;width:100%;max-width:340px}.login h1{font-size:20px;margin:0 0 4px;font-weight:600}.login p{color:var(--muted);font-size:13px;margin:0 0 16px}input[type=password],textarea{width:100%;padding:11px 12px;border-radius:10px;border:1px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-size:15px}.err{color:var(--bad);font-size:13px;white-space:pre-wrap}.app{display:flex;height:100vh}.previewCol{flex:1 1;display:flex;flex-direction:column;min-width:0;border-right:1px solid var(--line)}.previewBar{display:flex;gap:10px;align-items:center;padding:8px 14px;font-size:13px;color:var(--muted);border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap}.previewBar .spacer{flex:1 1}.seg{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}.seg button{border-radius:0;padding:4px 10px;font-weight:500;font-size:12px;background:transparent;color:var(--muted)}.seg button.on{background:var(--ink);color:#fff}.frameWrap{flex:1 1;position:relative;display:flex;justify-content:center;background:#ebe6dd;overflow:hidden}.frameWrap iframe{border:none;background:#fff;width:100%;height:100%}.frameWrap.mobile iframe{width:390px;max-width:100%;box-shadow:0 0 0 1px var(--line)}.overlay{position:absolute;top:12px;left:50%;transform:translateX(-50%);background:var(--ink);color:#fff;font-size:13px;padding:7px 14px;border-radius:999px}.side{width:420px;display:flex;flex-direction:column;gap:12px;padding:16px;background:var(--panel);overflow-y:auto}.side h2{margin:0;font-size:17px;font-weight:600}.side h2 small{display:block;font-size:12px;color:var(--muted);font-weight:400;margin-top:2px}.log{flex:1 1;display:flex;flex-direction:column;gap:8px;min-height:100px;overflow-y:auto}.hint{color:var(--muted);line-height:1.7}.hint,.msg{font-size:13px}.msg{border:1px solid var(--line);border-radius:10px;padding:10px;line-height:1.5}.msg .you{color:var(--muted)}.msg .ai{margin-top:4px}.msg .thumbs{display:flex;gap:4px;margin-top:6px;flex-wrap:wrap}.msg .thumbs img{width:40px;height:40px;object-fit:cover;border-radius:4px}.history{font-size:12px;color:var(--muted)}.history .row{display:flex;justify-content:space-between;gap:8px;padding:3px 0;align-items:center}.history .row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.history button{padding:2px 8px;font-size:11px;font-weight:500}.composer{border:1px solid var(--line);border-radius:12px;background:#fff;padding:8px}.composer.drag{border-color:var(--ink);background:#faf7f1}.composer textarea{border:none;padding:6px;resize:vertical;min-height:84px}.composer textarea:focus{outline:none}.attach{display:flex;gap:6px;flex-wrap:wrap;padding:4px 6px}.attach .a{position:relative}.attach img{width:64px;height:64px;object-fit:cover;border-radius:8px;display:block}.attach .x{position:absolute;top:-6px;right:-6px;width:20px;height:20px;padding:0;border-radius:50%;background:var(--ink);color:#fff;font-size:12px;line-height:20px}.composerBar{display:flex;gap:8px;align-items:center;padding:4px}.composerBar .spacer{flex:1 1}.composerBar label{font-size:13px;color:var(--muted);cursor:pointer;padding:6px 8px;border-radius:8px;border:1px dashed var(--line)}.publish{border-top:1px solid var(--line);padding-top:12px;display:flex;flex-direction:column;gap:8px;font-size:13px}.publish a{color:var(--ink);word-break:break-all}.status-ok{color:var(--ok)}.status-warn{color:var(--warn)}@media (max-width:860px){.app{flex-direction:column;height:auto;min-height:100vh}.previewCol{border-right:none;border-bottom:1px solid var(--line);height:62vh;flex:none}.side{width:100%}}