/* --- LEARN VIEW --- */ .learn-view { display: flex; flex-direction: column; height: 100%; width: 100%; padding: 16px; padding-top: calc(env(safe-area-inset-top, 20px) + 24px); box-sizing: border-box; overflow-y: auto; } /* Decks Overview */ .decks-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 16px; margin-top: 20px; } .deck-card { background: var(--surface-2); border-radius: 20px; padding: 20px; display: flex; flex-direction: column; gap: 12px; cursor: pointer; transition: transform 0.2s, background 0.2s; border: 1px solid rgba(255, 255, 255, 0.05); } .deck-card:hover { transform: translateY(-4px); background: var(--surface-3); } .deck-icon-wrapper { width: 40px; height: 40px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 20px; } .deck-title { font-size: 16px; font-weight: 600; color: var(--text-primary); margin: 0; } .deck-stats { font-size: 13px; color: var(--text-secondary); display: flex; justify-content: space-between; } .due-badge { background: rgba(193, 131, 240, 0.2); color: #c183f0; padding: 2px 8px; border-radius: 12px; font-weight: 600; font-size: 12px; } /* Study Mode - Progressive Blur Card */ .study-container { display: flex; flex-direction: column; height: 100%; align-items: center; justify-content: center; padding: 20px 0; box-sizing: border-box; overflow: hidden; } .flashcard-stack { position: relative; width: 100%; max-width: 380px; aspect-ratio: 3/4; margin-bottom: 30px; min-height: 0; /* Allow shrinking on small screens */ flex-shrink: 1; } .flashcard-wrapper { position: absolute; top: 0; left: 0; width: 100%; height: 100%; perspective: 1000px; } .flashcard-wrapper.stacked-1 { z-index: 2; transform-origin: top center; transform: translateY(-16px) scale(0.92); opacity: 0.8; filter: brightness(0.8); pointer-events: none; } .flashcard-wrapper.stacked-2 { z-index: 1; transform-origin: top center; transform: translateY(-32px) scale(0.84); opacity: 0.5; filter: brightness(0.6); pointer-events: none; } .flashcard-wrapper.current { z-index: 3; position: relative; } .flashcard-inner { position: relative; width: 100%; height: 100%; text-align: center; transition: transform 0.6s cubic-bezier(0.4, 0.0, 0.2, 1); transform-style: preserve-3d; cursor: pointer; } .flashcard-inner.flipped { transform: rotateY(180deg); } .flashcard-face { position: absolute; width: 100%; height: 100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; border-radius: 24px; overflow: hidden; background: #1a1a20; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4); transform: translateZ(0); box-sizing: border-box; border: 1px solid rgba(255, 255, 255, 0.08); /* Ultimate WebKit/Android WebView clipping fix */ -webkit-clip-path: inset(0 round 24px); clip-path: inset(0 round 24px); } .flashcard-face::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; border-radius: 24px; /* More intense inner mask to hide ANY remaining subpixel bleeding */ box-shadow: inset 0 0 0 4px #000; pointer-events: none; z-index: 10; } .flashcard-back { transform: rotateY(180deg); display: flex; flex-direction: column; align-items: center; justify-content: flex-start; padding: 40px 24px 30px 24px; background: #121216; /* Use inset shadow instead of border to prevent 3D sub-pixel bleeding on Chromium/Android */ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05); overflow-y: auto; overflow-x: hidden; } /* The Progressive Blur Magic */ .flashcard-image { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; z-index: 1; border-radius: 24px; } .flashcard-blur-overlay { position: absolute; bottom: -2px; /* Pull down slightly to cover any sub-pixel gap */ left: -2px; right: -2px; height: 65%; /* Make slightly larger to ensure full coverage */ z-index: 2; border-bottom-left-radius: 24px; border-bottom-right-radius: 24px; /* Progressive Blur trick */ backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); mask-image: linear-gradient(to bottom, transparent 0%, black 60%); -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 60%); /* Dark fade */ background: linear-gradient(to bottom, transparent 0%, rgba(0, 0, 0, 0.9) 80%, #000000 100%); } .flashcard-content { position: absolute; bottom: 0; left: 0; right: 0; z-index: 3; padding: 30px 20px; text-align: left; display: flex; flex-direction: column; gap: 8px; } .flashcard-title { font-size: 24px; font-weight: 700; color: #ffffff; margin: 0; text-shadow: 0 2px 8px rgba(0,0,0,0.5); } .flashcard-subtitle { font-size: 15px; color: rgba(255, 255, 255, 0.8); line-height: 1.4; } /* Feedback Buttons */ .feedback-controls { display: flex; gap: 12px; width: 100%; max-width: 380px; opacity: 0; transform: translateY(20px); transition: opacity 0.3s, transform 0.3s; pointer-events: none; } .feedback-controls.visible { opacity: 1; transform: translateY(0); pointer-events: auto; } .btn-feedback { flex: 1; padding: 12px 0; border-radius: 14px; border: none; font-weight: 600; font-size: 13px; color: white; cursor: pointer; display: flex; flex-direction: column; align-items: center; gap: 4px; } .btn-again { background: #ff453a; } .btn-hard { background: #ff9f0a; } .btn-good { background: #32d74b; } .btn-easy { background: #0a84ff; } .feedback-time { font-size: 10px; opacity: 0.8; font-weight: 500; }