=== StoryFrame ===
Contributors: bikramkaji
Requires at least: 6.3
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.6
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Tags: portfolio, photography, blog, one-column, two-columns, right-sidebar, custom-colors, custom-logo, custom-menu, editor-style, featured-images, footer-widgets, full-width-template, threaded-comments, translation-ready, wide-blocks, grid-layout

A clean, image-first portfolio theme for photographers and visual creatives, featuring switchable gallery layouts, EXIF details, case-study project pages, and client proofing tools.

== Description ==

StoryFrame is a minimalist WordPress theme built for photographers, designers, and visual creatives who want their work to speak for itself. Key features include:

* **Flexible Gallery Layouts:** Choose between fluid masonry, uniform cropped grid, or justified rows (2 to 4 columns) via the Customizer.
* **Case-Study Project Pages:** Every post or page renders in a distraction-free single-project layout — add client, location, date, or gear details as part of your own post content (a paragraph, list, or table block at the top of the post) alongside your images.
* **Automatic EXIF Badges:** Displays camera metadata (aperture, shutter speed, ISO, focal length) directly from WordPress's native media library data, with no external API calls.
* **Client Proofing Tools:** Password-protected posts allow clients to mark favorites and export a plain-text list. This is handled securely client-side via `localStorage`; no data is sent to your server.
* **Light & Dark Modes:** Matches system preferences by default, with an optional header toggle.
* **Core WordPress Features:** Full support for custom logos, primary/footer menus, widget areas, wide/full block alignment, and translation readiness.

== Installation ==

1. In your WordPress admin, go to Appearance > Themes > Add New and search for "StoryFrame", or upload the theme .zip file.
2. Activate the theme.
3. Go to Appearance > Customize > Portfolio Layout to configure your gallery style, columns, and EXIF settings.
4. Go to Appearance > Menus to assign your Primary and Footer menus.
5. Create posts (used as "projects") with a featured image; add any case-study details — client, location, gear, and so on — directly in the post content alongside your images.

== Frequently Asked Questions ==

= Does StoryFrame require any plugins? =
No. Every feature works with WordPress core functionality alone.

= Where does the EXIF data come from? =
It is read directly from the image metadata WordPress extracts and stores when you upload a JPEG. If an image lacks EXIF data, the badge is simply not displayed.

= Is client favorite data sent to the server? =
No. Favorite selections are stored only in the visitor's browser (`localStorage`) and are compiled into a downloadable `.txt` file entirely client-side. StoryFrame does not transmit, log, or store this information on the server.

= Does this theme support the block editor? =
Yes. StoryFrame is a classic PHP-based theme with full block editor (Gutenberg) content support, editor styles, and wide/full alignment support. It is not a Full Site Editing (FSE) theme.

= How do I change the gallery layout or columns? =
Navigate to Appearance > Customize > Portfolio Layout.

== Privacy ==

StoryFrame uses browser `localStorage` for two features. No data is ever transmitted to or read by your server:

* `storyframeMode`: Saves the visitor's light or dark mode preference.
* `storyframeFavorites`: When a visitor marks a photo as a favorite, saves that photo's attachment ID, title, and permalink, plus the time it was picked (used only to preserve pick order in the exported list).

Both keys are scoped to your site's origin and are cleared if the visitor clears their browser storage.

== Resources ==

* Based on the Underscores starter theme (https://underscores.me/), (C)2012-2023 Automattic, Inc., licensed under GPLv2 or later.
* Icons use Dashicons, the icon font bundled with WordPress core. The theme enqueues it on the front end but does not bundle a separate copy.
* No third-party JavaScript libraries, web fonts, remote CDN resources, analytics, or tracking are loaded by this theme.
* `screenshot.png` is original artwork created for this theme. Demo images sourced via FakerPress use Lorem Picsum (Unsplash License) and Placehold.co (Public Domain).

== Changelog ==

= 1.0.6 =
* Fixed favourites export showing "Photo #ID" for every photo instead of its real title. The label lookup used a single CSS selector list (`h2, h3, figcaption, img`), which matches whichever element appears first in DOM order rather than first in the list - and the grid markup's `<img>` sits before its `<h3>`, so it was always grabbing the (usually alt-less) thumbnail instead of the title.
* Favourites export now lists photos in the order they were picked instead of ascending attachment-ID order. (Numeric-string object keys always iterate in ascending order in JS regardless of insertion order, which was silently reshuffling the exported list.)
* Favourites export now includes a permalink to each favourited photo's project page, so the exported list is clickable rather than just a title + internal ID.

= 1.0.5 =
* Trapped keyboard focus inside the open mobile menu: tabbing forward from the last menu link now wraps to the hamburger/close button, and shift+tabbing back from that button wraps to the last link, instead of tabbing out into the page behind the still-open menu. The hamburger button's accessible label now also switches between "Menu" and "Close menu" to match its state.
* Removed unused `.sf-project-meta` CSS left over after the Project Details meta box was removed in 1.0.4.

= 1.0.4 =
* Fixed mobile submenu width and positioning to span the full header.
* Fixed desktop dropdown hover gap to prevent premature closing.
* Removed custom PHP nav walker in favor of a JS-enhanced core walker for better compatibility and security.
* Replaced inline SVG icons with core Dashicons for consistent rendering.
* Fixed Customizer string escape characters.
* Rebuilt footer styling for proper horizontal menu layout and widget separation.
* Improved mobile hamburger button accessibility and DOM order.
* Added CSS support for legacy WordPress alignment classes (`.alignleft`, `.wp-caption`, etc.).
* Removed unapproved theme tags (`dark-mode`, `block-patterns`, `block-styles`).

= 1.0.3 =
* Initial release.

== License ==

StoryFrame WordPress Theme, Copyright 2026 Bikram.
StoryFrame is distributed under the terms of the GNU General Public License, version 2, or (at your option) any later version.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; see the LICENSE.txt file included with this theme for the full license text.