.twa-portal{--twa-green:#128c7e;--twa-green-d:#075e54;--twa-bg:#f7f8fa;--twa-line:#dfe3e8;--twa-text:#1f2933;--twa-muted:#6b7785;max-width:1100px;margin:0 auto;color:var(--twa-text);font-size:15px;line-height:1.5}
.twa-portal *{box-sizing:border-box}
.twa-portal input[type=text],.twa-portal input[type=password],.twa-portal input[type=url],.twa-portal select,.twa-portal textarea{width:100%;padding:10px 12px;border:1px solid var(--twa-line);border-radius:8px;font:inherit;background:#fff;margin-top:4px}
.twa-portal textarea{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:14px}
.twa-portal label{display:block;margin-bottom:12px;font-weight:600}
.twa-portal button{cursor:pointer;font:inherit}
.twa-login{max-width:400px;margin:30px auto;padding:28px;background:#fff;border:1px solid var(--twa-line);border-radius:12px}
.twa-login h2,.twa-login h3{margin-top:0}
.twa-login button,.twa-primary{width:100%;padding:12px;border:0;border-radius:8px;background:var(--twa-green);color:#fff;font-weight:600}
.twa-login button:hover,.twa-primary:hover{background:var(--twa-green-d)}
.twa-primary:disabled{background:#9fb8b4;cursor:not-allowed}
.twa-muted{color:var(--twa-muted);font-size:13px;font-weight:400}
.twa-link{background:none;border:0;color:var(--twa-green-d);text-decoration:underline;padding:0}
.twa-alert{padding:10px 14px;border-radius:8px;background:#fff8e1;border:1px solid #f3d27a;margin:10px 0}
.twa-alert.error{background:#fdecea;border-color:#f5b5ae}
.twa-alert.ok{background:#e7f6ef;border-color:#9fd8bd}
.twa-topbar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;background:var(--twa-bg);border:1px solid var(--twa-line);border-radius:10px;flex-wrap:wrap}
.twa-tabs{display:flex;gap:4px;margin:16px 0;border-bottom:1px solid var(--twa-line);overflow-x:auto}
.twa-tabs button{background:none;border:0;padding:10px 16px;border-bottom:3px solid transparent;color:var(--twa-muted);font-weight:600;white-space:nowrap}
.twa-tabs button.active{color:var(--twa-green-d);border-color:var(--twa-green)}
.twa-cols{display:grid;grid-template-columns:1.2fr 1fr;gap:24px}
@media(max-width:780px){.twa-cols{grid-template-columns:1fr}}
.twa-field{margin-bottom:18px}
.twa-field>span{display:block;font-weight:600;margin-bottom:4px}
#twa-vars label{font-weight:500}
.twa-row{display:flex;justify-content:space-between;align-items:center;margin-top:8px;gap:10px;flex-wrap:wrap}
.twa-upload{display:inline-block!important;margin:0!important;padding:8px 14px;border:1px dashed var(--twa-green);border-radius:8px;color:var(--twa-green-d);cursor:pointer}
.twa-upload input{display:none}
.twa-preview{background:#e5ddd5;border-radius:12px;overflow:hidden;border:1px solid var(--twa-line)}
.twa-preview-head{background:var(--twa-green-d);color:#fff;padding:10px 14px;font-weight:600}
.twa-bubble{background:#dcf8c6;margin:16px;padding:10px 12px;border-radius:0 8px 8px 8px;min-height:60px;white-space:normal;word-wrap:break-word;box-shadow:0 1px 1px rgba(0,0,0,.1)}
.twa-bubble mark{background:#fff3b0;padding:0 2px;border-radius:3px}
.twa-bubble mark.empty{background:#ffd6d6}
#twa-progress{margin-top:16px}
.twa-bar{height:10px;background:var(--twa-line);border-radius:6px;overflow:hidden}
#twa-bar-fill{display:block;height:100%;width:0;background:var(--twa-green);transition:width .3s}
.twa-table{width:100%;border-collapse:collapse;font-size:14px;margin-top:8px}
.twa-table th,.twa-table td{text-align:left;padding:8px;border-bottom:1px solid var(--twa-line)}
.twa-table th{background:var(--twa-bg)}
#twa-history{overflow-x:auto}
