Build a photo gallery plugin for sharing and organizing team photos. Slug: photo-gallery. DATA MODEL — Two record types with a reference relationship. Album: name (string, required), description (text), cover_photo_id (string, optional — ID of the photo record to use as cover). Photo: album_id (reference, required — target: 'albums', display_field: 'name'), caption (string), tags (string — comma-separated), uploaded_by_user_id (integer — current user), uploaded_at (datetime — defaults to now), sort_order (integer — default 0). Each photo record has exactly one file attachment (the image). Include data_version 1 and rag_index on caption and tags. Use type: :reference for album_id so clicking the album name in the photo list navigates to the album. NAVIGATION — Three tabs: Dashboard (fas fa-tachometer-alt), Albums (fas fa-folder-open), Upload (fas fa-cloud-upload-alt). DASHBOARD — Cards: total albums, total photos, photos uploaded this week, storage summary. Below: grid of the 8 most recent photos as thumbnails using plugin_file_url(file, variant: :thumb) with lazy loading. ALBUMS LIST — Grid of album cards. Each card shows the cover photo thumbnail (variant: :thumb), album name, photo count, and description excerpt. Click to open the album. Include a "New Album" button. ALBUM DETAIL VIEW — Album name and description at top. Photo grid using Bootstrap row with col-6 col-md-4 col-lg-3. Each cell shows the photo thumbnail (variant: :thumb) with the caption below. Clicking a thumbnail opens a Bootstrap Modal lightbox showing the image at variant: :medium with prev/next navigation buttons and caption. Include "Upload Photos" button and "Edit Album" button. The lightbox should use Turbo-safe JavaScript with registration guards — store image URLs in a JS array, track current index, and wire prev/next buttons to swap the modal image src. UPLOAD VIEW — Form to upload one or more photos to a selected album. Album dropdown populated from existing albums. Caption field (appli...