* { box-sizing: border-box; }
body {
    margin: 0;
    font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
    background: #0f1419;
    color: #e7ecf3;
}
.wrap { max-width: 720px; margin: 0 auto; padding: 24px 16px 48px; }
header h1 { margin: 0 0 4px; font-size: 1.5rem; }
.sub { margin: 0 0 20px; color: #8b98a8; font-size: 0.9rem; }
.panel {
    background: #1a2332;
    border: 1px solid #2a3544;
    border-radius: 10px;
    padding: 16px 18px;
    margin-bottom: 16px;
}
.panel h2 { margin: 0 0 12px; font-size: 1rem; color: #9fb4cc; }
.field { margin-bottom: 12px; }
.field label { display: block; margin-bottom: 4px; font-size: 0.85rem; color: #8b98a8; }
.field textarea.bulk-text {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid #2a3544;
    border-radius: 6px;
    background: #0f1419;
    color: #e7ecf3;
    font-size: 0.95rem;
    line-height: 1.45;
    resize: vertical;
    min-height: 100px;
    font-family: inherit;
}
.parse-hint { margin: 8px 0 0; font-size: 0.85rem; min-height: 1.2em; }
.parse-hint.ok { color: #5dd39e; }
.parse-hint.warn { color: #f0c674; }
.parse-hint.err { color: #f07178; }
.field input {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid #2a3544;
    border-radius: 6px;
    background: #0f1419;
    color: #e7ecf3;
    font-size: 1rem;
}
.actions { display: flex; gap: 10px; margin-top: 8px; }
button {
    padding: 10px 16px;
    border-radius: 6px;
    border: 1px solid #2a3544;
    background: #243044;
    color: #e7ecf3;
    cursor: pointer;
    font-size: 0.95rem;
}
button.primary { background: #2d6cdf; border-color: #3d7cf0; }
button:hover { filter: brightness(1.08); }
.result { margin: 12px 0 0; font-size: 0.9rem; min-height: 1.2em; }
.result.ok { color: #5dd39e; }
.result.err { color: #f07178; }
.alert { padding: 12px 14px; border-radius: 8px; margin-bottom: 16px; font-size: 0.9rem; }
.alert.warn { background: #3d2f1a; border: 1px solid #6b5420; color: #f0c674; }
.alert code { background: rgba(0,0,0,.25); padding: 2px 6px; border-radius: 4px; }
.ticket-preview { margin-top: 16px; text-align: center; }
.ticket-preview .preview-label { color: #8b98a8; font-size: 0.85rem; margin: 0 0 8px; }
.ticket-preview img {
    max-width: 100%;
    width: 360px;
    border-radius: 12px;
    box-shadow: 0 4px 20px rgba(0,0,0,.25);
}
#log-box {
    margin: 0;
    max-height: 280px;
    overflow: auto;
    font-size: 0.8rem;
    line-height: 1.45;
    color: #a8b8c8;
    white-space: pre-wrap;
    word-break: break-all;
}
