/* static/css/index-calendar.css */

/* 캘린더 섹션 기본 스타일 */
.calendar-section {
    background: var(--card-bg);
    border-radius: var(--radius-large);
    padding: 24px;
    box-shadow: var(--shadow-medium);
    border: 1px solid var(--border-light);
    transition: all 0.3s ease;
}

.calendar-section:hover {
    box-shadow: var(--shadow-large);
    transform: translateY(-2px);
}

/* 캘린더 네비게이션 */
.calendar-nav {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-bottom: 20px;
}

.current-month {
    font-size: 16px;
    font-weight: 600;
    color: var(--text-primary);
    min-width: 120px;
    text-align: center;
    transition: color 0.3s ease;
}

.calendar-nav .btn {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--card-bg);
    border: 1px solid var(--border-light);
    color: var(--text-secondary);
    cursor: pointer;
    transition: all 0.2s ease;
}

.calendar-nav .btn:hover {
    background: var(--primary-color);
    color: white;
    border-color: var(--primary-color);
    transform: scale(1.1);
}

.calendar-nav .btn ion-icon {
    font-size: 18px;
}

/* 캘린더 래퍼 */
.calendar-wrapper {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius-medium);
}

.calendar-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 1px;
    background: var(--border-light);
    border-radius: var(--radius-medium);
    overflow: hidden;
    opacity: 1;
    transform: translateX(0%);
    transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
}

/* 요일 헤더 */
.calendar-header {
    background: var(--bg-secondary);
    padding: 12px 8px;
    text-align: center;
    font-size: 12px;
    font-weight: 600;
    color: var(--text-secondary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    transition: all 0.3s ease;
}

.calendar-header.weekend {
    color: var(--error-color);
}

/* 캘린더 날짜 셀 - 안정성 향상 */
.calendar-day {
    background: var(--card-bg);
    padding: 12px 8px;
    text-align: center;
    cursor: pointer;
    min-height: 60px;
    max-height: 60px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;
    border: 2px solid transparent;
    box-sizing: border-box;
    transition: all 0.2s ease;
    overflow: visible;
}

.calendar-day:hover {
    border-color: var(--primary-color);
    transform: scale(1.02);
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);
    z-index: 2;
}

/* 날짜 숫자 */
.calendar-day .date-number {
    font-size: 14px;
    font-weight: 500;
    color: var(--text-primary);
    margin-bottom: 4px;
    transition: all 0.2s ease;
    z-index: 3;
    position: relative;
}

.calendar-day:hover .date-number {
    font-weight: 600;
    transform: scale(1.05);
}

/* 다른 달 날짜 */
.calendar-day.other-month {
    color: var(--text-disabled);
    background: var(--bg-tertiary);
    cursor: default;
}

.calendar-day.other-month:hover {
    border-color: transparent;
    transform: none;
    box-shadow: none;
}

.calendar-day.other-month .date-number {
    color: var(--text-disabled);
}

/* 오늘 날짜 */
.calendar-day.today {
    border-color: var(--danger-color);
    background: var(--card-bg);
    animation: todayPulse 3s infinite;
}

.calendar-day.today .date-number {
    color: var(--danger-color);
    font-weight: 700;
}

@keyframes todayPulse {
    0%, 100% {
        box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4);
    }
    50% {
        box-shadow: 0 0 0 4px rgba(239, 68, 68, 0.1);
    }
}

/* 선택된 날짜 */
.calendar-day.selected {
    border-color: var(--secondary-color);
    background: var(--card-bg);
    transform: scale(1.03);
    box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}

.calendar-day.selected .date-number {
    color: var(--secondary-color);
    font-weight: 700;
}

.calendar-day.today.selected .date-number {
    color: var(--secondary-color);
}

/* 루틴이 있는 날짜 */
.calendar-day.has-routines {
    background: rgba(255, 154, 154, 0.1);
    color: var(--primary-color);
}

.calendar-day.has-routines .date-number {
    color: var(--primary-color);
    font-weight: 600;
}

.calendar-day.has-routines.today {
    background: var(--primary-color);
    color: white;
}

.calendar-day.has-routines.today .date-number {
    color: white;
}

/* 루틴 완료 표시 */
.routine-indicator {
    position: absolute;
    bottom: 4px;
    right: 4px;
    width: 6px;
    height: 6px;
    background: var(--primary-color);
    border-radius: 50%;
    animation: pulseGlow 2s ease-in-out infinite;
}

.calendar-day.today .routine-indicator {
    background: white;
}

@keyframes pulseGlow {
    0%, 100% {
        opacity: 0.8;
        transform: scale(1);
    }
    50% {
        opacity: 1;
        transform: scale(1.2);
    }
}

/* 차트 컨테이너 위치 조정 */
.day-progress-chart {
    position: absolute;
    bottom: 2px;
    left: 50%;
    transform: translateX(-50%);
    width: 16px;
    height: 16px;
    border-radius: 50%;
    transition: all 0.3s ease;
    z-index: 1;
}

/* 빈 상태 차트 */
.day-progress-chart.empty {
    background: transparent;
    visibility: hidden;
}

/* 차트 호버 효과 */
.calendar-day:hover .day-progress-chart {
    transform: translateX(-50%) scale(1.2);
    z-index: 4;
}

/* 차트 상태별 스타일 */
.day-progress-chart.single-color {
    animation: chartGlow 2s ease-in-out infinite;
}

.day-progress-chart.multi-color {
    animation: chartRotate 4s linear infinite;
}

@keyframes chartGlow {
    0%, 100% {
        box-shadow: 0 0 3px rgba(255, 154, 154, 0.5);
    }
    50% {
        box-shadow: 0 0 8px rgba(255, 154, 154, 0.8);
    }
}

@keyframes chartRotate {
    0% { transform: translateX(-50%) rotate(0deg); }
    100% { transform: translateX(-50%) rotate(360deg); }
}

/* Three.js 강화 차트 */
.day-progress-chart.three-js-enhanced {
    overflow: hidden;
    position: relative;
}

.day-progress-chart.three-js-enhanced canvas {
    width: 100% !important;
    height: 100% !important;
    border-radius: 50%;
    position: absolute;
    top: 0;
    left: 0;
}

/* 차트 로딩 상태 */
.day-progress-chart.loading {
    background: linear-gradient(45deg, 
        var(--bg-secondary) 25%, 
        transparent 25%, 
        transparent 50%, 
        var(--bg-secondary) 50%, 
        var(--bg-secondary) 75%, 
        transparent 75%
    );
    background-size: 6px 6px;
    animation: chartLoading 1s linear infinite;
}

@keyframes chartLoading {
    0% { background-position: 0 0; }
    100% { background-position: 6px 6px; }
}

/* 차트 에러 상태 */
.day-progress-chart.error {
    background: rgba(239, 68, 68, 0.3);
    position: relative;
}

.day-progress-chart.error::after {
    content: "!";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: white;
    font-size: 8px;
    font-weight: bold;
    text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
}

/* 진행률 섹션 스타일 */
.progress-content {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 20px;
}

.progress-ring {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.3s ease;
}

.progress-ring:hover {
    transform: scale(1.02);
}

.progress-svg {
    transform: rotate(-90deg);
    transition: all 0.3s ease;
    filter: drop-shadow(0 0 8px rgba(255, 154, 154, 0.3));
}

.progress-bg {
    fill: none;
    stroke: var(--bg-tertiary);
    stroke-width: 8;
    transition: stroke 0.3s ease;
}

.progress-fill {
    fill: none;
    stroke: var(--primary-color);
    stroke-width: 8;
    stroke-linecap: round;
    stroke-dasharray: 314;
    stroke-dashoffset: 314;
    transition: all 0.6s ease;
    filter: drop-shadow(0 0 6px rgba(255, 154, 154, 0.4));
}

.progress-text {
    position: absolute;
    text-align: center;
}

.progress-percent {
    display: block;
    font-size: 20px;
    font-weight: 700;
    color: var(--primary-color);
    transition: color 0.3s ease;
    text-shadow: 0 1px 2px rgba(0,0,0,0.1);
}

.progress-label {
    font-size: 12px;
    color: var(--text-secondary);
    transition: color 0.3s ease;
}

.progress-details {
    width: 100%;
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.detail-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 8px 0;
    border-bottom: 1px solid var(--border-light);
    transition: all 0.2s ease;
    border-radius: var(--radius-small);
}

.detail-item:hover {
    background: var(--hover-bg);
    margin: 0 -16px;
    padding: 8px 16px;
}

.detail-item:last-child {
    border-bottom: none;
}

.detail-label {
    color: var(--text-secondary);
    font-size: 14px;
    transition: color 0.2s ease;
}

.detail-value {
    font-weight: 600;
    color: var(--text-primary);
    transition: color 0.2s ease;
}

/* 캘린더 로딩 상태 - 완전히 숨김 처리 */
.calendar-loading {
    display: none !important;
    align-items: center;
    justify-content: center;
    padding: 60px 20px;
    color: var(--text-secondary);
    flex-direction: column;
    gap: 15px;
    animation: fadeIn 0.5s ease-in-out;
}

.calendar-loading .loading-spinner {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 16px;
    font-weight: 500;
}

.calendar-loading ion-icon {
    font-size: 28px;
    animation: spin 1s linear infinite;
    color: var(--primary-color);
}

.calendar-loading span {
    color: var(--text-primary);
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

/* 캘린더 그리드 상태 관리 */
.calendar-grid.loading {
    opacity: 0.5;
    pointer-events: none;
}

.calendar-grid.error {
    opacity: 0.3;
}

.calendar-grid.error::after {
    content: "캘린더를 불러올 수 없습니다";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: var(--text-secondary);
    font-size: 14px;
    text-align: center;
    background: var(--card-bg);
    padding: 20px;
    border-radius: var(--radius-medium);
    box-shadow: var(--shadow-medium);
    z-index: 10;
}

/* 반응형 디자인 - 향상된 버전 */
@media (max-width: 768px) {
    .calendar-section {
        padding: 16px;
    }
    
    .calendar-nav {
        gap: 12px;
        margin-bottom: 16px;
    }
    
    .current-month {
        font-size: 14px;
        min-width: 100px;
    }
    
    .calendar-nav .btn {
        width: 32px;
        height: 32px;
    }
    
    .calendar-nav .btn ion-icon {
        font-size: 16px;
    }
    
    .calendar-day {
        min-height: 50px;
        max-height: 50px;
        padding: 8px 4px;
    }

    .date-number {
        font-size: 12px;
    }

    .calendar-header {
        padding: 8px 4px;
        font-size: 11px;
    }

    .routine-indicator {
        width: 4px;
        height: 4px;
        bottom: 2px;
        right: 2px;
    }
    
    .day-progress-chart {
        width: 12px;
        height: 12px;
        bottom: 1px;
    }
}

@media (max-width: 480px) {
    .calendar-section {
        padding: 12px;
    }
    
    .calendar-day {
        min-height: 45px;
        max-height: 45px;
        font-size: 11px;
        padding: 6px 2px;
    }

    .date-number {
        font-size: 11px;
        margin-bottom: 2px;
    }

    .progress-percent {
        font-size: 18px;
    }

    .detail-label,
    .detail-value {
        font-size: 13px;
    }
    
    .day-progress-chart {
        width: 10px;
        height: 10px;
        bottom: 1px;
    }
    
    .routine-indicator {
        width: 3px;
        height: 3px;
        bottom: 1px;
        right: 1px;
    }
}

/* 초고해상도 디스플레이 지원 */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
    .day-progress-chart canvas {
        image-rendering: -webkit-optimize-contrast;
        image-rendering: crisp-edges;
    }
    
    .routine-indicator {
        box-shadow: 0 0 1px rgba(0,0,0,0.2);
    }
}

/* 성능 최적화 */
.calendar-day {
    will-change: transform, border-color;
    contain: layout style;
}

.calendar-day:hover {
    will-change: auto;
}

.day-progress-chart {
    will-change: transform;
    contain: layout style paint;
}

.day-progress-chart:hover {
    will-change: auto;
}

/* 접근성 개선 */
.calendar-day:focus {
    outline: 2px solid var(--primary-color);
    outline-offset: 2px;
}

.calendar-nav .btn:focus {
    outline: 2px solid var(--primary-color);
    outline-offset: 2px;
}

.calendar-day[aria-pressed="true"] {
    background: var(--selection-bg);
}

.calendar-day[aria-disabled="true"] {
    opacity: 0.5;
    cursor: not-allowed;
}

/* 고대비 모드 지원 */
@media (prefers-contrast: high) {
    .calendar-day {
        border-width: 3px;
    }
    
    .calendar-day.today {
        border-color: #000;
    }
    
    .day-progress-chart {
        border: 1px solid currentColor;
    }
}

/* 애니메이션 감소 설정 고려 */
@media (prefers-reduced-motion: reduce) {
    .calendar-day,
    .day-progress-chart,
    .routine-indicator,
    .progress-svg,
    .calendar-nav .btn {
        animation: none;
        transition: none;
    }
    
    .calendar-day:hover {
        transform: none;
    }
    
    .day-progress-chart:hover {
        transform: translateX(-50%);
    }
}

/* 테마별 캘린더 스타일 - 향상된 버전 */
[data-theme="ocean"] .calendar-grid {
    background: rgba(200, 228, 253, 0.3);
}

[data-theme="ocean"] .calendar-header {
    background: rgba(230, 243, 255, 0.8);
}

[data-theme="ocean"] .calendar-day {
    background: rgba(240, 248, 255, 0.9);
}

[data-theme="ocean"] .day-progress-chart {
    box-shadow: 0 0 4px rgba(74, 144, 226, 0.3);
}

[data-theme="sunset"] .calendar-grid {
    background: rgba(255, 215, 204, 0.3);
}

[data-theme="sunset"] .calendar-header {
    background: rgba(255, 238, 230, 0.8);
}

[data-theme="sunset"] .calendar-day {
    background: rgba(255, 248, 245, 0.9);
}

[data-theme="sunset"] .day-progress-chart {
    box-shadow: 0 0 4px rgba(255, 107, 107, 0.3);
}

[data-theme="forest"] .calendar-grid {
    background: rgba(200, 230, 201, 0.3);
}

[data-theme="forest"] .calendar-header {
    background: rgba(240, 254, 240, 0.8);
}

[data-theme="forest"] .calendar-day {
    background: rgba(248, 255, 248, 0.9);
}

[data-theme="forest"] .day-progress-chart {
    box-shadow: 0 0 4px rgba(46, 139, 87, 0.3);
}

[data-theme="dark"] .calendar-grid {
    background: rgba(58, 58, 58, 0.5);
}

[data-theme="dark"] .calendar-header {
    background: rgba(36, 36, 36, 0.9);
}

[data-theme="dark"] .calendar-day {
    background: rgba(30, 30, 30, 0.9);
}

[data-theme="dark"] .day-progress-chart {
    box-shadow: 0 0 4px rgba(108, 92, 231, 0.3);
}

/* 다크 모드 자동 감지 */
@media (prefers-color-scheme: dark) {
    .calendar-grid {
        background: rgba(58, 58, 58, 0.5);
    }
    
    .calendar-header {
        background: rgba(36, 36, 36, 0.9);
        color: var(--text-secondary);
    }
    
    .calendar-day {
        background: rgba(30, 30, 30, 0.9);
        border-color: rgba(255, 255, 255, 0.1);
    }
    
    .day-progress-chart {
        box-shadow: 0 0 4px rgba(255, 255, 255, 0.1);
    }
}