:root{--bg:#f7f7f5;--surface:#ffffff;--border:#e3e3e0;--text:#1c1c1e;--text-muted:#8a8a8e;--accent:#4a6fa5;--accent-deep:#3d5d8c;--bubble-sam:#4a6fa5;--bubble-sun:#a54a4a;--toggle-accent:#4aa569;--bubble-text:#ffffff;--translation-border:rgba(255,255,255,0.28);--translated-bg:#e7e7e4;--star:#f5b800;--check:#2e9e5b;--x:#d64545;--radius:18px}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Apple SD Gothic Neo,Noto Sans KR,Malgun Gothic,sans-serif;font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}button{font-family:inherit;cursor:pointer}.app{display:flex;flex-direction:column;height:100dvh}.header{flex:none;display:flex;align-items:center;gap:12px;padding:calc(10px + env(safe-area-inset-top)) 16px 10px;background:var(--surface);border-bottom:1px solid var(--border)}.header-title{font-weight:650;font-size:17px;letter-spacing:.01em}.title-sun{color:var(--bubble-sun)}.title-sam{color:var(--bubble-sam)}.conn-dot{width:8px;height:8px;border-radius:50%;flex:none}.conn-ok{background:#b9ceb9}.conn-bad{background:var(--x);animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{50%{opacity:.35}}.toggle{margin-left:auto;display:flex;align-items:center;gap:10px}.toggle-label{border:none;background:transparent;padding:4px 2px;font-size:14px;color:var(--text-muted);transition:color .15s ease}.toggle-label-active{color:var(--toggle-accent);font-weight:650}.toggle-track{position:relative;display:flex;align-items:center;gap:22px;padding:10px 4px}.toggle-track:before{content:"";position:absolute;left:8px;right:8px;top:50%;height:2px;transform:translateY(-50%);background:var(--border);border-radius:1px}.toggle-dot{position:relative;width:10px;height:10px;padding:0;border:none;border-radius:50%;background:#c9c9cd;transition:background .15s ease,box-shadow .15s ease}.toggle-dot:after{content:"";position:absolute;inset:-10px}.toggle-dot-active{background:var(--toggle-accent);box-shadow:0 0 0 3px var(--surface),0 0 0 5px var(--toggle-accent)}.messages-wrap{position:relative;flex:1 1;min-height:0;display:flex;flex-direction:column}.messages{flex:1 1;overflow-y:auto;overscroll-behavior:contain}.jump-bottom{position:absolute;right:16px;bottom:16px;width:38px;height:38px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:50%;background:var(--surface);color:var(--text-muted);box-shadow:0 2px 8px rgba(0,0,0,.12);cursor:pointer;transition:color .12s ease,border-color .12s ease}.jump-bottom:hover{color:var(--accent);border-color:var(--accent)}.messages-inner{max-width:804px;margin:0 auto;padding:16px 12px 8px;display:flex;flex-direction:column;gap:1.5px}.row-first:not(:first-child),.row-solo:not(:first-child){margin-top:6px}.row{position:relative;display:flex;align-items:center;justify-content:flex-end;gap:6px;width:100%}.row-theirs{flex-direction:row-reverse}.bubble{position:relative;border-radius:var(--radius);padding:8px 12px;word-break:break-word;white-space:pre-wrap;max-width:80%}.row-mine.row-first .bubble,.row-mine.row-middle .bubble{border-bottom-right-radius:6px}.row-mine.row-last .bubble,.row-mine.row-middle .bubble{border-top-right-radius:6px}.row-theirs.row-first .bubble,.row-theirs.row-middle .bubble{border-bottom-left-radius:6px}.row-theirs.row-last .bubble,.row-theirs.row-middle .bubble{border-top-left-radius:6px}.bubble-sam{background:var(--bubble-sam)}.bubble-sam,.bubble-sun{color:var(--bubble-text)}.bubble-sun{background:var(--bubble-sun)}.bubble-body{font-size:12px}.msg-link{color:inherit;text-decoration:underline;text-underline-offset:2px}.bubble-stamp{float:right;font-size:10px;line-height:1;opacity:.55;margin:9px -2px 0 8px;white-space:nowrap}.translation-stamp{margin-left:auto}.translation-stamp .bubble-stamp{float:none;margin:0}.bubble-more{flex:none;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--text-muted);border-radius:50%;opacity:.55}.bubble-more:hover{opacity:1;background:rgba(0,0,0,.06)}.bubble-translated{background:var(--translated-bg)}.bubble-translated.bubble-sam{color:var(--bubble-sam)}.bubble-translated.bubble-sun{color:var(--bubble-sun)}.bubble-translated .mark-star{color:var(--star)}.bubble-translated .mark-check{color:var(--check)}.bubble-translated .mark-x{color:var(--x)}.translation{margin-top:7px;padding-top:7px;border-top:1px solid var(--translation-border);font-size:14px}.translation-text{opacity:.92}.translation-meta{gap:6px;margin-top:4px;opacity:.65}.bubble-provider,.translation-meta{display:flex;align-items:center;font-size:11px}.bubble-provider{flex:none;gap:4px;text-transform:lowercase;letter-spacing:.03em;color:var(--toggle-accent)}.row-theirs .bubble-provider{flex-direction:row-reverse}.translation-mark{font-size:12px}.mark-star{color:var(--star)}.mark-check{color:var(--check)}.mark-x{color:var(--x)}.bubble .mark-star{color:#ffd84d}.bubble .mark-check{color:#9fdcb5}.bubble .mark-x{color:#f7c1c1}.translation-pending{display:flex;flex-direction:column;gap:6px;padding:2px 0}.shimmer{display:block;height:10px;border-radius:5px;background:linear-gradient(90deg,rgba(255,255,255,.2) 25%,rgba(255,255,255,.42) 50%,rgba(255,255,255,.2) 75%);background-size:200% 100%;animation:shimmer 1.4s ease-in-out infinite}.shimmer-1{width:82%}.shimmer-2{width:55%}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.composer-bar{flex:none;background:var(--surface);border-top:1px solid var(--border);padding:8px 12px calc(8px + env(safe-area-inset-bottom))}.composer{position:relative;max-width:720px;margin:0 auto;display:flex;align-items:flex-end;gap:8px}.composer-input{flex:1 1;resize:none;border:1px solid var(--border);border-radius:20px;padding:9px 14px;font-family:inherit;font-size:16px;line-height:1.45;background:var(--bg);color:var(--text);outline:none;max-height:140px}.composer-input:focus{border-color:var(--accent)}.composer-send{flex:none;width:38px;height:38px;border:none;border-radius:50%;background:var(--accent);color:#fff;font-size:19px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s ease,opacity .15s ease}.composer-send:hover:not(:disabled){background:var(--accent-deep)}.composer-send:disabled{opacity:.4;cursor:default}.composer-error{position:absolute;top:-34px;left:0;right:0;text-align:center;font-size:13px;color:var(--x)}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.42);display:flex;align-items:flex-end;justify-content:center;z-index:50}.modal{background:var(--surface);width:100%;max-height:82dvh;border-radius:16px 16px 0 0;display:flex;flex-direction:column;overflow:hidden;padding-bottom:env(safe-area-inset-bottom)}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px 8px}.modal-title{font-weight:650;font-size:16px}.modal-close{border:none;background:transparent;font-size:24px;line-height:1;color:var(--text-muted);padding:2px 6px}.modal-original{flex:none;margin:0 18px 10px;padding:10px 12px;background:var(--bg);border-radius:10px;font-size:15px;color:var(--text);white-space:pre-wrap;word-break:break-word;max-height:30dvh;overflow-y:auto}.original-sam{background:var(--bubble-sam);color:var(--bubble-text)}.original-sun{background:var(--bubble-sun);color:var(--bubble-text)}.modal-content{min-height:0;overflow-y:auto;padding:0 18px 18px}.modal-group{margin-top:8px}.modal-group-title{font-size:13px;font-weight:650;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin:10px 0 6px;display:flex;align-items:center;gap:8px}.modal-readonly{font-weight:400;text-transform:none;letter-spacing:0;font-size:12px;color:var(--text-muted);border:1px solid var(--border);border-radius:999px;padding:1px 8px}.compare-row{background:var(--translated-bg);border-radius:12px;padding:10px 12px;margin-bottom:8px}.compare-sam .compare-text{color:var(--bubble-sam)}.compare-sun .compare-text{color:var(--bubble-sun)}.compare-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.compare-provider{font-size:12px;font-weight:600;color:var(--text-muted);letter-spacing:.03em}.compare-controls{display:flex;gap:4px}.mark-btn{border:1px solid transparent;background:transparent;border-radius:8px;font-size:16px;width:32px;height:30px;display:flex;align-items:center;justify-content:center;opacity:.35;transition:opacity .12s ease,background .12s ease}.mark-btn:hover{opacity:.8}.mark-btn-active{opacity:1;background:var(--bg);border-color:var(--border)}.compare-mark,.compare-text{font-size:15px}.compare-text{white-space:pre-wrap;word-break:break-word}.compare-text-pending{color:var(--text-muted);font-style:normal}.compare-row-pending{background:transparent;border:1px dashed var(--border)}.compare-get{border:1px solid var(--border);background:var(--bg);border-radius:999px;padding:5px 14px;font-size:13px;color:var(--accent);font-weight:600;transition:background .12s ease,border-color .12s ease}.compare-get:hover{border-color:var(--accent)}.compare-failed{margin-left:10px;font-size:13px;color:var(--x)}.human-missing{min-height:20px;border-bottom:1px dashed var(--border)}.human-entry{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.human-input{width:100%;resize:vertical;border:1px solid var(--border);border-radius:10px;padding:8px 10px;font:inherit;font-size:14px;background:var(--bg);color:var(--text)}.human-input:focus{outline:none;border-color:var(--accent)}.compare-get:disabled{opacity:.45;pointer-events:none}.compare-empty{color:var(--text-muted);font-size:14px;padding:6px 2px}.login{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:36px 28px;width:100%;max-width:360px;text-align:center}.login-title{margin:0;font-size:28px;font-weight:700;letter-spacing:.01em}.login-subtitle{margin:6px 0 26px;color:var(--text-muted);font-size:14px}.login-buttons{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.login-buttons .login-error,.login-buttons .login-hint{flex-basis:100%}.login-btn{flex:1 1;border:none;border-radius:14px;padding:15px;font-size:17px;font-weight:650;color:#fff;background:var(--accent);transition:background .15s ease,opacity .15s ease}.login-btn:hover{background:var(--accent-deep)}.login-btn:disabled{opacity:.5}.login-btn-sun{background:var(--bubble-sun)}.login-btn-sun:hover{background:#8c3d3d}.login-hint{color:var(--text-muted);font-size:14px;margin:4px 0 0}.login-error{color:var(--x);font-size:14px;margin:0 0 14px}.login-sent p{font-size:15px;margin:0 0 16px}.login-again{border:1px solid var(--border);background:transparent;border-radius:999px;padding:7px 16px;font-size:14px;color:var(--text-muted)}@media (min-width:640px){.modal-overlay{align-items:center;padding:24px}.modal{max-width:560px;border-radius:16px}.messages-inner{padding:20px 12px 12px}}