:root{--blue:#2b6cb0;--bg:#f4f6fa;--text:#1a202c;--muted:#718096;--red:#c53030;--green:#2f855a;--line:#e2e8f0;color:var(--text);font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Apple SD Gothic Neo,Malgun Gothic,sans-serif;font-size:16px}*{box-sizing:border-box}body{background:var(--bg);margin:0}.practice-banner{z-index:10;color:#1a202c;text-align:center;letter-spacing:.02em;background:#f6ad55;padding:10px 16px;font-size:1.25rem;font-weight:800;position:-webkit-sticky;position:sticky;top:0}main{margin:0 auto;padding:16px}main.narrow{max-width:440px}main.wide{max-width:1100px}h1{margin:8px 0 12px;font-size:1.4rem}h2{margin:0 0 12px;font-size:1.15rem}h3{margin:18px 0 8px;font-size:1rem}.card{background:#fff;border-radius:14px;margin:12px 0;padding:18px;box-shadow:0 1px 4px #00000014}.row{align-items:center;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.row.between{justify-content:space-between}.grid{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:12px;display:grid}.center{text-align:center;padding:40px}label{color:var(--muted);flex-direction:column;gap:4px;font-size:.9rem;display:flex}label.inline{flex-direction:row;align-items:center}form label{margin-bottom:10px}input,select{color:var(--text);background:#fff;border:1px solid #cbd5e0;border-radius:8px;min-width:0;padding:9px 10px;font-size:1rem}button{cursor:pointer;background:#fff;border:1px solid #cbd5e0;border-radius:8px;margin:2px;padding:9px 14px;font-size:.95rem}button:disabled{opacity:.5;cursor:default}button.primary{background:var(--blue);color:#fff;border-color:var(--blue);font-weight:700}button.danger{color:var(--red);border-color:var(--red)}button.link{color:var(--blue);background:0 0;border:none;text-decoration:underline}form button.primary{width:100%;margin-top:6px;padding:12px;font-size:1.05rem}.grid~button.primary,.card>button.primary{width:auto}.tabs{gap:4px;margin:8px 0 12px;display:flex}.tabs button{flex:1}.tabs button.on{background:var(--blue);color:#fff;border-color:var(--blue)}table{border-collapse:collapse;background:#fff;border-radius:10px;width:100%;margin:10px 0;font-size:.95rem;overflow:hidden}th,td{border-bottom:1px solid var(--line);text-align:left;padding:8px 10px}th{white-space:nowrap;background:#edf2f7;font-weight:700}tr.dim td{color:var(--muted)}.error{color:var(--red)}.ok{color:var(--green);font-weight:700}.warn{color:#b7791f;font-weight:700}.hint,.muted{color:var(--muted);font-size:.9rem}.error-box{background:#fff5f5;border:1px solid #feb2b2;border-radius:10px;margin:16px;padding:16px}.placeholder{color:#2c5282;background:#ebf8ff;border-radius:10px;margin:14px 0;padding:18px}.siblings{flex-direction:column;gap:6px;margin:16px 0;display:flex}.modal{z-index:20;background:#00000059;justify-content:center;align-items:flex-start;padding:24px 12px;display:flex;position:fixed;top:0;bottom:0;left:0;right:0;overflow-y:auto}.modal .card{width:100%;max-width:720px}.week{flex-direction:column;gap:8px;margin:10px 0;display:flex}.day{border:1px solid var(--line);background:#f7fafc;border-radius:10px;padding:8px 10px}.day.today{border-color:var(--blue);box-shadow:0 0 0 2px #bee3f8}.day-head{margin-bottom:4px;font-weight:800}.cell{border:1px solid var(--line);background:#fff;border-radius:8px;margin:4px 0;padding:6px 8px}.badge{color:#4a5568;background:#edf2f7;border-radius:99px;padding:2px 8px;font-size:.8rem;display:inline-block}.small{font-size:.8rem}.chip{color:var(--text);background:#fff;border:1px solid #cbd5e0;border-radius:99px;padding:4px 10px}.badge.star{color:#744210;background:#fefcbf}.badge.good{color:#22543d;background:#c6f6d5}.badge.retry{color:#822727;background:#fed7d7}.badge.wait{color:#44337a;background:#e9d8fd}.badge.late{color:#7b341e;background:#feebc8}.retry-reason{color:#822727;margin-top:4px}.cell.extra{background:#f0fff4}.wide-btn{width:100%;padding:12px;font-size:1.05rem}.tip{background:#fffaf0;border-radius:8px;padding:10px}.pick{text-align:center;color:var(--blue);cursor:pointer;border:2px dashed #90cdf4;border-radius:12px;margin:10px 0;padding:16px;font-weight:700;display:block;position:relative}.pick input[type=file]{opacity:0;pointer-events:none;border:0;width:1px;min-width:0;height:1px;margin:0;padding:0;position:absolute;top:0;left:0;overflow:hidden}.pick:has(input:disabled){opacity:.5;cursor:default}.upload-busy{z-index:5;text-align:center;background:#fffbea;border:2px solid #f6ad55;border-radius:12px;margin:8px 0;padding:12px;position:-webkit-sticky;position:sticky;top:0}.upload-busy .big{color:#c05621;margin-bottom:4px;font-size:1.25em;font-weight:800}.busy-bar{background:#feebc8;border-radius:7px;height:14px;margin:8px 0 4px;overflow:hidden}.busy-fill{background:repeating-linear-gradient(45deg,#ed8936 0,#ed8936 12px,#f6ad55 12px,#f6ad55 24px) 0 0/34px 34px;border-radius:7px;height:100%;transition:width .4s;animation:1s linear infinite busy-move}@keyframes busy-move{0%{background-position:0 0}to{background-position:34px 0}}.msg.pilot-note{color:#44337a;background:#f3ebff;border:1px solid #b794f4}.pilot-badge{color:#6b46c1;white-space:nowrap;font-size:.85em;font-weight:700}.practice-banner .build{opacity:.8;margin-left:6px;font-weight:400}.pick.half{flex:1;min-width:140px}.diary-day{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:6px;padding:4px 0;display:flex}.upload-row{border:1px solid var(--line);border-radius:10px;margin:6px 0;padding:8px 10px}.upload-row.완료{background:#f0fff4;border-color:#9ae6b4}.upload-row.실패{background:#fff5f5;border-color:#feb2b2}progress{width:70%;height:14px}.big{font-size:1.15rem}.scroll-x{max-width:100%}.messages{flex-direction:column;gap:6px;margin:10px 0;display:flex}.progress-box{border:1px solid var(--line);background:#fff;border-radius:10px;padding:8px 10px}.progress-bar{background:#edf2f7;border-radius:99px;height:14px;margin-top:4px;overflow:hidden}.progress-bar>div{background:var(--blue);border-radius:99px;height:100%;transition:width .4s}.progress-bar>div.full{background:#38a169}.msg{overflow-wrap:anywhere;border-radius:10px;padding:10px 12px;line-height:1.45}.msg-progress,.msg-cheer{color:#2c5282;background:#ebf8ff}.msg-praise{color:#22543d;background:#f0fff4}.msg-warn{color:#7b341e;background:#fffaf0;border:1px solid #fbd38d}.msg-retry{color:#822727;background:#fff5f5}.msg-class{color:#44337a;background:#faf5ff;font-weight:700}.fail-box{color:#9b2c2c;background:#fff5f5;border:2px solid #e53e3e;border-radius:10px;margin:6px 0;padding:8px 10px;font-weight:700}.fail-box.big{padding:12px;font-size:1.05rem}.sticky-status{z-index:5;color:#2c5282;background:#ebf8ff;border:1px solid #90cdf4;border-radius:10px;margin:8px 0;padding:10px 12px;font-weight:700;position:-webkit-sticky;position:sticky;top:44px}.viewer .viewer-media{object-fit:contain;background:#000;border-radius:8px;width:100%;max-height:70vh;margin:8px 0;display:block}img.viewer-media{background:#fff}.report-row.flagged{border-left:5px solid #ed8936}.report-img{border:1px solid var(--line);border-radius:8px;width:100%;max-width:600px;height:auto;margin:10px auto;display:block}.bars{grid-template-columns:repeat(8,minmax(0,1fr));align-items:end;gap:4px;margin:12px 0;display:grid}.bar-col{flex-direction:column;align-items:center;min-width:0;display:flex}.bar-val{font-size:.75rem;font-weight:700}.bar-track{background:#edf2f7;border-radius:6px;align-items:flex-end;width:70%;height:120px;display:flex;overflow:hidden}.bar-fill{background:#90cdf4;width:100%}.bar-fill.good{background:var(--blue)}.bar-fill.full{background:#38a169}.bar-fill.open{opacity:.45}.bar-label{color:var(--muted);text-align:center;overflow-wrap:anywhere;font-size:.65rem}.stats-table td.ok,.stats-table td.warn{font-weight:700}.setting-row{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;padding:10px 0;display:flex}.setting-row>div:first-child{flex:220px;min-width:0}.setting-row>div.ok,.setting-row>div.error{flex-basis:100%}input.num{text-align:right;width:5.5em}button.primary-sm{background:var(--blue);color:#fff;border-color:var(--blue)}textarea.msg-edit{width:100%;font:inherit;resize:vertical;border:1px solid #cbd5e0;border-radius:8px;padding:8px 10px;font-size:1rem}.week-result{background:#ebf8ff;border-radius:8px;margin:6px 0;padding:8px 10px}.sheet-detail{background:#fffaf0;border-radius:6px;margin-top:4px;padding:6px 8px}.print-only{display:none}.dollar-sheet{border:1px solid var(--line);background:#fff;border-radius:10px;margin:6px 0;padding:8px 10px}.dollar-sheet .total{font-size:1.15rem;font-weight:800}@media print{.no-print,.practice-banner,.alert-banner,nav.tabs{display:none!important}.print-only{display:block}span.print-only{display:inline}body{background:#fff}main.wide{max-width:none;padding:0}table,tbody{width:100%;display:table!important}thead{display:table-header-group!important}tr{border:none;margin:0;padding:0;display:table-row!important}td,th{border:1px solid #999;padding:4px 6px;font-size:11pt;display:table-cell!important}td:before{content:none!important}.dim td{color:#000}}.alert-banner{color:#822727;background:#fff5f5;border:2px solid #fc8181;border-radius:10px;margin:8px 0;padding:12px;font-weight:700}.review-item{margin:8px 0}.tabs{flex-wrap:wrap}@media (max-width:720px){main{padding:12px}table,tbody,tr,td{width:100%;display:block}table{background:0 0}thead{display:none}tr{border:1px solid var(--line);background:#fff;border-radius:10px;margin:8px 0;padding:6px 10px}td{overflow-wrap:anywhere;border:none;flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0;padding:4px 0;display:flex}td[data-label]:not([data-label=""]):before{content:attr(data-label);color:var(--muted);min-width:5.5em;font-size:.85rem;font-weight:700}td input,td select{flex:140px;max-width:100%}td input[type=file]{flex-basis:100%}td>div,td>.row{flex:100%;min-width:0}td .row>*{min-width:0;max-width:100%}td select{width:100%}.row{flex-wrap:wrap}input,select{max-width:100%}button{white-space:normal}.tabs{grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:6px;display:grid}.tabs button{white-space:nowrap;margin:0;padding:10px 4px}.practice-banner{padding:8px 10px;font-size:1rem}.modal{padding:8px}.modal .card{padding:12px}}
