:root{--bg: #F2E2C6;--card: #FFFAF1;--ink: #211815;--primary: #3B2B20;--on-primary: #FBF3E2;--text2: #4A3A2D;--muted: #6A5745;--line: #E3CFAE;--track: #E6D0A8;--field: #A58C68;--warn: #9A4A12;--warn-bg: #FDF1E7;--info: #2C4E6E;--info-bg: #E6E9E4;--ok: #3E4A1F;--ok-bg: #E5E7CF;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--ink)}body{font-family:IBM Plex Sans KR,system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.5;-webkit-text-size-adjust:100%}button,input,select,textarea{font:inherit;color:inherit}.app{max-width:480px;margin:0 auto;min-height:100dvh;display:flex;flex-direction:column}.page{flex:1;padding:20px 20px 96px;display:flex;flex-direction:column;gap:14px}.top{display:flex;align-items:center;justify-content:space-between;gap:12px}.brand{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:14px}h1{margin:0;font-size:24px;font-weight:700;letter-spacing:-.3px}h2{margin:0;font-size:17px;font-weight:700}p{margin:0}.muted{color:var(--muted);font-size:14px}.small{font-size:13px}.card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:16px 18px;display:flex;flex-direction:column;gap:10px}.row{display:flex;align-items:center;justify-content:space-between;gap:10px}.stack{display:flex;flex-direction:column;gap:8px}.chip{display:inline-flex;align-items:center;gap:5px;font-size:13px;font-weight:600;border-radius:999px;padding:3px 10px;background:var(--bg);color:var(--primary);white-space:nowrap}.chip.warn{background:var(--warn-bg);color:var(--warn)}.chip.info{background:var(--info-bg);color:var(--info)}.chip.ok{background:var(--ok-bg);color:var(--ok)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:52px;padding:0 18px;border-radius:14px;border:none;background:var(--primary);color:var(--on-primary);font-weight:700;font-size:17px;cursor:pointer;width:100%}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.ghost{background:var(--card);color:var(--ink);border:1px solid var(--field);font-weight:600}.btn.small{min-height:44px;font-size:15px;width:auto}.btn.warn{background:var(--warn)}.btns{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:8px;align-items:end}label.f{display:flex;flex-direction:column;gap:6px;font-size:14px;font-weight:600}input,select,textarea{min-height:48px;border:1px solid var(--field);border-radius:12px;padding:0 14px;background:var(--card);font-size:16px;width:100%;min-width:0;max-width:100%;display:block;margin:0}input,select{height:48px}input[type=date],input[type=time],input[type=number]{-webkit-appearance:none;appearance:none;line-height:46px;text-align:left}input::-webkit-date-and-time-value{text-align:left;margin:0}input::-webkit-datetime-edit{padding:0}textarea{padding:10px 14px;min-height:80px;resize:vertical}.check{display:flex;align-items:center;gap:10px;min-height:44px;font-size:15px}.check input{width:20px;height:20px;min-height:0;accent-color:var(--primary)}.seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:4px;background:var(--track);border-radius:12px;padding:3px}.seg button{min-height:40px;border:none;border-radius:10px;background:transparent;color:var(--text2);font-weight:600;font-size:14px;cursor:pointer}.seg button[aria-pressed=true]{background:var(--card);color:var(--ink);font-weight:700}.alert{border-radius:14px;padding:12px 14px;font-size:14px;background:var(--warn-bg);color:var(--warn)}.alert.info{background:var(--info-bg);color:var(--info)}.alert.ok{background:var(--ok-bg);color:var(--ok)}.big{font-size:30px;font-weight:700;letter-spacing:-.5px}table.t{width:100%;border-collapse:collapse;font-size:14px}table.t th{text-align:left;color:var(--muted);font-weight:600;font-size:12px;padding:6px 4px}table.t td{border-top:1px solid var(--line);padding:8px 4px;vertical-align:top}nav.tabs{position:fixed;bottom:0;left:0;right:0;background:var(--card);border-top:1px solid var(--line);display:flex;justify-content:center;padding:6px 4px calc(10px + env(safe-area-inset-bottom))}nav.tabs .in{max-width:480px;width:100%;display:grid;grid-auto-flow:column;grid-auto-columns:1fr}nav.tabs button{border:none;background:none;min-height:52px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:12px;color:var(--muted);cursor:pointer}nav.tabs button[aria-current=page]{color:var(--primary);font-weight:700}nav.tabs svg{width:24px;height:24px}.center{min-height:100dvh;display:flex;flex-direction:column;justify-content:center;padding:40px 28px;gap:28px;max-width:480px;margin:0 auto}a{color:var(--primary)}.linkbtn{background:none;border:none;color:var(--primary);font-weight:600;font-size:15px;min-height:44px;cursor:pointer;padding:0;text-decoration:underline}.modal-bg{position:fixed;inset:0;background:#21181573;display:flex;align-items:flex-end;justify-content:center;z-index:20}.modal{background:var(--bg);width:100%;max-width:480px;max-height:88dvh;overflow-y:auto;border-radius:22px 22px 0 0;padding:20px 20px calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:12px}.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}.cal-wd{text-align:center;font-size:12px;font-weight:600;color:var(--muted);padding:2px 0}.cal-wd.sun,.cal-num.sun{color:#b3261e}.cal-wd.sat,.cal-num.sat{color:var(--info)}.cal-cell{min-height:64px;border:1px solid var(--line);border-radius:10px;background:var(--card);padding:3px 2px 4px;display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;font:inherit;color:var(--ink);overflow:hidden}.cal-cell.off{background:#eadbbe;border-color:#dcc79f}.cal-cell.today{border:2px solid var(--primary)}.cal-cell.sel{box-shadow:0 0 0 2px var(--warn) inset}.cal-num{font-size:13px;font-weight:700;line-height:1.2}.cal-shift{width:100%;background:var(--primary);color:var(--on-primary);border-radius:6px;font-size:10.5px;font-weight:600;line-height:1.25;text-align:center;padding:2px 0;letter-spacing:-.2px}.cal-shift.unconf{background:var(--warn)}.cal-count{font-size:13px;font-weight:700;color:var(--primary);line-height:1.2}.cal-names{font-size:10px;color:var(--text2);line-height:1.2;text-align:center;word-break:keep-all}.cal-leave{width:100%;background:var(--info);color:#fff;border-radius:6px;font-size:10px;font-weight:700;text-align:center;line-height:1.5}.cal-off{font-size:10px;color:var(--muted)}.cal-hol{font-size:9.5px;color:#b3261e;font-weight:600;line-height:1.2;text-align:center}.cal-dot{display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:4px;vertical-align:middle}@font-face{font-family:Great Vibes;src:url(/fonts/great-vibes-latin-400.woff2) format("woff2");font-weight:400;font-display:block}.intro{position:fixed;inset:0;z-index:50;background:var(--bg);display:flex;align-items:center;justify-content:center;transition:opacity .35s ease;cursor:pointer}.intro.leave{opacity:0}.intro-media{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .5s ease}.intro-media.shown{opacity:1}.intro-scrim{position:absolute;inset:0;background:radial-gradient(ellipse at center,#21181561,#2118151f 60%,#21181500);pointer-events:none}.intro-title{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px;opacity:0;transform:translateY(8px);transition:opacity .8s ease .15s,transform .8s ease .15s}.intro-title.shown{opacity:1;transform:none}.intro-script{font-family:Great Vibes,cursive;font-size:clamp(56px,18vw,92px);color:#fff;line-height:1;text-shadow:0 2px 18px rgba(33,24,21,.55),0 1px 3px rgba(33,24,21,.45);white-space:nowrap}.intro-subtitle{font-size:13px;font-weight:500;letter-spacing:.22em;color:#fff;text-shadow:0 1px 8px rgba(33,24,21,.6),0 1px 2px rgba(33,24,21,.5)}.intro-skip.on-photo{color:#ffffffe6;text-shadow:0 1px 4px rgba(0,0,0,.5)}.intro-logo{display:flex;flex-direction:column;align-items:center;gap:10px;animation:intro-in .9s ease both}.intro-name{font-size:34px;font-weight:700;letter-spacing:-.5px;color:var(--ink)}.intro-sub{font-size:15px;color:var(--muted)}.intro-skip{position:absolute;bottom:calc(28px + env(safe-area-inset-bottom));font-size:12px;color:var(--muted)}@keyframes intro-in{0%{opacity:0;transform:translateY(10px) scale(.96)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.intro-logo{animation:none}.intro-title,.intro-media{transition:none}}
