# Patch Notes Fase 7A — Kamera HD dan Fullscreen

## File Utama

- `public/assets/js/camera-service.js`: preset kualitas, fallback constraint, lifecycle stream, devicechange, resolusi aktual, dan snapshot asli.
- `public/assets/js/camera-ui.js`: selector kualitas, badge aktual, loading, flash, pergantian stream, dan integrasi fullscreen.
- `public/assets/js/camera-fullscreen.js`: Fullscreen API serta immersive CSS fallback.
- `public/assets/js/camera-renderer.js`: snapshot simulasi proporsional maksimal sisi panjang 2048 px dan 4 megapiksel.
- `public/assets/css/phase3b-camera.css`: layout kamera dominan, fullscreen, safe-area, portrait/landscape, focus, dan reduced motion.
- View Kamera Praktikum dan Virtual Lab: kontrol kualitas, HUD, shutter fullscreen, tombol keluar, dan status aksesibel.

## Perilaku Resolusi

Pilihan tersedia: Otomatis, HD, Full HD, dan Maksimal Perangkat. Constraint tidak memakai `exact` untuk resolusi. Sistem mencoba pilihan aktif, melonggarkan selector kamera, lalu fallback 1920×1080, 1280×720, 960×540, 640×480, dan terakhir `video: true`. Badge selalu membaca `getSettings()`/`videoWidth` dan `videoHeight` aktual.

## Fullscreen

Container kamera memakai Fullscreen API tanpa meminta ulang permission atau membuat stream baru. Bila API tidak tersedia/ditolak, immersive mode CSS memakai `position: fixed`, viewport penuh, tombol keluar, body scroll lock, safe-area, dan sinkronisasi Escape.

## Snapshot

Foto asli memakai ukuran stream aktual melalui Canvas `videoWidth × videoHeight`. Dukungan ImageCapture tersedia sebagai optimasi opsional dengan fallback Canvas, tetapi alur utama memakai Canvas agar dimensi konsisten. Foto simulasi mempertahankan aspect ratio dan dibatasi untuk keamanan memori.

## Keterbatasan

Resolusi, facing mode, frame rate, Fullscreen API, dan capability hardware bergantung pada perangkat/browser. Pengujian kamera fisik tetap dilakukan manual melalui localhost atau HTTPS mengikuti `MANUAL_TEST_PHASE7A.md`.
