*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{width:100%;height:100%}body{width:100%;height:var(--screen-h,100dvh);overscroll-behavior:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#000;justify-content:center;align-items:stretch;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;display:flex}#root{width:100%;max-width:430px;height:var(--screen-h,100dvh);position:relative}@media (width>=480px){body{align-items:center;padding:24px 0}#root{border-radius:44px;height:min(844px,100dvh - 48px);overflow:hidden;box-shadow:0 0 0 1px #ffffff0f,0 32px 80px #0000008c,0 8px 24px #0000004d}}input,textarea,select{font-size:16px}.app{width:100%;height:var(--screen-h,100dvh);position:relative;overflow:hidden}.screen{will-change:transform, opacity;transition:transform .38s cubic-bezier(.4,0,.2,1),opacity .38s;position:absolute;inset:0}.screen-active{opacity:1;pointer-events:auto;z-index:2;transform:translate(0)}.screen-left{opacity:.5;pointer-events:none;z-index:1;transform:translate(-28%)}.screen-right{opacity:1;pointer-events:none;z-index:2;transform:translate(100%)}@keyframes ball-fall{0%{opacity:0;transform:translateY(-320px)scaleX(1)scaleY(1)}45%{opacity:1}62%{transform:translateY(12px)scaleX(1.18)scaleY(.82)}74%{transform:translateY(-9px)scaleX(.9)scaleY(1.1)}84%{transform:translateY(5px)scaleX(1.07)scaleY(.94)}92%{transform:translateY(-2px)scaleX(.97)scaleY(1.03)}to{opacity:1;transform:translateY(0)scaleX(1)scaleY(1)}}.ball-drop{animation:.76s cubic-bezier(.33,1,.68,1) both ball-fall}.home-screen{width:100%;height:var(--screen-h,100dvh);background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 430 900'%3E%3Cpath d='M 215 -80 C 60 20, -80 180, -80 430 C -80 680, 60 840, 215 940' stroke='rgba(255,255,255,0.07)' stroke-width='90' fill='none' stroke-linecap='round'/%3E%3Cpath d='M 215 -80 C 370 20, 510 180, 510 430 C 510 680, 370 840, 215 940' stroke='rgba(255,255,255,0.07)' stroke-width='90' fill='none' stroke-linecap='round'/%3E%3Ccircle cx='380' cy='150' r='210' fill='none' stroke='rgba(255,255,255,0.04)' stroke-width='44'/%3E%3Ccircle cx='40' cy='720' r='190' fill='none' stroke='rgba(255,255,255,0.04)' stroke-width='44'/%3E%3C/svg%3E") center center / cover no-repeat, linear-gradient(158deg, var(--mg-start,#48d484) 0%, var(--mg-mid,#3dc87a) 50%, var(--mg-end,#32bb6e) 100%);flex-direction:column;display:flex;position:relative}.home-header{z-index:1;flex-shrink:0;align-items:center;padding:54px 16px 8px;display:flex;position:relative}.month-nav{flex:1;justify-content:center;align-items:center;gap:2px;display:flex}.month-nav-btn{cursor:pointer;background:#ffffff2e;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;transition:background .18s;display:flex}.month-nav-btn:active:not(:disabled){background:#ffffff52}.month-nav-btn:disabled{cursor:default}.month-title{color:#fff;letter-spacing:-.2px;white-space:nowrap;padding:0 6px;font-size:17px;font-weight:700}.header-icon-btn{cursor:pointer;opacity:.88;-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;transition:opacity .15s;display:flex}.header-icon-btn:active{opacity:.5}.stats-section{text-align:left;z-index:1;flex-shrink:0;padding:2px 22px 10px;position:relative}.session-count{color:#fff;letter-spacing:-6px;text-shadow:0 4px 24px #00000024;font-size:96px;font-weight:800;line-height:.86}.session-label{color:#ffffff8c;letter-spacing:3px;text-transform:uppercase;margin-top:8px;font-size:11.5px;font-weight:700}.month-note{color:#ffffffad;margin-top:6px;font-size:13px;font-weight:400}.balls-area{z-index:0;position:absolute;inset:0}.empty-state{flex-direction:column;justify-content:flex-end;align-items:flex-start;gap:6px;padding:0 24px 34px;display:flex;position:absolute;inset:0}.empty-ball-ring{border:3px dashed #ffffff4d;border-radius:50%;width:80px;height:80px;margin-bottom:8px}.empty-text{color:#ffffff73;font-size:16px;font-weight:600}.empty-sub{color:#ffffff4d;font-size:13px}.bottom-bar{z-index:50;position:fixed;bottom:28px;right:22px}.fab{cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#141414e0;border:none;border-radius:50%;justify-content:center;align-items:center;width:60px;height:60px;transition:transform .15s,box-shadow .15s;display:flex;box-shadow:0 6px 24px #0000005c,0 2px 6px #0000002e}.fab:hover{box-shadow:0 8px 32px #00000070}.fab:active{transform:scale(.9);box-shadow:0 3px 12px #00000047}@keyframes slide-up{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}.cal-overlay{z-index:100;background:#00000061;flex-direction:column;justify-content:flex-end;display:flex;position:fixed;inset:0}.cal-full{background:#fafafa;border-radius:24px 24px 0 0;flex-direction:column;max-height:96dvh;animation:.32s cubic-bezier(.4,0,.2,1) slide-up;display:flex;overflow:hidden}.cal-full-header{flex-shrink:0;align-items:center;gap:4px;padding:18px 16px 12px;display:flex}.cal-full-nav{cursor:pointer;background:#f0f0f0;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;transition:background .15s;display:flex}.cal-full-nav:active{background:#e2e2e2}.cal-full-title{text-align:center;color:#111;letter-spacing:-.2px;flex:1;font-size:16px;font-weight:700}.cal-full-close{cursor:pointer;background:#f0f0f0;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;transition:background .15s;display:flex}.cal-full-close:active{background:#e2e2e2}.cal-full-names{flex-shrink:0;grid-template-columns:repeat(7,1fr);margin-bottom:2px;padding:0 8px;display:grid}.cal-full-name{color:#c4c4c4;letter-spacing:.4px;justify-content:center;align-items:center;height:28px;font-size:10.5px;font-weight:700;display:flex}.cal-full-grid{flex-shrink:0;grid-template-columns:repeat(7,1fr);gap:2px;padding:0 8px;display:grid}.cal-full-cell{color:#2a2a2a;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:2px;height:40px;padding:0;font-size:13px;transition:background .12s;display:flex}.cal-full-cell:disabled{cursor:default}.cfc-other{opacity:0;pointer-events:none}.cfc-dot{background:#3d52d8;border-radius:50%;flex-shrink:0;width:4px;height:4px}.cfc-has-sess{background:#3d52d81a}.cfc-has-sess:active{background:#3d52d838}.cfc-today span{color:#3d52d8;font-weight:700}.cfc-selected{background:#191919}.cfc-selected span{color:#fff;font-weight:700}.cfc-selected .cfc-dot{background:#e8a070}.cal-detail{overscroll-behavior-y:contain;border-top:1px solid #efefef;flex-direction:column;flex:1;gap:10px;margin-top:8px;padding:14px 16px 24px;display:flex;overflow-y:auto}.cal-detail-date{color:#aaa;text-transform:uppercase;letter-spacing:.8px;font-size:11px;font-weight:700}.cal-detail-empty{flex-direction:column;gap:12px;display:flex}.cal-detail-empty span{color:#bbb;font-size:14px}.cal-detail-list{flex-direction:column;gap:8px;display:flex}.cal-session-card{background:#fff;border-radius:16px;padding:16px 18px 12px;box-shadow:0 2px 10px #00000012}.cal-session-editing{padding:14px 16px}.cal-session-notes{color:#111;white-space:pre-wrap;word-break:break-word;letter-spacing:-.1px;margin-bottom:12px;font-size:16px;line-height:1.8}.cal-card-actions{justify-content:flex-end;gap:6px;display:flex}.cal-card-btn{cursor:pointer;color:#555;background:#f4f4f4;border:none;border-radius:8px;align-items:center;gap:4px;padding:5px 10px;font-family:inherit;font-size:11.5px;font-weight:600;transition:background .14s,color .14s;display:flex}.cal-card-btn:active{background:#e8e8e8}.cal-card-del{color:#999}.cal-card-del:active{color:#c04040;background:#ffe8e8}.cal-card-del-confirm{color:#c04040;background:#fff0ec}.cal-edit-textarea{resize:none;color:#111;background:#fefefe;border:2px solid #3d52d8;border-radius:10px;outline:none;width:100%;padding:10px 12px;font-family:inherit;font-size:16px;line-height:1.6;box-shadow:0 0 0 3px #3d52d81a}.cal-edit-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.cal-edit-save{cursor:pointer;color:#fff;background:#3d52d8;border:none;border-radius:10px;padding:7px 16px;font-family:inherit;font-size:13px;font-weight:700;transition:opacity .15s}.cal-edit-save:active{opacity:.82}.cal-edit-cancel{cursor:pointer;color:#666;background:#f0f0f0;border:none;border-radius:10px;padding:7px 14px;font-family:inherit;font-size:13px;font-weight:600;transition:background .14s}.cal-edit-cancel:active{background:#e4e4e4}.cal-add-btn{color:#fff;cursor:pointer;background:#3d52d8;border:none;border-radius:20px;align-self:flex-start;padding:10px 18px;font-family:inherit;font-size:14px;font-weight:700;transition:opacity .15s,transform .15s}.cal-add-btn:active{opacity:.82;transform:scale(.96)}.cal-add-more{color:#555;background:#f0f0f0}.add-lesson-screen{width:100%;height:var(--screen-h,100dvh);background:#fefefe;flex-direction:column;display:flex;overflow:hidden}.add-header{border-bottom:1px solid #f0f0f0;flex-shrink:0;align-items:center;gap:14px;padding:54px 20px 20px;display:flex}.back-btn{cursor:pointer;background:#f2f2f2;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;transition:background .18s;display:flex}.back-btn:active{background:#e6e6e6}.add-title{color:#111;letter-spacing:-.3px;font-size:22px;font-weight:700}.add-form{flex-direction:column;flex:1;min-height:0;display:flex}.add-form-fields{overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;flex-direction:column;flex:1;gap:28px;min-height:0;padding:28px 24px 16px;display:flex;overflow-y:auto}.add-form-footer{padding:16px 24px max(28px, env(safe-area-inset-bottom,0px));background:#fefefe;border-top:1px solid #f0f0f0;flex-shrink:0}.form-group{flex-direction:column;gap:9px;display:flex;position:relative}.form-label{color:#999;text-transform:uppercase;letter-spacing:1.2px;font-size:11.5px;font-weight:700}.form-input,.form-textarea{box-sizing:border-box;color:#111;appearance:none;background:#fafafa;border:2px solid #ebebeb;border-radius:14px;outline:none;width:100%;padding:14px 16px;font-family:inherit;font-size:16px;transition:border-color .2s,box-shadow .2s,background .2s}.form-input:focus,.form-textarea:focus{background:#fff;border-color:#3d52d8;box-shadow:0 0 0 3px #3d52d81f}.form-textarea{resize:none;line-height:1.7}.form-textarea.has-error{border-color:#ff6b6b}.form-textarea.has-error:focus{box-shadow:0 0 0 3px #ff6b6b24}.form-input.date-locked{color:#555;cursor:default;pointer-events:none;background:#f0f0f0}.form-input.date-locked:focus{box-shadow:none;border-color:#ebebeb}.error-msg{color:#ff6b6b;align-items:center;gap:5px;font-size:13px;font-weight:500;display:flex}.form-label-hint{color:#bbb;text-transform:none;letter-spacing:0;margin-left:6px;font-size:10px;font-weight:500}.mention-dropdown{z-index:200;background:#fff;border:1px solid #00000012;border-radius:14px;position:absolute;bottom:calc(100% + 8px);left:0;right:0;overflow:hidden;box-shadow:0 8px 32px #00000029}.mention-option{cursor:pointer;color:#111;text-align:left;background:0 0;border:none;border-bottom:1px solid #0000000f;align-items:center;gap:2px;width:100%;padding:14px 18px;font-family:inherit;font-size:15px;font-weight:600;display:flex}.mention-option:last-child{border-bottom:none}.mention-option:active{background:#f5f5f5}.mention-option-at{color:#3d52d8;font-weight:700}.tag-chip{white-space:nowrap;border-radius:6px;margin:0 1px;padding:1px 7px;font-size:.875em;font-weight:700;display:inline-block}.memo-filter-bar{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;padding:0 16px 14px;display:flex}.memo-filter-btn{color:#888;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#fff;border:1.5px solid #e0e0e0;border-radius:20px;padding:6px 16px;font-family:inherit;font-size:13px;font-weight:600;transition:all .15s}.memo-filter-btn.active{color:#fff;background:#3d52d8;border-color:#3d52d8}.memo-filter-btn.active[data-key=백핸드]{background:#1a9e60;border-color:#1a9e60}.memo-filter-btn.active[data-key=스매시]{background:#c85500;border-color:#c85500}.memo-filter-btn:active{opacity:.75}.tag-add-btn{color:#aaa;cursor:pointer;background:#fff;border:1.5px dashed #ccc;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:30px;height:30px;font-size:18px;line-height:1;transition:border-color .15s,color .15s;display:flex}.tag-add-btn:active{color:#3d52d8;border-color:#3d52d8}.tag-add-input{color:#111;border:1.5px solid #3d52d8;border-radius:20px;outline:none;width:90px;padding:2px 10px;font-family:inherit;font-size:16px;font-weight:500;box-shadow:0 0 0 3px #3d52d81a}.save-btn{color:#fff;cursor:pointer;letter-spacing:.1px;background:#3d52d8;border:none;border-radius:16px;width:100%;padding:17px 24px;font-family:inherit;font-size:16px;font-weight:600;transition:transform .15s,opacity .15s,box-shadow .15s;box-shadow:0 4px 18px #3d52d84d}.save-btn:hover{box-shadow:0 6px 24px #3d52d866}.save-btn:active{opacity:.88;transform:scale(.97)}.save-btn:disabled{opacity:.55;cursor:not-allowed}.memo-list{overscroll-behavior-y:contain;flex-direction:column;flex:1;gap:4px;padding:6px 16px 0;display:flex;overflow-y:auto}.memo-group{flex-direction:column;gap:8px;margin-bottom:12px;display:flex}.memo-group-label{color:#bbb;text-transform:uppercase;letter-spacing:1px;padding:4px 2px 2px;font-size:11px;font-weight:700}.memo-empty{flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:40px 24px;display:flex}.memo-empty p{color:#bbb;text-align:center;font-size:15px}.sc-date-label{color:#999;text-transform:uppercase;letter-spacing:.8px;margin-bottom:8px;font-size:11.5px;font-weight:700}.sticky-wrap{z-index:1;flex-shrink:0;padding:0 18px 12px;position:relative}.sticky-note{-webkit-tap-highlight-color:transparent;background:#ffffff2e;border:1.5px solid #ffffff59;border-radius:14px;padding:10px 14px}.sticky-label{letter-spacing:.9px;text-transform:uppercase;color:#ffffffa6;margin-bottom:5px;font-size:10px;font-weight:700;display:block}.sticky-textarea{color:#fffffff2;resize:none;box-sizing:border-box;background:0 0;border:none;outline:none;width:100%;min-height:40px;max-height:120px;padding:0;font-family:inherit;font-size:16px;line-height:1.6;overflow:hidden auto}.sticky-textarea::placeholder{color:#fff6;font-style:italic}.backup-section{border-top:1px solid #e8e8e8;margin-top:24px;padding:16px}.backup-row{gap:10px;display:flex}.backup-btn{cursor:pointer;border:none;border-radius:10px;flex:1;padding:10px 12px;font-size:14px;font-weight:600;transition:opacity .15s}.backup-btn:active{opacity:.75}.backup-btn:disabled{opacity:.4;cursor:default}.export-btn{color:#fff;background:#3dc87a}.import-btn{color:#444;background:#f0f0f0}.import-btn.active{color:#3244cc;background:#e0e8ff}.backup-msg{color:#555;text-align:center;margin:8px 0 0;font-size:13px}.import-area{flex-direction:column;gap:8px;margin-top:12px;display:flex}.import-textarea{box-sizing:border-box;resize:none;color:#222;background:#fafafa;border:1.5px solid #d0d0d0;border-radius:10px;width:100%;padding:10px 12px;font-family:monospace;font-size:13px;line-height:1.5}.restore-btn{color:#fff;background:#3244cc}@media (width>=480px){.cal-overlay{position:absolute}.app,.home-screen,.add-lesson-screen{height:100%}.add-header{padding-top:20px}.cal-full{max-height:100%}}
