:root{--bg:#fbf8f3;--card:#fff;--text:#2b2622;--muted:#7a7068;--line:#e8e1d7;--accent:#b5562f;--accent-dark:#93431f;--accent-soft:#f6e7df;--ok:#2f7d4f;--danger:#b3261e;--danger-soft:#fdecea;--radius:14px}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);-webkit-text-size-adjust:100%;word-break:keep-all;overflow-wrap:anywhere;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Apple SD Gothic Neo,Malgun Gothic,Noto Sans KR,sans-serif;font-size:16px;line-height:1.55}a{color:var(--accent)}img{max-width:100%;display:block}.container{max-width:960px;margin:0 auto;padding:16px}.topbar{z-index:20;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-bottom:1px solid var(--line);background:#fbf8f3f5;position:sticky;top:0}.topbar-inner{max-width:960px;margin:0 auto;padding:10px 16px 8px}.topbar-title{justify-content:space-between;align-items:center;gap:8px;display:flex}.topbar-title h1{margin:0;font-size:18px}.nav{scrollbar-width:none;gap:6px;margin-top:8px;padding-bottom:2px;display:flex;overflow-x:auto}.nav a{border:1px solid var(--line);background:var(--card);color:var(--text);border-radius:999px;flex:none;padding:6px 12px;font-size:14px;text-decoration:none}.nav a.active{background:var(--accent);border-color:var(--accent);color:#fff}.status{color:var(--muted);margin-top:8px;font-size:13px}.status strong{color:var(--text)}.status .warn{color:var(--danger);font-weight:700}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px;padding:16px}.card h2{margin:0 0 10px;font-size:17px}.step{background:var(--accent);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;margin-right:8px;font-size:13px;display:inline-flex}label{margin-bottom:6px;font-weight:600;display:block}input[type=text],input[type=password]{border:1px solid var(--line);background:#fff;border-radius:10px;width:100%;padding:12px;font-size:16px}.hint{color:var(--muted);margin:6px 0 0;font-size:13px}.btn{border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;border-radius:10px;justify-content:center;align-items:center;gap:6px;min-height:44px;padding:10px 18px;font-size:16px;font-weight:600;text-decoration:none;display:inline-flex}.btn:hover{background:var(--accent-dark)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.secondary{color:var(--accent);background:#fff}.btn.danger{color:var(--danger);border-color:var(--danger);background:#fff}.btn.small{min-height:36px;padding:6px 12px;font-size:14px}.btn.block{width:100%}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.error{background:var(--danger-soft);color:var(--danger);white-space:pre-wrap;border-radius:10px;margin-top:12px;padding:12px}.notice{background:var(--accent-soft);border-radius:10px;margin-top:12px;padding:12px}.file-pick{border:2px dashed var(--line);border-radius:var(--radius);cursor:pointer;text-align:center;min-height:120px;color:var(--muted);background:#fffdfa;justify-content:center;align-items:center;padding:12px;display:flex}.file-pick input{display:none}.preview{border-radius:10px;width:auto;max-height:320px;margin:0 auto}.chips{grid-template-columns:repeat(2,1fr);gap:8px;display:grid}@media (min-width:640px){.chips{grid-template-columns:repeat(4,1fr)}}.chip{border:1px solid var(--line);cursor:pointer;color:var(--text);background:#fff;border-radius:10px;padding:12px 8px;font-size:15px}.chip.selected{border-color:var(--accent);background:var(--accent-soft);font-weight:700}.style-grid{grid-template-columns:repeat(2,1fr);gap:10px;display:grid}@media (min-width:640px){.style-grid{grid-template-columns:repeat(4,1fr)}}.style-option{border:2px solid var(--line);cursor:pointer;text-align:left;color:var(--text);background:#fff;border-radius:12px;padding:0;font-size:14px;overflow:hidden}.style-option.selected{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.style-option img{aspect-ratio:1;object-fit:cover;background:#f1ece5;width:100%}.style-option .name{padding:8px 10px;font-weight:600}.style-option.no-sample .name{padding:16px 10px}.gallery{grid-template-columns:repeat(2,1fr);gap:12px;display:grid}@media (min-width:640px){.gallery{grid-template-columns:repeat(3,1fr)}}@media (min-width:900px){.gallery.wide{grid-template-columns:repeat(4,1fr)}}.tile{border:1px solid var(--line);background:#fff;border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.tile .thumb{aspect-ratio:1;object-fit:cover;cursor:zoom-in;background:#f1ece5;border:0;width:100%;padding:0}.tile .thumb img{object-fit:cover;width:100%;height:100%}.tile .meta{flex-direction:column;flex:1;gap:6px;padding:8px 10px 10px;font-size:13px;display:flex}.tile .meta .title{font-size:14px;font-weight:700}.tile .meta .time{color:var(--muted)}.tile .empty{aspect-ratio:1;color:var(--muted);text-align:center;background:#f6f2ec;justify-content:center;align-items:center;padding:8px;font-size:13px;display:flex}.result-img{cursor:zoom-in;border-radius:10px;width:100%}.spinner{border:3px solid #fff6;border-top-color:#fff;border-radius:50%;width:18px;height:18px;animation:.8s linear infinite spin}.spinner.dark{border-color:var(--line);border-top-color:var(--accent)}@keyframes spin{to{transform:rotate(360deg)}}.progress{background:var(--line);border-radius:999px;height:10px;margin:8px 0;overflow:hidden}.progress>div{background:var(--accent);height:100%;transition:width .3s}.badge{color:var(--muted);background:#eee;border-radius:999px;padding:2px 8px;font-size:12px;display:inline-block}.badge.ok{color:var(--ok);background:#e3f3e9}.badge.fail{background:var(--danger-soft);color:var(--danger)}.badge.run{background:var(--accent-soft);color:var(--accent)}.viewer{z-index:50;background:#000000e0;flex-direction:column;justify-content:center;align-items:center;padding:12px;display:flex;position:fixed;inset:0}.viewer img{object-fit:contain;border-radius:6px;max-width:100%;max-height:calc(100vh - 110px)}.viewer .caption{color:#fff;text-align:center;margin-top:10px;font-size:15px}.viewer .close{position:absolute;top:10px;right:10px}.section-title{margin:24px 0 10px;font-size:17px}.family-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px;margin-bottom:10px;display:flex}.family-head h2{margin:0}.login-wrap{max-width:380px;margin:12vh auto 0;padding:16px}
