From 307fc6d424e5fd5d4568a32357ab131b67cf7f49 Mon Sep 17 00:00:00 2001 From: acodebeard Date: Sun, 10 May 2026 10:25:19 -0700 Subject: [PATCH 01/26] Add frontend browser smoke coverage --- .github/workflows/plugin-quality.yml | 25 ++ .gitignore | 2 + docs/QA.md | 45 +++ docs/README.md | 7 +- package-lock.json | 76 ++++ package.json | 11 + playwright.config.js | 26 ++ .../tests/BrowserSmokeGoogleApiClient.php | 179 +++++++++ .../tests/browser-app/bootstrap.php | 370 ++++++++++++++++++ .../tests/browser-app/router.php | 215 ++++++++++ tests/browser/planner.spec.js | 182 +++++++++ 11 files changed, 1135 insertions(+), 3 deletions(-) create mode 100644 docs/QA.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 playwright.config.js create mode 100644 plugin/plan-your-day/tests/BrowserSmokeGoogleApiClient.php create mode 100644 plugin/plan-your-day/tests/browser-app/bootstrap.php create mode 100644 plugin/plan-your-day/tests/browser-app/router.php create mode 100644 tests/browser/planner.spec.js diff --git a/.github/workflows/plugin-quality.yml b/.github/workflows/plugin-quality.yml index 1a31959..4f63526 100644 --- a/.github/workflows/plugin-quality.yml +++ b/.github/workflows/plugin-quality.yml @@ -64,6 +64,31 @@ jobs: - run: composer phpunit + browser-smoke: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: shivammathur/setup-php@v2 + with: + php-version: "8.2" + coverage: none + + - uses: ramsey/composer-install@v3 + with: + working-directory: plugin/plan-your-day + + - uses: actions/setup-node@v4 + with: + node-version: "22" + cache: npm + + - run: npm ci + + - run: npx playwright install --with-deps chromium + + - run: npm run browser-smoke + plugin-check: runs-on: ubuntu-latest steps: diff --git a/.gitignore b/.gitignore index 8484c0d..2589387 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ Thumbs.db node_modules/ vendor/ plugin/plan-your-day/.phpunit.cache/ +playwright-report/ +test-results/ diff --git a/docs/QA.md b/docs/QA.md new file mode 100644 index 0000000..a437bf4 --- /dev/null +++ b/docs/QA.md @@ -0,0 +1,45 @@ +# Frontend QA + +Plan Your Day keeps a lightweight browser smoke suite for the public planner +frontend. The suite focuses on the shipped shortcode and block entry points, +the same-site REST flow, and a small set of accessibility-sensitive +interactions. + +## Automated Smoke Coverage + +- Plain-page asset scoping: the planner CSS/JS do not load on pages without a + planner render. +- Shortcode render: the frontend loads, the category browse flow works, and the + public JS boots without browser-console errors. +- Block render: the dynamic block renders through the same frontend JS path and + can browse categories successfully. +- Core trip flow: category browse, load-more, add waypoint, reorder, remove, + and clear-trip actions complete through the real REST endpoints. +- Focus-sensitive behavior: route mutations restore focus to a useful control + after add, reorder, remove, and clear-trip actions. +- Narrow-viewport interaction: the start-options toggle can be collapsed and + reopened in a mobile-sized viewport. + +The browser harness uses a tiny PHP app and deterministic fake Google data. It +does not replace WordPress integration or external Google API validation; it is +meant to catch frontend regressions in the plugin's own public flow. + +## Local Run + +From the repo root: + +```bash +cd plugin/plan-your-day +composer install +cd ../.. +npm ci +npx playwright install chromium +npm run browser-smoke +``` + +## CI Expectation + +The GitHub `Plugin Quality` workflow runs the browser smoke suite in the +`browser-smoke` job. Public frontend changes should keep that job green and +should update the smoke harness when entry points, selectors, or planner +interaction flow change. diff --git a/docs/README.md b/docs/README.md index 9b8c02e..cef3aa6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,8 +2,8 @@ This directory documents the WordPress plugin as it exists today. The plugin is installable and has admin/settings, Google API, cache, planner helper, planner -state, shortcode and block rendering, REST endpoints, assets, and release zip -packaging in place. Broader production QA automation is still in progress. +state, shortcode and block rendering, REST endpoints, assets, release zip +packaging, and browser smoke automation in place. ## Current Documents @@ -15,6 +15,8 @@ packaging in place. Broader production QA automation is still in progress. tools, and the Google API test workflow. - [Release Process](RELEASES.md): version metadata alignment, changelog expectations, and the manual GitHub release zip workflow. +- [Frontend QA](QA.md): browser smoke coverage, local run steps, and ongoing + public frontend QA expectations. - [Architecture](ARCHITECTURE.md): plugin layers, current service boundaries, and current runtime structure. - [Settings](SETTINGS.md): option name, settings groups, defaults, API keys, @@ -31,7 +33,6 @@ land: - REST endpoint request/response reference. - Anonymous visitor token details. -- Production QA and accessibility notes. ## Historical Planning Notes diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..63106c7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,76 @@ +{ + "name": "plan-your-day-qa", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "plan-your-day-qa", + "devDependencies": { + "@playwright/test": "1.59.1" + } + }, + "node_modules/@playwright/test": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..653b1de --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "plan-your-day-qa", + "private": true, + "description": "Browser smoke tests for the Plan Your Day plugin repository.", + "scripts": { + "browser-smoke": "playwright test" + }, + "devDependencies": { + "@playwright/test": "1.59.1" + } +} diff --git a/playwright.config.js b/playwright.config.js new file mode 100644 index 0000000..3921fa0 --- /dev/null +++ b/playwright.config.js @@ -0,0 +1,26 @@ +const { defineConfig } = require('@playwright/test'); + +const baseURL = process.env.PLAN_YOUR_DAY_BROWSER_BASE_URL || 'http://127.0.0.1:9080'; + +module.exports = defineConfig({ + testDir: './tests/browser', + fullyParallel: false, + timeout: 30_000, + expect: { + timeout: 5_000, + }, + use: { + baseURL, + trace: 'on-first-retry', + }, + webServer: { + command: + 'mkdir -p tmp && rm -f tmp/plan-your-day-browser-state.json && ' + + `PLAN_YOUR_DAY_BROWSER_BASE_URL=${baseURL} ` + + 'PLAN_YOUR_DAY_BROWSER_STATE_FILE=tmp/plan-your-day-browser-state.json ' + + 'php -S 127.0.0.1:9080 -t . plugin/plan-your-day/tests/browser-app/router.php', + url: `${baseURL}/__health`, + reuseExistingServer: !process.env.CI, + timeout: 30_000, + }, +}); diff --git a/plugin/plan-your-day/tests/BrowserSmokeGoogleApiClient.php b/plugin/plan-your-day/tests/BrowserSmokeGoogleApiClient.php new file mode 100644 index 0000000..cff605d --- /dev/null +++ b/plugin/plan-your-day/tests/BrowserSmokeGoogleApiClient.php @@ -0,0 +1,179 @@ + [], + ] + ); + } + + return GoogleApiResult::success( $pages[ $query ][ $page_key ] ); + } + + public function place_details( string $place_id, ?int $timeout = null ): GoogleApiResult { + unset( $timeout ); + + $place_id = PlaceParser::sanitize_place_id( $place_id ); + $places = self::places(); + + if ( '' === $place_id || ! isset( $places[ $place_id ] ) ) { + return GoogleApiResult::failure( + 'place_details_unavailable', + __( 'Google place details are unavailable right now.', 'plan-your-day' ), + 404, + false + ); + } + + return GoogleApiResult::success( + [ + 'place' => $places[ $place_id ], + ] + ); + } + + public function geocode( string $address ): GoogleApiResult { + $address = trim( sanitize_text_field( $address ) ); + + if ( '' === $address ) { + return GoogleApiResult::failure( + 'geocoding_unavailable', + __( 'Google geocoding is unavailable right now.', 'plan-your-day' ), + 0, + false + ); + } + + return GoogleApiResult::success( + [ + 'latitude' => 37.7749, + 'longitude' => -122.4194, + ] + ); + } + + /** + * @return array>, nextPageToken?: string}>> + */ + private static function text_search_pages(): array { + $places = self::places(); + + return [ + 'coffee shops and cafes near test harbor' => [ + '__first__' => [ + 'places' => [ + $places['coffee-1'], + $places['coffee-2'], + ], + 'nextPageToken' => 'coffee-page-2', + ], + 'coffee-page-2' => [ + 'places' => [ + $places['coffee-1'], + $places['coffee-2'], + $places['coffee-3'], + $places['coffee-4'], + ], + ], + ], + 'restaurants and local food near test harbor' => [ + '__first__' => [ + 'places' => [ + $places['food-1'], + $places['food-2'], + ], + ], + ], + ]; + } + + /** + * @return array> + */ + private static function places(): array { + return [ + 'coffee-1' => self::place( + 'coffee-1', + 'Harbor Coffee', + '100 Pier Street', + 37.7762, + -122.4170 + ), + 'coffee-2' => self::place( + 'coffee-2', + 'Sunrise Cafe', + '240 Market Lane', + 37.7784, + -122.4152 + ), + 'coffee-3' => self::place( + 'coffee-3', + 'Coastal Roasters', + '410 Bay Avenue', + 37.7801, + -122.4138 + ), + 'coffee-4' => self::place( + 'coffee-4', + 'Boardwalk Espresso', + '520 Harbor Walk', + 37.7818, + -122.4119 + ), + 'food-1' => self::place( + 'food-1', + 'Harbor Bistro', + '85 Main Street', + 37.7756, + -122.4181 + ), + 'food-2' => self::place( + 'food-2', + 'Market Kitchen', + '310 Dock Square', + 37.7773, + -122.4160 + ), + ]; + } + + /** + * @return array{ + * id: string, + * label: string, + * address: string, + * maps_uri: string, + * latitude: float, + * longitude: float + * } + */ + private static function place( string $id, string $label, string $address, float $latitude, float $longitude ): array { + return [ + 'id' => $id, + 'label' => $label, + 'address' => $address, + 'maps_uri' => 'https://maps.example.test/place/' . rawurlencode( $id ), + 'latitude' => $latitude, + 'longitude' => $longitude, + ]; + } +} diff --git a/plugin/plan-your-day/tests/browser-app/bootstrap.php b/plugin/plan-your-day/tests/browser-app/bootstrap.php new file mode 100644 index 0000000..c9f91a8 --- /dev/null +++ b/plugin/plan-your-day/tests/browser-app/bootstrap.php @@ -0,0 +1,370 @@ + $default ) { + $normalized[ $key ] = array_key_exists( $key, $atts ) ? $atts[ $key ] : $default; + } + + return $normalized; + } +} + +if ( ! function_exists( 'wp_unique_id' ) ) { + function wp_unique_id( string $prefix = '' ): string { + $GLOBALS['plan_your_day_browser_unique_id'] = (int) ( $GLOBALS['plan_your_day_browser_unique_id'] ?? 0 ) + 1; + + return $prefix . $GLOBALS['plan_your_day_browser_unique_id']; + } +} + +if ( ! function_exists( 'number_format_i18n' ) ) { + function number_format_i18n( float $number, int $decimals = 0 ): string { + return number_format( $number, $decimals, '.', ',' ); + } +} + +if ( ! function_exists( 'current_user_can' ) ) { + function current_user_can( string $capability ): bool { + unset( $capability ); + + return false; + } +} + +if ( ! function_exists( 'admin_url' ) ) { + function admin_url( string $path = '' ): string { + return plan_your_day_browser_join_url( plan_your_day_browser_base_url() . '/wp-admin', $path ); + } +} + +if ( ! function_exists( 'home_url' ) ) { + function home_url( string $path = '' ): string { + return plan_your_day_browser_join_url( plan_your_day_browser_base_url(), $path ); + } +} + +if ( ! function_exists( 'rest_url' ) ) { + function rest_url( string $path = '' ): string { + return plan_your_day_browser_join_url( plan_your_day_browser_base_url() . '/wp-json', $path ); + } +} + +if ( ! function_exists( 'get_queried_object_id' ) ) { + function get_queried_object_id(): int { + return 0; + } +} + +if ( ! function_exists( 'get_permalink' ) ) { + function get_permalink( int $post_id ): string|false { + unset( $post_id ); + + return false; + } +} + +if ( ! function_exists( 'wp_register_style' ) ) { + function wp_register_style( string $handle, string $src = '', array $deps = [], string|bool|null $ver = false, string $media = 'all' ): void { + $GLOBALS['plan_your_day_browser_registered_styles'][ $handle ] = [ + 'src' => $src, + 'deps' => $deps, + 'ver' => $ver, + 'media' => $media, + ]; + } +} + +if ( ! function_exists( 'wp_register_script' ) ) { + function wp_register_script( string $handle, string $src = '', array $deps = [], string|bool|null $ver = false, array|bool $args = [] ): void { + $GLOBALS['plan_your_day_browser_registered_scripts'][ $handle ] = [ + 'src' => $src, + 'deps' => $deps, + 'ver' => $ver, + 'args' => $args, + ]; + } +} + +if ( ! function_exists( 'wp_enqueue_style' ) ) { + function wp_enqueue_style( string $handle, string $src = '', array $deps = [], string|bool|null $ver = false, string $media = 'all' ): void { + $registered = $GLOBALS['plan_your_day_browser_registered_styles'][ $handle ] ?? []; + + $GLOBALS['plan_your_day_browser_enqueued_styles'][ $handle ] = [ + 'src' => '' !== $src ? $src : (string) ( $registered['src'] ?? '' ), + 'deps' => [] !== $deps ? $deps : (array) ( $registered['deps'] ?? [] ), + 'ver' => false !== $ver ? $ver : ( $registered['ver'] ?? false ), + 'media' => 'all' !== $media ? $media : (string) ( $registered['media'] ?? 'all' ), + ]; + } +} + +if ( ! function_exists( 'wp_enqueue_script' ) ) { + function wp_enqueue_script( string $handle, string $src = '', array $deps = [], string|bool|null $ver = false, array|bool $args = [] ): void { + $registered = $GLOBALS['plan_your_day_browser_registered_scripts'][ $handle ] ?? []; + + $GLOBALS['plan_your_day_browser_enqueued_scripts'][ $handle ] = [ + 'src' => '' !== $src ? $src : (string) ( $registered['src'] ?? '' ), + 'deps' => [] !== $deps ? $deps : (array) ( $registered['deps'] ?? [] ), + 'ver' => false !== $ver ? $ver : ( $registered['ver'] ?? false ), + 'args' => [] !== $args ? $args : (array) ( $registered['args'] ?? [] ), + ]; + } +} + +function plan_your_day_browser_base_url(): string { + $base_url = getenv( 'PLAN_YOUR_DAY_BROWSER_BASE_URL' ); + + if ( is_string( $base_url ) && '' !== trim( $base_url ) ) { + return rtrim( trim( $base_url ), '/' ); + } + + $scheme = ! empty( $_SERVER['HTTPS'] ) && 'off' !== (string) $_SERVER['HTTPS'] ? 'https' : 'http'; + $host = trim( (string) ( $_SERVER['HTTP_HOST'] ?? '127.0.0.1:9080' ) ); + + return $scheme . '://' . $host; +} + +function plan_your_day_browser_state_file(): string { + $state_file = getenv( 'PLAN_YOUR_DAY_BROWSER_STATE_FILE' ); + + if ( is_string( $state_file ) && '' !== trim( $state_file ) ) { + return trim( $state_file ); + } + + return dirname( __DIR__, 4 ) . '/tmp/plan-your-day-browser-state.json'; +} + +function plan_your_day_browser_join_url( string $base, string $path = '' ): string { + $base = rtrim( $base, '/' ); + $path = ltrim( $path, '/' ); + + return '' === $path ? $base : $base . '/' . $path; +} + +function plan_your_day_browser_default_options(): array { + $defaults = \Acodebeard\PlanYourDay\Settings\Settings::defaults(); + $defaults['default_location_label'] = 'Test Harbor'; + $defaults['default_location_address'] = 'Test Harbor'; + $defaults['default_location_latitude'] = '37.7749'; + $defaults['default_location_longitude'] = '-122.4194'; + $defaults['map_preview_enabled'] = false; + $defaults['maps_handoff_enabled'] = true; + $defaults['categories'] = \Acodebeard\PlanYourDay\Settings\Settings::default_categories(); + + return $defaults; +} + +function plan_your_day_browser_seed_state(): array { + return [ + 'options' => [ + \Acodebeard\PlanYourDay\Settings\Settings::OPTION_NAME => plan_your_day_browser_default_options(), + 'plan_your_day_schema_version' => PLAN_YOUR_DAY_SCHEMA_VERSION, + 'plan_your_day_version' => PLAN_YOUR_DAY_VERSION, + ], + 'transients' => [], + 'object_cache' => [], + ]; +} + +function plan_your_day_browser_load_state(): void { + $seed_state = plan_your_day_browser_seed_state(); + $state = $seed_state; + $state_file = plan_your_day_browser_state_file(); + + if ( is_file( $state_file ) ) { + $decoded = json_decode( (string) file_get_contents( $state_file ), true ); + + if ( is_array( $decoded ) ) { + $state = array_merge( $seed_state, $decoded ); + $state['options'] = is_array( $decoded['options'] ?? null ) ? array_merge( $seed_state['options'], $decoded['options'] ) : $seed_state['options']; + $state['transients'] = is_array( $decoded['transients'] ?? null ) ? $decoded['transients'] : []; + $state['object_cache'] = is_array( $decoded['object_cache'] ?? null ) ? $decoded['object_cache'] : []; + } + } + + $GLOBALS['plan_your_day_test_options'] = $state['options']; + $GLOBALS['plan_your_day_test_transients'] = $state['transients']; + $GLOBALS['plan_your_day_test_object_cache'] = $state['object_cache']; + $GLOBALS['plan_your_day_use_ext_object_cache'] = false; + $GLOBALS['plan_your_day_test_filters'] = []; + $GLOBALS['plan_your_day_test_actions'] = []; + $GLOBALS['plan_your_day_test_option_reads'] = []; +} + +function plan_your_day_browser_persist_state(): void { + $state_file = plan_your_day_browser_state_file(); + $directory = dirname( $state_file ); + + if ( ! is_dir( $directory ) ) { + mkdir( $directory, 0777, true ); + } + + file_put_contents( + $state_file, + (string) wp_json_encode( + [ + 'options' => $GLOBALS['plan_your_day_test_options'] ?? [], + 'transients' => $GLOBALS['plan_your_day_test_transients'] ?? [], + 'object_cache' => $GLOBALS['plan_your_day_test_object_cache'] ?? [], + ] + ) + ); +} + +function plan_your_day_browser_reset_state(): void { + $state_file = plan_your_day_browser_state_file(); + + if ( is_file( $state_file ) ) { + unlink( $state_file ); + } + + plan_your_day_browser_load_state(); +} + +function plan_your_day_browser_render_styles(): string { + $markup = ''; + + foreach ( (array) ( $GLOBALS['plan_your_day_browser_enqueued_styles'] ?? [] ) as $style ) { + $src = plan_your_day_browser_versioned_src( (string) ( $style['src'] ?? '' ), $style['ver'] ?? false ); + + if ( '' === $src ) { + continue; + } + + $media = (string) ( $style['media'] ?? 'all' ); + $markup .= sprintf( + "\n", + esc_url( $src ), + esc_attr( $media ) + ); + } + + return $markup; +} + +function plan_your_day_browser_render_scripts(): string { + $markup = ''; + + foreach ( (array) ( $GLOBALS['plan_your_day_browser_enqueued_scripts'] ?? [] ) as $script ) { + $src = plan_your_day_browser_versioned_src( (string) ( $script['src'] ?? '' ), $script['ver'] ?? false ); + + if ( '' === $src ) { + continue; + } + + $args = is_array( $script['args'] ?? null ) ? $script['args'] : []; + $attributes = []; + + if ( 'defer' === ( $args['strategy'] ?? '' ) ) { + $attributes[] = 'defer'; + } + + $markup .= sprintf( + "\n", + esc_url( $src ), + [] === $attributes ? '' : ' ' . implode( ' ', $attributes ) + ); + } + + return $markup; +} + +function plan_your_day_browser_versioned_src( string $src, string|bool|null $version ): string { + $src = trim( $src ); + + if ( '' === $src ) { + return ''; + } + + if ( false === $version || null === $version || '' === $version ) { + return $src; + } + + return add_query_arg( + [ + 'ver' => (string) $version, + ], + $src + ); +} diff --git a/plugin/plan-your-day/tests/browser-app/router.php b/plugin/plan-your-day/tests/browser-app/router.php new file mode 100644 index 0000000..a1f6853 --- /dev/null +++ b/plugin/plan-your-day/tests/browser-app/router.php @@ -0,0 +1,215 @@ +register(); + + $planner_renderer = new PlannerRenderer( + $settings, + $category_catalog, + $request_state_parser, + $planner_state_builder, + $planner_payload_builder, + $visitor_token_manager + ); + + $planner_routes = new PlannerRoutes( + $request_state_parser, + $planner_state_builder, + $planner_payload_builder, + $request_origin_validator, + $visitor_token_manager, + new RateLimiter( $settings, new ClientIpResolver( $settings ) ), + $settings + ); + + $app = [ + 'shortcode' => new PlannerShortcode( $planner_renderer, $frontend_assets ), + 'block' => new PlannerBlock( $planner_renderer, $frontend_assets ), + 'routes' => $planner_routes, + ]; + + return $app; +} + +function plan_your_day_browser_render_page( string $page ): void { + $app = plan_your_day_browser_app(); + $base_url = plan_your_day_browser_base_url(); + $title = 'Plan Your Day Browser Smoke'; + $content = '

Plan Your Day Browser Smoke

No planner is rendered on this page.

'; + + if ( 'shortcode' === $page ) { + $title = 'Plan Your Day Shortcode Smoke'; + $content = $app['shortcode']->render( + [ + 'action_url' => $base_url . '/shortcode', + ] + ); + } elseif ( 'block' === $page ) { + $title = 'Plan Your Day Block Smoke'; + $content = $app['block']->render( + [ + 'actionUrl' => $base_url . '/block', + ] + ); + } + + header( 'Content-Type: text/html; charset=utf-8' ); + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '' . esc_html( $title ) . ''; + echo plan_your_day_browser_render_styles(); + echo ''; + echo ''; + echo $content; + echo plan_your_day_browser_render_scripts(); + echo ''; + echo ''; +} + +function plan_your_day_browser_dispatch_rest( string $route_name ): void { + $app = plan_your_day_browser_app(); + $body = (string) file_get_contents( 'php://input' ); + $decoded = json_decode( $body, true ); + $params = is_array( $decoded ) ? $decoded : []; + $request = new WP_REST_Request( 'POST', '/plan-your-day/v1/' . $route_name ); + + foreach ( $params as $key => $value ) { + $request->set_param( (string) $key, $value ); + } + + $result = 'browse' === $route_name + ? $app['routes']->browse( $request ) + : $app['routes']->route( $request ); + + if ( $result instanceof WP_Error ) { + plan_your_day_browser_send_json( + [ + 'code' => $result->get_error_code(), + 'message' => $result->get_error_message(), + 'data' => $result->get_error_data(), + ], + (int) ( $result->get_error_data()['status'] ?? 500 ) + ); + return; + } + + if ( $result instanceof WP_REST_Response ) { + plan_your_day_browser_send_json( $result->get_data(), $result->get_status() ); + return; + } + + plan_your_day_browser_send_json( [], 500 ); +} + +function plan_your_day_browser_send_json( array $data, int $status = 200 ): void { + http_response_code( $status ); + header( 'Content-Type: application/json; charset=utf-8' ); + echo (string) wp_json_encode( $data ); +} + +function plan_your_day_browser_send_text( string $text, int $status = 200 ): void { + http_response_code( $status ); + header( 'Content-Type: text/plain; charset=utf-8' ); + echo $text; +} diff --git a/tests/browser/planner.spec.js b/tests/browser/planner.spec.js new file mode 100644 index 0000000..3f8a1d7 --- /dev/null +++ b/tests/browser/planner.spec.js @@ -0,0 +1,182 @@ +const { test, expect } = require('@playwright/test'); + +function trackBrowserErrors(page) { + const errors = []; + + page.on('console', (message) => { + if (message.type() === 'error') { + errors.push(message.text()); + } + }); + + page.on('pageerror', (error) => { + errors.push(error.message); + }); + + return async () => { + expect(errors).toEqual([]); + }; +} + +function isPlannerResponse(response, routeName) { + if (response.request().method() !== 'POST') { + return false; + } + + return new URL(response.url()).pathname === `/wp-json/plan-your-day/v1/${routeName}`; +} + +async function waitForPlannerResponse(page, routeName, action) { + const [response] = await Promise.all([ + page.waitForResponse((candidate) => isPlannerResponse(candidate, routeName)), + action(), + ]); + + expect(response.ok()).toBeTruthy(); + + return response; +} + +test.beforeEach(async ({ request }) => { + const response = await request.post('/__reset'); + expect(response.status()).toBe(204); +}); + +test('planner assets stay scoped to planner renders', async ({ page }) => { + const assertNoBrowserErrors = trackBrowserErrors(page); + + await page.goto('/plain'); + await expect(page.locator('[data-plan-root]')).toHaveCount(0); + await expect(page.locator('link[href*="plan.min.css"]')).toHaveCount(0); + await expect(page.locator('script[src*="plan.min.js"]')).toHaveCount(0); + + await page.goto('/shortcode'); + await expect(page.locator('[data-plan-root]')).toBeVisible(); + await expect(page.locator('link[href*="plan.min.css"]')).toHaveCount(1); + await expect(page.locator('script[src*="plan.min.js"]')).toHaveCount(1); + + await page.goto('/block'); + await expect(page.locator('[data-plan-root]')).toBeVisible(); + await expect(page.locator('link[href*="plan.min.css"]')).toHaveCount(1); + await expect(page.locator('script[src*="plan.min.js"]')).toHaveCount(1); + + await assertNoBrowserErrors(); +}); + +test('shortcode planner covers browse, load more, add, reorder, remove, and clear-trip flow', async ({ + page, +}) => { + const assertNoBrowserErrors = trackBrowserErrors(page); + + await page.goto('/shortcode'); + await expect(page.locator('[data-plan-root]')).toBeVisible(); + await expect(page.locator('[data-plan-start-toggle]')).toBeVisible(); + + const coffeeButton = page.locator('[data-plan-category-button][data-category-key="coffee"]'); + await coffeeButton.focus(); + await waitForPlannerResponse(page, 'browse', () => page.keyboard.press('Enter')); + + const results = page.locator('[data-plan-results-list] > li'); + await expect(results).toHaveCount(2); + await expect(results.nth(0)).toContainText('Harbor Coffee'); + await expect(results.nth(1)).toContainText('Sunrise Cafe'); + await expect(page.locator('[data-plan-load-more-button]')).toBeVisible(); + + await waitForPlannerResponse(page, 'browse', () => + page.locator('[data-plan-load-more-button]').click() + ); + + await expect(results).toHaveCount(4); + await expect(results.nth(2)).toContainText('Coastal Roasters'); + await expect(results.nth(3)).toContainText('Boardwalk Espresso'); + await expect(page.locator('[data-plan-load-more-button]')).toHaveCount(0); + + await waitForPlannerResponse(page, 'route', () => + page.locator('[data-plan-results-list] button[data-place-id="coffee-1"]').click() + ); + + const tripItems = page.locator('[data-plan-trip-list] > li'); + await expect(tripItems).toHaveCount(1); + await expect(tripItems.nth(0)).toContainText('Harbor Coffee'); + await expect( + page.locator('[data-waypoint-id="coffee-1"] button[name="remove_waypoint"]') + ).toBeFocused(); + + await waitForPlannerResponse(page, 'route', () => + page.locator('[data-plan-results-list] button[data-place-id="coffee-2"]').click() + ); + + await expect(tripItems).toHaveCount(2); + await expect(tripItems.nth(1)).toContainText('Sunrise Cafe'); + await expect( + page.locator('[data-waypoint-id="coffee-2"] button[name="remove_waypoint"]') + ).toBeFocused(); + + await waitForPlannerResponse(page, 'route', () => + page.locator('button[name="move_waypoint"][value="coffee-2:up"]').click() + ); + + await expect(tripItems.nth(0)).toContainText('Sunrise Cafe'); + await expect(page.locator('[data-plan-trip-heading]')).toBeFocused(); + + await waitForPlannerResponse(page, 'route', () => + page.locator('[data-waypoint-id="coffee-1"] button[name="remove_waypoint"]').click() + ); + + await expect(tripItems).toHaveCount(1); + await expect(tripItems.nth(0)).toContainText('Sunrise Cafe'); + await expect( + page.locator('[data-waypoint-id="coffee-2"] button[name="remove_waypoint"]') + ).toBeFocused(); + + await waitForPlannerResponse(page, 'route', () => page.locator('[data-plan-clear-trip]').click()); + + await expect(page.locator('[data-plan-trip-empty]')).toBeVisible(); + await expect(page.locator('[data-plan-trip-heading]')).toBeFocused(); + + await assertNoBrowserErrors(); +}); + +test('block render boots the planner and category browse works', async ({ page }) => { + const assertNoBrowserErrors = trackBrowserErrors(page); + + await page.goto('/block'); + await expect(page.locator('[data-plan-root]')).toBeVisible(); + await expect(page.locator('[data-plan-start-toggle]')).toBeVisible(); + + await waitForPlannerResponse(page, 'browse', () => + page.locator('[data-plan-category-button][data-category-key="food"]').click() + ); + + await expect(page.locator('[data-plan-results-list]')).toContainText('Harbor Bistro'); + await expect(page.locator('[data-plan-results-list]')).toContainText('Market Kitchen'); + + await assertNoBrowserErrors(); +}); + +test('start options toggle stays usable in a narrow viewport', async ({ page }) => { + const assertNoBrowserErrors = trackBrowserErrors(page); + + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto('/shortcode'); + + const toggle = page.locator('[data-plan-start-toggle]'); + const panel = page.locator('[data-plan-start-panel]'); + + await expect(toggle).toBeVisible(); + await expect(toggle).toHaveAttribute('aria-expanded', 'true'); + await expect(panel).toBeVisible(); + + await toggle.focus(); + await page.keyboard.press('Enter'); + + await expect(toggle).toHaveAttribute('aria-expanded', 'false'); + await expect(panel).toBeHidden(); + + await page.keyboard.press('Enter'); + + await expect(toggle).toHaveAttribute('aria-expanded', 'true'); + await expect(panel).toBeVisible(); + + await assertNoBrowserErrors(); +}); From 26aa61577a8105a1cbbb413fb3872d8a0e495ba1 Mon Sep 17 00:00:00 2001 From: acodebeard Date: Fri, 5 Jun 2026 15:43:51 -0700 Subject: [PATCH 02/26] Prepare Plan Your Day 0.5 release --- README.md | 2 +- docs/INSTALLATION.md | 2 +- .../assets/css/admin-settings.css | 101 +++- plugin/plan-your-day/assets/css/plan.css | 511 ++++++++++++++---- plugin/plan-your-day/assets/css/plan.min.css | 2 +- .../fonts/noto-sans-v42-latin-ext-300.woff2 | Bin 0 -> 65056 bytes .../fonts/noto-sans-v42-latin-ext-700.woff2 | Bin 0 -> 66844 bytes .../noto-sans-v42-latin-ext-regular.woff2 | Bin 0 -> 63032 bytes plugin/plan-your-day/assets/js/plan.js | 193 ++++--- plugin/plan-your-day/assets/js/plan.min.js | 2 +- plugin/plan-your-day/plan-your-day.php | 6 +- plugin/plan-your-day/readme.txt | 6 +- plugin/plan-your-day/release.json | 6 +- .../plan-your-day/src/Admin/SettingsPage.php | 220 +++++++- .../src/Frontend/InitialPlannerHydration.php | 30 +- .../src/Frontend/InterfaceCopy.php | 467 +--------------- .../src/Frontend/PlannerRenderer.php | 158 +++--- .../src/Planner/PlannerPayloadBuilder.php | 14 +- .../src/Planner/PlannerStateBuilder.php | 29 +- .../src/Planner/StartContextResolver.php | 16 +- .../plan-your-day/src/Settings/Settings.php | 54 +- plugin/plan-your-day/tests/ActivatorTest.php | 4 +- .../tests/InitialPlannerHydrationTest.php | 76 ++- .../plan-your-day/tests/InterfaceCopyTest.php | 10 +- .../plan-your-day/tests/PlannerBlockTest.php | 80 +++ .../tests/PlannerStateBuilderTest.php | 169 ++++++ .../plan-your-day/tests/SettingsPageTest.php | 202 ++++++- plugin/plan-your-day/tests/SettingsTest.php | 203 ++++++- plugin/plan-your-day/tests/bootstrap.php | 2 +- .../tests/browser-app/router.php | 14 + tests/browser/planner.spec.js | 93 ++++ 31 files changed, 1820 insertions(+), 852 deletions(-) create mode 100644 plugin/plan-your-day/assets/fonts/noto-sans-v42-latin-ext-300.woff2 create mode 100644 plugin/plan-your-day/assets/fonts/noto-sans-v42-latin-ext-700.woff2 create mode 100644 plugin/plan-your-day/assets/fonts/noto-sans-v42-latin-ext-regular.woff2 diff --git a/README.md b/README.md index 6ce452d..9977a80 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ From `plugin/plan-your-day/`, build an installable WordPress admin zip with: ./tools/build-release-zip.sh ``` -The script creates `dist/plan-your-day-0.1.0.zip` at the repository root, +The script creates `dist/plan-your-day-0.5.zip` at the repository root, installs production-only Composer autoload files into a temporary staging copy, and packages the final artifact with a top-level `plan-your-day/` directory suitable for **Plugins > Add New > Upload Plugin**. diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index 3f206c2..1963222 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -91,5 +91,5 @@ cd plugin/plan-your-day ./tools/build-release-zip.sh ``` -The script writes `dist/plan-your-day-0.1.0.zip` at the repository root, which +The script writes `dist/plan-your-day-0.5.zip` at the repository root, which can be uploaded through the WordPress Plugins screen. diff --git a/plugin/plan-your-day/assets/css/admin-settings.css b/plugin/plan-your-day/assets/css/admin-settings.css index d0b67d5..79c3cd3 100644 --- a/plugin/plan-your-day/assets/css/admin-settings.css +++ b/plugin/plan-your-day/assets/css/admin-settings.css @@ -1,17 +1,49 @@ +@font-face { + font-family: "Noto Sans"; + src: url("../fonts/noto-sans-v42-latin-ext-300.woff2") format("woff2"); + font-style: normal; + font-weight: 300; + font-display: swap; +} + +@font-face { + font-family: "Noto Sans"; + src: url("../fonts/noto-sans-v42-latin-ext-regular.woff2") format("woff2"); + font-style: normal; + font-weight: 400; + font-display: swap; +} + +@font-face { + font-family: "Noto Sans"; + src: url("../fonts/noto-sans-v42-latin-ext-700.woff2") format("woff2"); + font-style: normal; + font-weight: 700; + font-display: swap; +} + .plan-your-day-admin-page { + font-family: "Noto Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; scroll-behavior: smooth; } +.plan-your-day-admin-page input, +.plan-your-day-admin-page select, +.plan-your-day-admin-page textarea, +.plan-your-day-admin-page button { + font-family: inherit; +} + .plan-your-day-admin-accordion { display: grid; - gap: 1rem; + gap: 0.65rem; max-width: 72rem; - margin-top: 1rem; + margin-top: 0.75rem; } .plan-your-day-admin-accordion__item { margin: 0; - border: 1px solid #ccd0d4; + border: thin solid #ccd0d4; border-radius: 12px; background: #fff; box-shadow: 0 1px 2px rgba(16, 24, 40, 0.08); @@ -22,8 +54,8 @@ display: flex; align-items: flex-start; justify-content: space-between; - gap: 1rem; - padding: 1rem 1.25rem; + gap: 0.75rem; + padding: 0.75rem 1rem; cursor: pointer; list-style: none; } @@ -47,7 +79,7 @@ .plan-your-day-admin-accordion__summary-copy { display: grid; - gap: 0.35rem; + gap: 0.2rem; } .plan-your-day-admin-accordion__title { @@ -61,25 +93,34 @@ .plan-your-day-admin-accordion__description { display: block; font-size: 0.875rem; - line-height: 1.5; + line-height: 1.4; color: #50575e; } .plan-your-day-admin-accordion__panel { - padding: 0 1.25rem 1.25rem; - border-top: 1px solid #e2e4e7; + padding: 0 1rem 1rem; + border-top: thin solid #e2e4e7; } .plan-your-day-interface-copy-group { display: grid; - gap: 1rem; + gap: 0.5rem; max-width: 56rem; - padding-top: 1rem; + padding-top: 0.75rem; +} + +.plan-your-day-interface-copy-field { + padding: 0.55rem 0.65rem; + border: thin solid transparent; + border-radius: 8px; } .plan-your-day-interface-copy-field-label { - display: block; - margin-bottom: 0.35rem; + display: flex; + align-items: center; + gap: 0.35rem; + flex-wrap: wrap; + margin-bottom: 0.2rem; font-weight: 600; } @@ -88,6 +129,40 @@ padding-left: 1rem; } +.plan-your-day-category-order-cell { + width: 5rem; + white-space: nowrap; +} + +.plan-your-day-category-drag-handle { + cursor: grab; + min-width: 4.5rem; + text-align: center; +} + +.plan-your-day-category-row.is-dragging { + opacity: 0.55; +} + +.plan-your-day-category-row.is-dragging .plan-your-day-category-drag-handle { + cursor: grabbing; +} + +.plan-your-day-categories-field { + display: block; +} + +.plan-your-day-categories-field > th { + display: none; +} + +.plan-your-day-categories-field > td { + display: block; + width: 100%; + box-sizing: border-box; + padding-left: 0; +} + .plan-your-day-admin-back-to-top { position: fixed; right: 1.5rem; diff --git a/plugin/plan-your-day/assets/css/plan.css b/plugin/plan-your-day/assets/css/plan.css index 3d6872c..9141d9a 100644 --- a/plugin/plan-your-day/assets/css/plan.css +++ b/plugin/plan-your-day/assets/css/plan.css @@ -1,3 +1,27 @@ +@font-face { + font-family: "Noto Sans"; + src: url("../fonts/noto-sans-v42-latin-ext-300.woff2") format("woff2"); + font-style: normal; + font-weight: 300; + font-display: swap; +} + +@font-face { + font-family: "Noto Sans"; + src: url("../fonts/noto-sans-v42-latin-ext-regular.woff2") format("woff2"); + font-style: normal; + font-weight: 400; + font-display: swap; +} + +@font-face { + font-family: "Noto Sans"; + src: url("../fonts/noto-sans-v42-latin-ext-700.woff2") format("woff2"); + font-style: normal; + font-weight: 700; + font-display: swap; +} + .plan-your-day, .plan-your-day *, .plan-your-day *::before, @@ -8,16 +32,190 @@ .plan-your-day { --focus-ring-color: #1168d8; --focus-ring-offset-color: #ffffff; + --pyd-font-family: "Noto Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --pyd-text: #173038; + --pyd-heading: #102027; + --pyd-hero-heading: #112127; + --pyd-muted: #35545d; + --pyd-accent: #8a4f0f; + --pyd-accent-soft: rgba(138, 79, 15, 0.2); + --pyd-accent-border: rgba(138, 79, 15, 0.42); + --pyd-border-subtle: rgba(23, 48, 56, 0.08); + --pyd-border: rgba(23, 48, 56, 0.12); + --pyd-border-medium: rgba(23, 48, 56, 0.14); + --pyd-border-strong: rgba(23, 48, 56, 0.16); + --pyd-border-emphasis: rgba(23, 48, 56, 0.22); + --pyd-control-mark-border: rgba(23, 48, 56, 0.35); + --pyd-surface-bg: radial-gradient(circle at top right, rgba(241, 181, 67, 0.18), transparent 26%), + linear-gradient(180deg, #fffdf8 0%, #f4ecdb 100%); + --pyd-surface-shadow: 0 0.85rem 2rem rgba(23, 48, 56, 0.12); + --pyd-card-bg: rgba(255, 255, 255, 0.82); + --pyd-card-shadow: 0 0.65rem 1.45rem rgba(23, 48, 56, 0.06); + --pyd-panel-bg: #fffefb; + --pyd-option-bg: #fffdf9; + --pyd-option-selected-bg: linear-gradient(180deg, #fffaf0 0%, #f7ecd6 100%); + --pyd-option-selected-shadow: 0 0.85rem 1.8rem rgba(138, 79, 15, 0.12); + --pyd-radio-bg: #ffffff; + --pyd-radio-checked-bg: radial-gradient(circle at center, var(--pyd-accent) 0 45%, transparent 48% 100%), + #fff7e9; + --pyd-chip-bg: rgba(23, 48, 56, 0.08); + --pyd-hero-note-bg: rgba(255, 255, 255, 0.72); + --pyd-primary-bg: #173038; + --pyd-primary-hover-bg: #0f2228; + --pyd-primary-text: #fffdf7; + --pyd-primary-soft-text: #fffaf0; + --pyd-secondary-hover-bg: #f6eddb; + --pyd-interactive-hover-bg: rgba(255, 255, 255, 0.38); + --pyd-item-bg: linear-gradient(180deg, #fffdf9 0%, #f7f0e0 100%); + --pyd-item-hover-shadow: 0 0.85rem 1.8rem rgba(23, 48, 56, 0.08); + --pyd-item-drag-shadow: 0 1.1rem 2rem rgba(23, 48, 56, 0.14); + --pyd-feedback-border: rgba(255, 255, 255, 0.55); + --pyd-feedback-shadow: 0 0.5rem 1rem rgba(23, 48, 56, 0.18); + --pyd-disabled-bg: rgba(255, 255, 255, 0.65); + --pyd-disabled-text: #5c737a; + --pyd-empty-border: rgba(23, 48, 56, 0.26); + --pyd-empty-bg: rgba(255, 255, 255, 0.62); + --pyd-summary-bg: linear-gradient(180deg, #fffdf7 0%, #f8f1e0 100%); + --pyd-summary-tile-bg: rgba(255, 255, 255, 0.7); + --pyd-note-border: rgba(23, 48, 56, 0.12); + --pyd-note-bg: rgba(223, 236, 241, 0.75); + --pyd-note-text: #163038; + --pyd-warning-border: rgba(138, 79, 15, 0.2); + --pyd-warning-bg: rgba(255, 243, 225, 0.9); + --pyd-warning-text: #6e410d; + --pyd-map-bg: #f3ede0; + --pyd-scrollbar-track: rgba(23, 48, 56, 0.08); + --pyd-scrollbar-thumb: rgba(138, 79, 15, 0.55); + --pyd-scrollbar-thumb-border: rgba(255, 255, 255, 0.65); + color-scheme: light; font-family: - system-ui, - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - sans-serif; + var(--pyd-font-family); line-height: 1.5; padding:0; } +.plan-your-day[data-plan-color-mode="dark"] { + --focus-ring-color: #9fc5ff; + --focus-ring-offset-color: #232323; + --pyd-text: #f3f1ea; + --pyd-heading: #fffaf0; + --pyd-hero-heading: #fffdf7; + --pyd-muted: #c5d0d1; + --pyd-accent: #f1b543; + --pyd-accent-soft: rgba(241, 181, 67, 0.24); + --pyd-accent-border: rgba(241, 181, 67, 0.55); + --pyd-border-subtle: rgba(255, 255, 255, 0.08); + --pyd-border: rgba(255, 255, 255, 0.12); + --pyd-border-medium: rgba(255, 255, 255, 0.14); + --pyd-border-strong: rgba(255, 255, 255, 0.18); + --pyd-border-emphasis: rgba(255, 255, 255, 0.26); + --pyd-control-mark-border: rgba(255, 255, 255, 0.42); + --pyd-surface-bg: radial-gradient(circle at top right, rgba(241, 181, 67, 0.14), transparent 28%), + linear-gradient(180deg, #2e2e2e 0%, #232323 100%); + --pyd-surface-shadow: 0 0.85rem 2rem rgba(0, 0, 0, 0.34); + --pyd-card-bg: rgba(48, 48, 48, 0.92); + --pyd-card-shadow: 0 0.65rem 1.45rem rgba(0, 0, 0, 0.24); + --pyd-panel-bg: #2b2b2b; + --pyd-option-bg: #292929; + --pyd-option-selected-bg: linear-gradient(180deg, #3a3427 0%, #2b2925 100%); + --pyd-option-selected-shadow: 0 0.85rem 1.8rem rgba(0, 0, 0, 0.28); + --pyd-radio-bg: #232323; + --pyd-radio-checked-bg: radial-gradient(circle at center, var(--pyd-accent) 0 45%, transparent 48% 100%), + #302818; + --pyd-chip-bg: rgba(255, 255, 255, 0.1); + --pyd-hero-note-bg: rgba(255, 255, 255, 0.08); + --pyd-primary-bg: #f1b543; + --pyd-primary-hover-bg: #ffd36b; + --pyd-primary-text: #232323; + --pyd-primary-soft-text: #232323; + --pyd-secondary-hover-bg: rgba(241, 181, 67, 0.16); + --pyd-interactive-hover-bg: rgba(255, 255, 255, 0.08); + --pyd-item-bg: linear-gradient(180deg, #303030 0%, #282828 100%); + --pyd-item-hover-shadow: 0 0.85rem 1.8rem rgba(0, 0, 0, 0.26); + --pyd-item-drag-shadow: 0 1.1rem 2rem rgba(0, 0, 0, 0.36); + --pyd-feedback-border: rgba(241, 181, 67, 0.36); + --pyd-feedback-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.28); + --pyd-disabled-bg: rgba(255, 255, 255, 0.08); + --pyd-disabled-text: #9aa6a8; + --pyd-empty-border: rgba(255, 255, 255, 0.24); + --pyd-empty-bg: rgba(255, 255, 255, 0.07); + --pyd-summary-bg: linear-gradient(180deg, #303030 0%, #292929 100%); + --pyd-summary-tile-bg: rgba(255, 255, 255, 0.08); + --pyd-note-border: rgba(145, 198, 217, 0.28); + --pyd-note-bg: rgba(62, 91, 101, 0.5); + --pyd-note-text: #e9f6f9; + --pyd-warning-border: rgba(241, 181, 67, 0.34); + --pyd-warning-bg: rgba(78, 57, 24, 0.68); + --pyd-warning-text: #ffe1a3; + --pyd-map-bg: #303030; + --pyd-scrollbar-track: rgba(255, 255, 255, 0.08); + --pyd-scrollbar-thumb: rgba(241, 181, 67, 0.62); + --pyd-scrollbar-thumb-border: rgba(35, 35, 35, 0.9); + color-scheme: dark; +} + +@media (prefers-color-scheme: dark) { + .plan-your-day[data-plan-color-mode-default="system"]:not([data-plan-color-mode]) { + --focus-ring-color: #9fc5ff; + --focus-ring-offset-color: #232323; + --pyd-text: #f3f1ea; + --pyd-heading: #fffaf0; + --pyd-hero-heading: #fffdf7; + --pyd-muted: #c5d0d1; + --pyd-accent: #f1b543; + --pyd-accent-soft: rgba(241, 181, 67, 0.24); + --pyd-accent-border: rgba(241, 181, 67, 0.55); + --pyd-border-subtle: rgba(255, 255, 255, 0.08); + --pyd-border: rgba(255, 255, 255, 0.12); + --pyd-border-medium: rgba(255, 255, 255, 0.14); + --pyd-border-strong: rgba(255, 255, 255, 0.18); + --pyd-border-emphasis: rgba(255, 255, 255, 0.26); + --pyd-control-mark-border: rgba(255, 255, 255, 0.42); + --pyd-surface-bg: radial-gradient(circle at top right, rgba(241, 181, 67, 0.14), transparent 28%), + linear-gradient(180deg, #2e2e2e 0%, #232323 100%); + --pyd-surface-shadow: 0 0.85rem 2rem rgba(0, 0, 0, 0.34); + --pyd-card-bg: rgba(48, 48, 48, 0.92); + --pyd-card-shadow: 0 0.65rem 1.45rem rgba(0, 0, 0, 0.24); + --pyd-panel-bg: #2b2b2b; + --pyd-option-bg: #292929; + --pyd-option-selected-bg: linear-gradient(180deg, #3a3427 0%, #2b2925 100%); + --pyd-option-selected-shadow: 0 0.85rem 1.8rem rgba(0, 0, 0, 0.28); + --pyd-radio-bg: #232323; + --pyd-radio-checked-bg: radial-gradient(circle at center, var(--pyd-accent) 0 45%, transparent 48% 100%), + #302818; + --pyd-chip-bg: rgba(255, 255, 255, 0.1); + --pyd-hero-note-bg: rgba(255, 255, 255, 0.08); + --pyd-primary-bg: #f1b543; + --pyd-primary-hover-bg: #ffd36b; + --pyd-primary-text: #232323; + --pyd-primary-soft-text: #232323; + --pyd-secondary-hover-bg: rgba(241, 181, 67, 0.16); + --pyd-interactive-hover-bg: rgba(255, 255, 255, 0.08); + --pyd-item-bg: linear-gradient(180deg, #303030 0%, #282828 100%); + --pyd-item-hover-shadow: 0 0.85rem 1.8rem rgba(0, 0, 0, 0.26); + --pyd-item-drag-shadow: 0 1.1rem 2rem rgba(0, 0, 0, 0.36); + --pyd-feedback-border: rgba(241, 181, 67, 0.36); + --pyd-feedback-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.28); + --pyd-disabled-bg: rgba(255, 255, 255, 0.08); + --pyd-disabled-text: #9aa6a8; + --pyd-empty-border: rgba(255, 255, 255, 0.24); + --pyd-empty-bg: rgba(255, 255, 255, 0.07); + --pyd-summary-bg: linear-gradient(180deg, #303030 0%, #292929 100%); + --pyd-summary-tile-bg: rgba(255, 255, 255, 0.08); + --pyd-note-border: rgba(145, 198, 217, 0.28); + --pyd-note-bg: rgba(62, 91, 101, 0.5); + --pyd-note-text: #e9f6f9; + --pyd-warning-border: rgba(241, 181, 67, 0.34); + --pyd-warning-bg: rgba(78, 57, 24, 0.68); + --pyd-warning-text: #ffe1a3; + --pyd-map-bg: #303030; + --pyd-scrollbar-track: rgba(255, 255, 255, 0.08); + --pyd-scrollbar-thumb: rgba(241, 181, 67, 0.62); + --pyd-scrollbar-thumb-border: rgba(35, 35, 35, 0.9); + color-scheme: dark; + } +} + .plan-your-day img, .plan-your-day svg { display: block; @@ -55,7 +253,8 @@ .plan-your-day { width: min(100% - 2rem, 1180px); margin: clamp(1rem, 4vw, 3rem) auto; - color: #173038; + color: var(--pyd-text); + container-type: inline-size; } .plan-your-day [hidden] { @@ -64,12 +263,10 @@ .plan-your-day__surface { padding: clamp(1rem, 1.6vw, 1.5rem); - border: 1px solid rgba(23, 48, 56, 0.12); + border: thin solid var(--pyd-border); border-radius: 1.5rem; - background: - radial-gradient(circle at top right, rgba(241, 181, 67, 0.18), transparent 26%), - linear-gradient(180deg, #fffdf8 0%, #f4ecdb 100%); - box-shadow: 0 0.85rem 2rem rgba(23, 48, 56, 0.12); + background: var(--pyd-surface-bg); + box-shadow: var(--pyd-surface-shadow); } .plan-your-day__hero { @@ -77,7 +274,7 @@ gap: 0.8rem; margin-bottom: 1.2rem; padding-bottom: 1rem; - border-bottom: 1px solid rgba(23, 48, 56, 0.12); + border-bottom: thin solid var(--pyd-border); } .plan-your-day__eyebrow, @@ -88,13 +285,14 @@ font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; - color: #8a4f0f; + color: var(--pyd-accent); } .plan-your-day__hero h2 { font-size: clamp(1.8rem, 3.3vw, 2.45rem); line-height: 1; - color: #112127; + color: var(--pyd-hero-heading); + font-weight: 700; } .plan-your-day__intro, @@ -114,15 +312,15 @@ margin: 0; font-size: 0.95rem; line-height: 1.5; - color: #35545d; + color: var(--pyd-muted); } .plan-your-day__hero-note { max-width: 33rem; padding: 0.75rem 0.9rem; border-radius: 1rem; - background: rgba(255, 255, 255, 0.72); - border: 1px solid rgba(23, 48, 56, 0.08); + background: var(--pyd-hero-note-bg); + border: thin solid var(--pyd-border-subtle); } .plan-your-day__layout { @@ -135,14 +333,16 @@ .plan-your-day__preview-panel { display: grid; gap: 0.85rem; + min-width: 0; } .plan-your-day__card { + min-width: 0; padding: 1rem; - border: 1px solid rgba(23, 48, 56, 0.12); + border: thin solid var(--pyd-border); border-radius: 1.2rem; - background: rgba(255, 255, 255, 0.82); - box-shadow: 0 0.65rem 1.45rem rgba(23, 48, 56, 0.06); + background: var(--pyd-card-bg); + box-shadow: var(--pyd-card-shadow); } .plan-your-day__card-header, @@ -164,7 +364,9 @@ .plan-your-day__card h3, .plan-your-day__card h4 { - color: #102027; + color: var(--pyd-heading); + font-weight: 700; + margin-top: 0; } .plan-your-day__card h3 { @@ -186,8 +388,8 @@ min-height: 1.8rem; padding: 0.3rem 0.7rem; border-radius: 999px; - background: #173038; - color: #fffaf0; + background: var(--pyd-primary-bg); + color: var(--pyd-primary-soft-text); font-size: 0.85rem; font-weight: 700; white-space: nowrap; @@ -221,9 +423,9 @@ gap: 0.35rem; min-height: 100%; padding: 0.85rem 0.9rem 0.85rem 2.7rem; - border: 1px solid rgba(23, 48, 56, 0.16); + border: thin solid var(--pyd-border-strong); border-radius: 1rem; - background: #fffdf9; + background: var(--pyd-option-bg); position: relative; transition: border-color 0.2s ease, @@ -240,31 +442,30 @@ left: 0.9rem; width: 1.05rem; height: 1.05rem; - border: 2px solid rgba(23, 48, 56, 0.35); + border: 2px solid var(--pyd-control-mark-border); border-radius: 999px; - background: #fff; + background: var(--pyd-radio-bg); } .plan-your-day__category-option input:checked + .plan-your-day__category-option-body, .plan-your-day__start-option input:checked + .plan-your-day__start-option-body { - border-color: rgba(138, 79, 15, 0.45); - background: linear-gradient(180deg, #fffaf0 0%, #f7ecd6 100%); - box-shadow: 0 0.85rem 1.8rem rgba(138, 79, 15, 0.12); + border-color: var(--pyd-accent-border); + background: var(--pyd-option-selected-bg); + box-shadow: var(--pyd-option-selected-shadow); transform: translateY(-1px); } .plan-your-day__category-option input:checked + .plan-your-day__category-option-body::before, .plan-your-day__start-option input:checked + .plan-your-day__start-option-body::before { - border-color: #8a4f0f; - background: - radial-gradient(circle at center, #8a4f0f 0 45%, transparent 48% 100%), - #fff7e9; + border-color: var(--pyd-accent); + background: var(--pyd-radio-checked-bg); } .plan-your-day__category-radio:focus-visible + .plan-your-day__category-option-body, .plan-your-day__category-trigger:focus-visible, .plan-your-day__category-search input:focus-visible, .plan-your-day__category-search-button:focus-visible, +.plan-your-day__color-mode-toggle:focus-visible, .plan-your-day__load-more-button:focus-visible, .plan-your-day__start-option input:focus-visible + .plan-your-day__start-option-body, .plan-your-day__start-toggle:focus-visible, @@ -285,7 +486,7 @@ .plan-your-day__category-title, .plan-your-day__start-title { display: block; - color: #102027; + color: var(--pyd-heading); font-size: 1rem; font-weight: 700; } @@ -308,10 +509,10 @@ width: 100%; min-height: 2.85rem; padding: 0.75rem 0.9rem; - border: 1px solid rgba(23, 48, 56, 0.16); + border: thin solid var(--pyd-border-strong); border-radius: 0.5rem; - background: #fffefb; - color: #102027; + background: var(--pyd-panel-bg); + color: var(--pyd-heading); } .plan-your-day__category-search-button { @@ -323,9 +524,9 @@ } .plan-your-day__category-accordion-item { - border: 1px solid rgba(23, 48, 56, 0.14); + border: thin solid var(--pyd-border-medium); border-radius: 1rem; - background: linear-gradient(180deg, #fffefb 0%, #f6efde 100%); + background: var(--pyd-item-bg); transition: border-color 0.18s ease, box-shadow 0.18s ease, @@ -333,8 +534,11 @@ } .plan-your-day__category-accordion-item.is-expanded { - border-color: rgba(138, 79, 15, 0.32); - box-shadow: 0 0.85rem 1.7rem rgba(23, 48, 56, 0.08); + border-color: var(--pyd-accent-border); + box-shadow: var(--pyd-item-hover-shadow); +} +.plan-your-day__category-accordion-item.is-expanded > h4 button { + box-shadow: 0 4px 5px -5px #333333d7; } .plan-your-day__category-accordion-heading { @@ -364,7 +568,7 @@ .plan-your-day__category-trigger:hover, .plan-your-day__category-trigger:active { transform: translateY(-1px); - background: rgba(255, 255, 255, 0.38); + background: var(--pyd-interactive-hover-bg); } .plan-your-day__category-trigger-copy { @@ -395,7 +599,7 @@ } .plan-your-day__category-panel { - padding: 0 1rem 1rem; + padding:.66rem 1rem 1rem; } .plan-your-day__custom-search-header { @@ -404,6 +608,7 @@ .plan-your-day__custom-search-header h4 { margin: 0; + font-weight: 700; } .plan-your-day__category-results-scroll { @@ -411,7 +616,7 @@ overflow-y: auto; padding-right: 0.35rem; scrollbar-width: thin; - scrollbar-color: rgba(138, 79, 15, 0.55) rgba(23, 48, 56, 0.08); + scrollbar-color: var(--pyd-scrollbar-thumb) var(--pyd-scrollbar-track); transition: opacity 0.18s ease, filter 0.18s ease; } @@ -420,14 +625,14 @@ } .plan-your-day__category-results-scroll::-webkit-scrollbar-track { - background: rgba(23, 48, 56, 0.08); + background: var(--pyd-scrollbar-track); border-radius: 999px; } .plan-your-day__category-results-scroll::-webkit-scrollbar-thumb { - background: rgba(138, 79, 15, 0.55); + background: var(--pyd-scrollbar-thumb); border-radius: 999px; - border: 2px solid rgba(255, 255, 255, 0.65); + border: 2px solid var(--pyd-scrollbar-thumb-border); } .plan-your-day__start-toggle { @@ -438,10 +643,10 @@ gap: 0.55rem; min-height: 2.5rem; padding: 0.55rem 0.9rem; - border: 1px solid rgba(23, 48, 56, 0.14); + border: thin solid var(--pyd-border-medium); border-radius: 999px; - background: #fffefb; - color: #173038; + background: var(--pyd-panel-bg); + color: var(--pyd-text); font-size: 0.88rem; font-weight: 700; line-height: 1; @@ -456,8 +661,72 @@ .plan-your-day__start-toggle:hover, .plan-your-day__start-toggle:active { transform: translateY(-1px); - border-color: rgba(138, 79, 15, 0.42); - background: #f6eddb; + border-color: var(--pyd-accent-border); + background: var(--pyd-secondary-hover-bg); +} + +.plan-your-day__hero-tools { + display: flex; + align-items: center; + justify-content: flex-start; +} + +.plan-your-day__color-mode-toggle { + appearance: none; + display: inline-flex; + position: relative; + align-items: center; + gap: 0.55rem; + min-height: 2.5rem; + padding: 0.45rem 0.75rem 0.45rem 0.5rem; + border: thin solid var(--pyd-border-medium); + border-radius: 999px; + background: var(--pyd-panel-bg); + color: var(--pyd-text); + cursor: pointer; + font-family: inherit; + font-size: 0.88rem; + font-weight: 700; + line-height: 1; + transition: + transform 0.18s ease, + border-color 0.18s ease, + background-color 0.18s ease, + color 0.18s ease; +} + +.plan-your-day__color-mode-toggle::before { + content: ""; + width: 2.2rem; + height: 1.25rem; + border-radius: 999px; + background: var(--pyd-chip-bg); + box-shadow: inset 0 0 0 thin var(--pyd-border); +} + +.plan-your-day__color-mode-toggle::after { + content: ""; + position: absolute; + width: 0.85rem; + height: 0.85rem; + margin-left: 0.2rem; + border-radius: 999px; + background: var(--pyd-primary-bg); + transform: translateX(0); + transition: + background-color 0.18s ease, + transform 0.18s ease; +} + +.plan-your-day__color-mode-toggle[aria-pressed="true"]::after { + transform: translateX(0.95rem); +} + +.plan-your-day__color-mode-toggle:hover, +.plan-your-day__color-mode-toggle:active { + transform: translateY(-1px); + border-color: var(--pyd-accent-border); + background: var(--pyd-secondary-hover-bg); } .plan-your-day__start-toggle-icon { @@ -495,7 +764,7 @@ margin: 0; font-size: 0.88rem; font-weight: 700; - color: #8a4f0f; + color: var(--pyd-accent); } .plan-your-day__results-list, @@ -518,9 +787,9 @@ gap: 0.8rem; position: relative; padding: 0.85rem; - border: 1px solid rgba(23, 48, 56, 0.14); + border: thin solid var(--pyd-border-medium); border-radius: .5rem; - background: linear-gradient(180deg, #fffdf9 0%, #f7f0e0 100%); + background: var(--pyd-item-bg); transition: transform 0.18s ease, box-shadow 0.18s ease, @@ -531,11 +800,14 @@ .plan-your-day__trip-copy { display: grid; gap: 0.15rem; + min-width: 0; } .plan-your-day__result-copy h4, .plan-your-day__trip-copy h4 { font-size: 1rem; + margin: 0; + font-weight: 700; } .plan-your-day__result-tools, @@ -563,7 +835,7 @@ min-height: 2.625rem; height: 42px; padding: 0.65rem 0.95rem; - border: 1px solid transparent; + border: thin solid transparent; border-radius: 999px; appearance: none; cursor: pointer; @@ -585,9 +857,9 @@ .plan-your-day__trip-tools a, .plan-your-day__trip-tools button, .plan-your-day__maps-link { - border-color: rgba(23, 48, 56, 0.16); - background: #fffefb; - color: #173038; + border-color: var(--pyd-border-strong); + background: var(--pyd-panel-bg); + color: var(--pyd-text); } .plan-your-day__result-link:hover, @@ -601,16 +873,16 @@ .plan-your-day__maps-link:hover:not(.is-disabled), .plan-your-day__maps-link:active:not(.is-disabled) { transform: translateY(-1px); - border-color: rgba(138, 79, 15, 0.42); - background: #f6eddb; + border-color: var(--pyd-accent-border); + background: var(--pyd-secondary-hover-bg); } .plan-your-day__result-add, .plan-your-day__submit, .plan-your-day__load-more-button, .plan-your-day__category-search-button { - background: #173038; - color: #fffdf7; + background: var(--pyd-primary-bg); + color: var(--pyd-primary-text); } .plan-your-day__result-add:hover, @@ -622,7 +894,7 @@ .plan-your-day__submit:hover, .plan-your-day__submit:active { transform: translateY(-1px); - background: #0f2228; + background: var(--pyd-primary-hover-bg); } .plan-your-day__load-more-button { @@ -643,8 +915,8 @@ min-height: 2.625rem; padding: 0.65rem 0.95rem; border-radius: 999px; - background: rgba(23, 48, 56, 0.08); - color: #173038; + background: var(--pyd-chip-bg); + color: var(--pyd-text); font-size: 0.9rem; font-weight: 700; } @@ -669,11 +941,11 @@ z-index: 2; max-width: calc(100% - 1.3rem); padding: 0.45rem 0.7rem; - border: 1px solid rgba(255, 255, 255, 0.55); + border: thin solid var(--pyd-feedback-border); border-radius: 0.5rem; - background: #173038; - box-shadow: 0 0.5rem 1rem rgba(23, 48, 56, 0.18); - color: #fffdf7; + background: var(--pyd-primary-bg); + box-shadow: var(--pyd-feedback-shadow); + color: var(--pyd-primary-text); font-size: 0.85rem; font-weight: 700; line-height: 1.2; @@ -681,22 +953,22 @@ } .plan-your-day.is-enhanced .plan-your-day__trip-item:hover { - border-color: rgba(138, 79, 15, 0.4); - box-shadow: 0 0.85rem 1.8rem rgba(23, 48, 56, 0.08); + border-color: var(--pyd-accent-border); + box-shadow: var(--pyd-item-hover-shadow); } .plan-your-day__trip-item.is-dragging { opacity: 0.7; transform: scale(0.985); - box-shadow: 0 1.1rem 2rem rgba(23, 48, 56, 0.14); + box-shadow: var(--pyd-item-drag-shadow); } .plan-your-day__trip-item.is-drop-before { - box-shadow: inset 0 4px 0 #8a4f0f; + box-shadow: inset 0 4px 0 var(--pyd-accent); } .plan-your-day__trip-item.is-drop-after { - box-shadow: inset 0 -4px 0 #8a4f0f; + box-shadow: inset 0 -4px 0 var(--pyd-accent); } .plan-your-day__trip-main { @@ -712,8 +984,8 @@ width: 2.1rem; height: 2.1rem; border-radius: 999px; - background: #173038; - color: #fffdf7; + background: var(--pyd-primary-bg); + color: var(--pyd-primary-text); font-size: 0.95rem; font-weight: 700; } @@ -725,8 +997,8 @@ min-width: 4rem; padding: 0.6rem 16px .4rem 32px; border-radius: 1000px; - background: #173038; - color: #fffef9; + background: var(--pyd-primary-bg); + color: var(--pyd-primary-text); font-size: 0.75rem; font-weight: 700; text-transform: uppercase; @@ -759,9 +1031,9 @@ .plan-your-day__reorder-disabled { opacity: 0.45; cursor: not-allowed; - border-color: rgba(23, 48, 56, 0.12); - background: rgba(255, 255, 255, 0.65); - color: #5c737a; + border-color: var(--pyd-border); + background: var(--pyd-disabled-bg); + color: var(--pyd-disabled-text); } .plan-your-day__results-empty, @@ -771,15 +1043,16 @@ gap: 0.55rem; place-items: start; padding: 1.1rem; - border: 1px dashed rgba(23, 48, 56, 0.26); + border: thin dashed var(--pyd-empty-border); border-radius: .5rem; - background: rgba(255, 255, 255, 0.62); + background: var(--pyd-empty-bg); } .plan-your-day__results-empty h4, .plan-your-day__trip-empty h4, .plan-your-day__preview-empty h4 { font-size: 1.15rem; + font-weight: 700; } .plan-your-day__custom-start { @@ -790,17 +1063,17 @@ display: inline-block; margin-bottom: 0.45rem; font-weight: 700; - color: #102027; + color: var(--pyd-heading); } .plan-your-day__custom-start input { width: 100%; min-height: 2.85rem; padding: 0.75rem 0.9rem; - border: 1px solid rgba(23, 48, 56, 0.16); + border: thin solid var(--pyd-border-strong); border-radius: 0.5rem; - background: #fffefb; - color: #102027; + background: var(--pyd-panel-bg); + color: var(--pyd-heading); } .plan-your-day__input-help, @@ -817,16 +1090,16 @@ } .plan-your-day__clear-link { - border-color: rgba(23, 48, 56, 0.12); + border-color: var(--pyd-border); background: transparent; - color: #173038; + color: var(--pyd-text); } .plan-your-day__clear-link:hover, .plan-your-day__clear-link:active { transform: translateY(-1px); - border-color: rgba(23, 48, 56, 0.22); - background: rgba(255, 255, 255, 0.7); + border-color: var(--pyd-border-emphasis); + background: var(--pyd-summary-tile-bg); } .plan-your-day__maps-link.is-disabled, @@ -845,21 +1118,21 @@ .plan-your-day__message { padding: 0.75rem 0.85rem; border-radius: .5rem; - border: 1px solid transparent; + border: thin solid transparent; font-size: 0.92rem; line-height: 1.45; } .plan-your-day__message--note { - border-color: rgba(23, 48, 56, 0.12); - background: rgba(223, 236, 241, 0.75); - color: #163038; + border-color: var(--pyd-note-border); + background: var(--pyd-note-bg); + color: var(--pyd-note-text); } .plan-your-day__message--warning { - border-color: rgba(138, 79, 15, 0.2); - background: rgba(255, 243, 225, 0.9); - color: #6e410d; + border-color: var(--pyd-warning-border); + background: var(--pyd-warning-bg); + color: var(--pyd-warning-text); } .plan-your-day__summary { @@ -867,8 +1140,8 @@ margin-bottom: 0; padding: 0.9rem; border-radius: .5rem; - background: linear-gradient(180deg, #fffdf7 0%, #f8f1e0 100%); - border: 1px solid rgba(23, 48, 56, 0.1); + background: var(--pyd-summary-bg); + border: thin solid var(--pyd-border-subtle); } .plan-your-day__summary-handoff { @@ -884,7 +1157,7 @@ font-weight: 700; letter-spacing: 0; text-transform: uppercase; - color: #8a4f0f; + color: var(--pyd-accent); } .plan-your-day__maps-link--summary { @@ -897,7 +1170,7 @@ .plan-your-day__summary-grid div { padding: 0.7rem 0.8rem; border-radius: 0.5rem; - background: rgba(255, 255, 255, 0.7); + background: var(--pyd-summary-tile-bg); } .plan-your-day__summary-grid dt { @@ -906,20 +1179,20 @@ font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; - color: #8a4f0f; + color: var(--pyd-accent); } .plan-your-day__summary-grid dd { margin: 0; font-size: 0.95rem; - color: #102027; + color: var(--pyd-heading); } .plan-your-day__map-wrap { overflow: hidden; border-radius: 1rem; - border: 1px solid rgba(23, 48, 56, 0.12); - background: #f3ede0; + border: thin solid var(--pyd-border); + background: var(--pyd-map-bg); } .plan-your-day__map-frame { @@ -927,7 +1200,7 @@ width: 100%; min-height: 24rem; border: 0; - background: #f3ede0; + background: var(--pyd-map-bg); } @media (min-width: 980px) { @@ -936,15 +1209,6 @@ align-items: end; } - .plan-your-day__layout { - grid-template-columns: minmax(18rem, 30rem) minmax(0, 1fr); - } - - .plan-your-day__preview-card { - position: sticky; - top: 7.75rem; - } - .plan-your-day__summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } @@ -960,6 +1224,17 @@ } } +@container (min-width: 60rem) { + .plan-your-day__layout { + grid-template-columns: minmax(18rem, 30rem) minmax(0, 1fr); + } + + .plan-your-day__preview-card { + position: sticky; + top: 7.75rem; + } +} + @media (max-width: 979px) { .plan-your-day__card-header, .plan-your-day__summary-top { diff --git a/plugin/plan-your-day/assets/css/plan.min.css b/plugin/plan-your-day/assets/css/plan.min.css index eed3a01..b985e3e 100644 --- a/plugin/plan-your-day/assets/css/plan.min.css +++ b/plugin/plan-your-day/assets/css/plan.min.css @@ -1 +1 @@ -.plan-your-day,.plan-your-day *,.plan-your-day *::before,.plan-your-day *::after{box-sizing:border-box;}.plan-your-day{--focus-ring-color:#1168d8;--focus-ring-offset-color:#ffffff;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;line-height:1.5;padding:0;}.plan-your-day img,.plan-your-day svg{display:block;max-width:100%;}.plan-your-day button,.plan-your-day input,.plan-your-day select,.plan-your-day textarea{touch-action:manipulation;}.plan-your-day button{cursor:pointer;}.plan-your-day a{color:inherit;}.plan-your-day .screen-reader-text,.plan-your-day .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}.plan-your-day{width:min(100% - 2rem,1180px);margin:clamp(1rem,4vw,3rem) auto;color:#173038;}.plan-your-day [hidden]{display:none!important;}.plan-your-day__surface{padding:clamp(1rem,1.6vw,1.5rem);border:1px solid rgba(23,48,56,.12);border-radius:1.5rem;background:radial-gradient(circle at top right,rgba(241,181,67,.18),transparent 26%),linear-gradient(180deg,#fffdf8 0%,#f4ecdb 100%);box-shadow:0 .85rem 2rem rgba(23,48,56,.12);}.plan-your-day__hero{display:grid;gap:.8rem;margin-bottom:1.2rem;padding-bottom:1rem;border-bottom:1px solid rgba(23,48,56,.12);}.plan-your-day__eyebrow,.plan-your-day__summary-eyebrow,.plan-your-day__trip-kicker{margin:0;font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a4f0f;}.plan-your-day__hero h2{font-size:clamp(1.8rem,3.3vw,2.45rem);line-height:1;color:#112127;}.plan-your-day__intro,.plan-your-day__hero-note,.plan-your-day__card-header p,.plan-your-day__category-description,.plan-your-day__result-meta,.plan-your-day__trip-meta,.plan-your-day__start-description,.plan-your-day__summary-overview,.plan-your-day__preview-empty p,.plan-your-day__results-empty p,.plan-your-day__trip-empty p,.plan-your-day__input-help,.plan-your-day__auto-note,.plan-your-day__noscript-note{margin:0;font-size:.95rem;line-height:1.5;color:#35545d;}.plan-your-day__hero-note{max-width:33rem;padding:.75rem .9rem;border-radius:1rem;background:rgba(255,255,255,.72);border:1px solid rgba(23,48,56,.08);}.plan-your-day__layout{display:grid;gap:1.2rem;align-items:start;}.plan-your-day__controls,.plan-your-day__preview-panel{display:grid;gap:.85rem;}.plan-your-day__card{padding:1rem;border:1px solid rgba(23,48,56,.12);border-radius:1.2rem;background:rgba(255,255,255,.82);box-shadow:0 .65rem 1.45rem rgba(23,48,56,.06);}.plan-your-day__card-header,.plan-your-day__summary-top{display:flex;align-items:start;justify-content:space-between;gap:1rem;margin-bottom:.8rem;}.plan-your-day__trip-header-actions{display:inline-flex;align-items:center;justify-content:flex-end;gap:.6rem;flex-wrap:wrap;}.plan-your-day__card h3,.plan-your-day__card h4{color:#102027;}.plan-your-day__card h3{font-size:1.2rem;margin-bottom:.25rem;}.plan-your-day__fieldset{border:0;padding:0;margin:0;}.plan-your-day__count-pill,.plan-your-day__summary-count{display:inline-flex;align-items:center;justify-content:center;min-height:1.8rem;padding:.3rem .7rem;border-radius:999px;background:#173038;color:#fffaf0;font-size:.85rem;font-weight:700;white-space:nowrap;}.plan-your-day__category-grid,.plan-your-day__start-options,.plan-your-day__results-list,.plan-your-day__trip-list,.plan-your-day__summary-grid{display:grid;gap:.7rem;}.plan-your-day__category-option,.plan-your-day__start-option{display:block;cursor:pointer;}.plan-your-day__category-option input,.plan-your-day__start-option input{position:absolute;opacity:0;pointer-events:none;}.plan-your-day__category-option-body,.plan-your-day__start-option-body{display:grid;gap:.35rem;min-height:100%;padding:.85rem .9rem .85rem 2.7rem;border:1px solid rgba(23,48,56,.16);border-radius:1rem;background:#fffdf9;position:relative;transition:border-color .2s ease,transform .2s ease,box-shadow .2s ease,background-color .2s ease;}.plan-your-day__category-option-body::before,.plan-your-day__start-option-body::before{content:"";position:absolute;top:.92rem;left:.9rem;width:1.05rem;height:1.05rem;border:2px solid rgba(23,48,56,.35);border-radius:999px;background:#fff;}.plan-your-day__category-option input:checked + .plan-your-day__category-option-body,.plan-your-day__start-option input:checked + .plan-your-day__start-option-body{border-color:rgba(138,79,15,.45);background:linear-gradient(180deg,#fffaf0 0%,#f7ecd6 100%);box-shadow:0 .85rem 1.8rem rgba(138,79,15,.12);transform:translateY(-1px);}.plan-your-day__category-option input:checked + .plan-your-day__category-option-body::before,.plan-your-day__start-option input:checked + .plan-your-day__start-option-body::before{border-color:#8a4f0f;background:radial-gradient(circle at center,#8a4f0f 0 45%,transparent 48% 100%),#fff7e9;}.plan-your-day__category-radio:focus-visible + .plan-your-day__category-option-body,.plan-your-day__category-trigger:focus-visible,.plan-your-day__category-search input:focus-visible,.plan-your-day__category-search-button:focus-visible,.plan-your-day__load-more-button:focus-visible,.plan-your-day__start-option input:focus-visible + .plan-your-day__start-option-body,.plan-your-day__start-toggle:focus-visible,.plan-your-day__custom-start input:focus-visible,.plan-your-day__submit:focus-visible,.plan-your-day__load-more-button:focus-visible,.plan-your-day__maps-link:focus-visible,.plan-your-day__clear-link:focus-visible,.plan-your-day__result-add:focus-visible,.plan-your-day__result-link:focus-visible,.plan-your-day__trip-tools a:focus-visible,.plan-your-day__trip-tools button:focus-visible{outline:3px solid var(--focus-ring-color);outline-offset:3px;box-shadow:0 0 0 3px var(--focus-ring-offset-color);}.plan-your-day__category-title,.plan-your-day__start-title{display:block;color:#102027;font-size:1rem;font-weight:700;}.plan-your-day__category-accordion{display:grid;gap:.7rem;}.plan-your-day__category-search{margin-bottom:.85rem;}.plan-your-day__category-search-controls{display:grid;gap:.65rem;}.plan-your-day__category-search input{width:100%;min-height:2.85rem;padding:.75rem .9rem;border:1px solid rgba(23,48,56,.16);border-radius:.5rem;background:#fffefb;color:#102027;}.plan-your-day__category-search-button{justify-self:start;}.plan-your-day__custom-search-results{margin-bottom:.85rem;}.plan-your-day__category-accordion-item{border:1px solid rgba(23,48,56,.14);border-radius:1rem;background:linear-gradient(180deg,#fffefb 0%,#f6efde 100%);transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease;}.plan-your-day__category-accordion-item.is-expanded{border-color:rgba(138,79,15,.32);box-shadow:0 .85rem 1.7rem rgba(23,48,56,.08);}.plan-your-day__category-accordion-heading{margin:0;}.plan-your-day__category-trigger{appearance:none;display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;padding:.95rem 1rem;border:0;border-radius:1rem;background:transparent;color:inherit;text-align:left;cursor:pointer;transition:transform .18s ease,background-color .18s ease,color .18s ease;}.plan-your-day__category-trigger:hover,.plan-your-day__category-trigger:active{transform:translateY(-1px);background:rgba(255,255,255,.38);}.plan-your-day__category-trigger-copy{display:grid;gap:.18rem;min-width:0;flex:1 1 auto;}.plan-your-day__category-trigger-side{display:inline-flex;align-items:center;gap:.7rem;flex-shrink:0;}.plan-your-day__category-trigger-icon{width:.72rem;height:.72rem;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform .18s ease;}.plan-your-day__category-trigger[aria-expanded="true"] .plan-your-day__category-trigger-icon{transform:rotate(-135deg);}.plan-your-day__category-panel{padding:0 1rem 1rem;}.plan-your-day__custom-search-header{margin:0;}.plan-your-day__custom-search-header h4{margin:0;}.plan-your-day__category-results-scroll{max-height:min(28rem,65vh);overflow-y:auto;padding-right:.35rem;scrollbar-width:thin;scrollbar-color:rgba(138,79,15,.55) rgba(23,48,56,.08);transition:opacity .18s ease,filter .18s ease;}.plan-your-day__category-results-scroll::-webkit-scrollbar{width:.65rem;}.plan-your-day__category-results-scroll::-webkit-scrollbar-track{background:rgba(23,48,56,.08);border-radius:999px;}.plan-your-day__category-results-scroll::-webkit-scrollbar-thumb{background:rgba(138,79,15,.55);border-radius:999px;border:2px solid rgba(255,255,255,.65);}.plan-your-day__start-toggle{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:.55rem;min-height:2.5rem;padding:.55rem .9rem;border:1px solid rgba(23,48,56,.14);border-radius:999px;background:#fffefb;color:#173038;font-size:.88rem;font-weight:700;line-height:1;cursor:pointer;transition:transform .18s ease,border-color .18s ease,background-color .18s ease,color .18s ease;}.plan-your-day__start-toggle:hover,.plan-your-day__start-toggle:active{transform:translateY(-1px);border-color:rgba(138,79,15,.42);background:#f6eddb;}.plan-your-day__start-toggle-icon{width:.6rem;height:.6rem;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-135deg);transition:transform .18s ease;}.plan-your-day__start-toggle.is-collapsed .plan-your-day__start-toggle-icon{transform:rotate(45deg);}.plan-your-day__start-panel{will-change:height;}.plan-your-day__category-results-scroll[aria-busy="true"],.plan-your-day [data-plan-trip-region][aria-busy="true"],.plan-your-day [data-plan-preview-card][aria-busy="true"] .plan-your-day__map-wrap,.plan-your-day [data-plan-preview-card][aria-busy="true"] .plan-your-day__summary{opacity:.72;filter:saturate(.88);}.plan-your-day__category-results-scroll[aria-busy="true"],.plan-your-day [data-plan-trip-region][aria-busy="true"],.plan-your-day [data-plan-preview-card][aria-busy="true"]{cursor:progress;}.plan-your-day__result-distance{margin:0;font-size:.88rem;font-weight:700;color:#8a4f0f;}.plan-your-day__results-list,.plan-your-day__trip-list{margin:0;padding:0;list-style:none;}.plan-your-day__load-more{display:flex;justify-content:center;margin-top:.85rem;}.plan-your-day__result-item,.plan-your-day__trip-item{display:flex;flex-wrap:wrap;gap:.8rem;position:relative;padding:.85rem;border:1px solid rgba(23,48,56,.14);border-radius:.5rem;background:linear-gradient(180deg,#fffdf9 0%,#f7f0e0 100%);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;}.plan-your-day__result-copy,.plan-your-day__trip-copy{display:grid;gap:.15rem;}.plan-your-day__result-copy h4,.plan-your-day__trip-copy h4{font-size:1rem;}.plan-your-day__result-tools,.plan-your-day__trip-tools{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;}.plan-your-day__result-link,.plan-your-day__result-add,.plan-your-day__load-more-button,.plan-your-day__trip-tools a,.plan-your-day__trip-tools button,.plan-your-day__reorder-disabled,.plan-your-day__submit,.plan-your-day__maps-link,.plan-your-day__clear-link,.plan-your-day__load-more-button,.plan-your-day__category-search-button{display:inline-flex;align-items:center;justify-content:center;min-height:2.625rem;height:42px;padding:.65rem .95rem;border:1px solid transparent;border-radius:999px;appearance:none;cursor:pointer;font-family:inherit;font-size:.9rem;font-weight:700;line-height:1;text-decoration:none;transition:transform .18s ease,background-color .18s ease,color .18s ease,border-color .18s ease,box-shadow .18s ease;}.plan-your-day__result-link,.plan-your-day__load-more-button,.plan-your-day__trip-tools a,.plan-your-day__trip-tools button,.plan-your-day__maps-link{border-color:rgba(23,48,56,.16);background:#fffefb;color:#173038;}.plan-your-day__result-link:hover,.plan-your-day__result-link:active,.plan-your-day__load-more-button:hover:not(:disabled),.plan-your-day__load-more-button:active:not(:disabled),.plan-your-day__trip-tools a:hover,.plan-your-day__trip-tools a:active,.plan-your-day__trip-tools button:hover:not(:disabled),.plan-your-day__trip-tools button:active:not(:disabled),.plan-your-day__maps-link:hover:not(.is-disabled),.plan-your-day__maps-link:active:not(.is-disabled){transform:translateY(-1px);border-color:rgba(138,79,15,.42);background:#f6eddb;}.plan-your-day__result-add,.plan-your-day__submit,.plan-your-day__load-more-button,.plan-your-day__category-search-button{background:#173038;color:#fffdf7;}.plan-your-day__result-add:hover,.plan-your-day__result-add:active,.plan-your-day__load-more-button:hover:not(:disabled),.plan-your-day__load-more-button:active:not(:disabled),.plan-your-day__category-search-button:hover,.plan-your-day__category-search-button:active,.plan-your-day__submit:hover,.plan-your-day__submit:active{transform:translateY(-1px);background:#0f2228;}.plan-your-day__load-more-button{min-width:11rem;}.plan-your-day__load-more-button.is-loading,.plan-your-day__load-more-button:disabled{cursor:progress;opacity:.82;transform:none;}.plan-your-day__result-added{display:inline-flex;align-items:center;justify-content:center;min-height:2.625rem;padding:.65rem .95rem;border-radius:999px;background:rgba(23,48,56,.08);color:#173038;font-size:.9rem;font-weight:700;}.plan-your-day__load-more{display:flex;justify-content:flex-start;margin-top:.9rem;}.plan-your-day__load-more-button:disabled,.plan-your-day__load-more-button.is-loading{opacity:.72;cursor:progress;transform:none;}.plan-your-day__waypoint-feedback{position:absolute;top:.65rem;right:.65rem;z-index:2;max-width:calc(100% - 1.3rem);padding:.45rem .7rem;border:1px solid rgba(255,255,255,.55);border-radius:.5rem;background:#173038;box-shadow:0 .5rem 1rem rgba(23,48,56,.18);color:#fffdf7;font-size:.85rem;font-weight:700;line-height:1.2;pointer-events:none;}.plan-your-day.is-enhanced .plan-your-day__trip-item:hover{border-color:rgba(138,79,15,.4);box-shadow:0 .85rem 1.8rem rgba(23,48,56,.08);}.plan-your-day__trip-item.is-dragging{opacity:.7;transform:scale(.985);box-shadow:0 1.1rem 2rem rgba(23,48,56,.14);}.plan-your-day__trip-item.is-drop-before{box-shadow:inset 0 4px 0 #8a4f0f;}.plan-your-day__trip-item.is-drop-after{box-shadow:inset 0 -4px 0 #8a4f0f;}.plan-your-day__trip-main{display:grid;grid-template-columns:auto 1fr;gap:.75rem;}.plan-your-day__trip-number{display:inline-flex;align-items:center;justify-content:center;width:2.1rem;height:2.1rem;border-radius:999px;background:#173038;color:#fffdf7;font-size:.95rem;font-weight:700;}.plan-your-day__drag-handle{display:none;align-items:center;justify-content:center;min-width:4rem;padding:.6rem 16px .4rem 32px;border-radius:1000px;background:#173038;color:#fffef9;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;position:relative;height:42px;}.plan-your-day__drag-handle:before{content:'';display:inline-block;aspect-ratio:94/150;background:url("../icons/grip-vertical-solid.svg") center no-repeat;background-size:10px;position:absolute;left:8px;top:5px;bottom:5px;margin:auto 0;}.plan-your-day.is-enhanced .plan-your-day__drag-handle{display:inline-flex;}.plan-your-day__reorder-links{display:inline-flex;gap:.4rem;flex-wrap:wrap;}.plan-your-day__reorder-disabled{opacity:.45;cursor:not-allowed;border-color:rgba(23,48,56,.12);background:rgba(255,255,255,.65);color:#5c737a;}.plan-your-day__results-empty,.plan-your-day__trip-empty,.plan-your-day__preview-empty{display:grid;gap:.55rem;place-items:start;padding:1.1rem;border:1px dashed rgba(23,48,56,.26);border-radius:.5rem;background:rgba(255,255,255,.62);}.plan-your-day__results-empty h4,.plan-your-day__trip-empty h4,.plan-your-day__preview-empty h4{font-size:1.15rem;}.plan-your-day__custom-start{margin-top:.85rem;}.plan-your-day__custom-start label{display:inline-block;margin-bottom:.45rem;font-weight:700;color:#102027;}.plan-your-day__custom-start input{width:100%;min-height:2.85rem;padding:.75rem .9rem;border:1px solid rgba(23,48,56,.16);border-radius:.5rem;background:#fffefb;color:#102027;}.plan-your-day__input-help,.plan-your-day__auto-note,.plan-your-day__noscript-note{margin-top:.55rem;}.plan-your-day__actions{display:flex;gap:.75rem;flex-wrap:wrap;margin-top:.85rem;}.plan-your-day__clear-link{border-color:rgba(23,48,56,.12);background:transparent;color:#173038;}.plan-your-day__clear-link:hover,.plan-your-day__clear-link:active{transform:translateY(-1px);border-color:rgba(23,48,56,.22);background:rgba(255,255,255,.7);}.plan-your-day__maps-link.is-disabled,.plan-your-day__maps-link[aria-disabled="true"]{opacity:.5;cursor:not-allowed;pointer-events:none;}.plan-your-day__messages{display:grid;gap:.7rem;margin-bottom:1rem;}.plan-your-day__message{padding:.75rem .85rem;border-radius:.5rem;border:1px solid transparent;font-size:.92rem;line-height:1.45;}.plan-your-day__message--note{border-color:rgba(23,48,56,.12);background:rgba(223,236,241,.75);color:#163038;}.plan-your-day__message--warning{border-color:rgba(138,79,15,.2);background:rgba(255,243,225,.9);color:#6e410d;}.plan-your-day__summary{margin-top:1rem;margin-bottom:0;padding:.9rem;border-radius:.5rem;background:linear-gradient(180deg,#fffdf7 0%,#f8f1e0 100%);border:1px solid rgba(23,48,56,.1);}.plan-your-day__summary-handoff{display:flex;flex-direction:column;gap:.45rem;margin-top:1rem;}.plan-your-day__summary-handoff-label{margin:0;font-size:.84rem;font-weight:700;letter-spacing:0;text-transform:uppercase;color:#8a4f0f;}.plan-your-day__maps-link--summary{width:100%;min-height:3.35rem;padding:.9rem 1.2rem;font-size:1.15rem;}.plan-your-day__summary-grid div{padding:.7rem .8rem;border-radius:.5rem;background:rgba(255,255,255,.7);}.plan-your-day__summary-grid dt{margin-bottom:.35rem;font-size:.84rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a4f0f;}.plan-your-day__summary-grid dd{margin:0;font-size:.95rem;color:#102027;}.plan-your-day__map-wrap{overflow:hidden;border-radius:1rem;border:1px solid rgba(23,48,56,.12);background:#f3ede0;}.plan-your-day__map-frame{display:block;width:100%;min-height:24rem;border:0;background:#f3ede0;}@media (min-width:980px){.plan-your-day__hero{grid-template-columns:minmax(0,1fr) auto;align-items:end}.plan-your-day__layout{grid-template-columns:minmax(18rem,30rem) minmax(0,1fr)}.plan-your-day__preview-card{position:sticky;top:7.75rem}.plan-your-day__summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.plan-your-day__result-item,.plan-your-day__trip-item{grid-template-columns:minmax(0,1fr) auto}.plan-your-day__trip-tools{align-self:center;justify-content:end}}@media (max-width:979px){.plan-your-day__card-header,.plan-your-day__summary-top{flex-direction:column;align-items:start}}@media (max-width:639px){.plan-your-day__surface,.plan-your-day__card{border-radius:1rem}.plan-your-day__surface{padding:1rem}.plan-your-day__category-option-body,.plan-your-day__start-option-body{padding-left:2.75rem}.plan-your-day__category-trigger{align-items:start}.plan-your-day__category-trigger-side{gap:.55rem}.plan-your-day__category-results-scroll{max-height:min(22rem,55vh)}.plan-your-day__actions,.plan-your-day__result-tools,.plan-your-day__trip-tools,.plan-your-day__reorder-links{width:100%}.plan-your-day__result-link,.plan-your-day__result-add,.plan-your-day__trip-tools a,.plan-your-day__trip-tools button,.plan-your-day__reorder-disabled,.plan-your-day__submit,.plan-your-day__maps-link,.plan-your-day__clear-link,.plan-your-day__category-search-button{width:100%}.plan-your-day__summary-grid{grid-template-columns:1fr}.plan-your-day__map-frame{min-height:20rem}}@media (min-width:768px){.plan-your-day__category-description{display:block}.plan-your-day__category-search-controls{grid-template-columns:minmax(0,1fr) auto;align-items:center}}@media (max-width:767px){.plan-your-day__category-description{display:none}} \ No newline at end of file +@font-face{font-family:"Noto Sans";src:url("../fonts/noto-sans-v42-latin-ext-300.woff2") format("woff2");font-style:normal;font-weight:300;font-display:swap;}@font-face{font-family:"Noto Sans";src:url("../fonts/noto-sans-v42-latin-ext-regular.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap;}@font-face{font-family:"Noto Sans";src:url("../fonts/noto-sans-v42-latin-ext-700.woff2") format("woff2");font-style:normal;font-weight:700;font-display:swap;}.plan-your-day,.plan-your-day *,.plan-your-day *::before,.plan-your-day *::after{box-sizing:border-box;}.plan-your-day{--focus-ring-color:#1168d8;--focus-ring-offset-color:#ffffff;--pyd-font-family:"Noto Sans",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--pyd-text:#173038;--pyd-heading:#102027;--pyd-hero-heading:#112127;--pyd-muted:#35545d;--pyd-accent:#8a4f0f;--pyd-accent-soft:rgba(138,79,15,.2);--pyd-accent-border:rgba(138,79,15,.42);--pyd-border-subtle:rgba(23,48,56,.08);--pyd-border:rgba(23,48,56,.12);--pyd-border-medium:rgba(23,48,56,.14);--pyd-border-strong:rgba(23,48,56,.16);--pyd-border-emphasis:rgba(23,48,56,.22);--pyd-control-mark-border:rgba(23,48,56,.35);--pyd-surface-bg:radial-gradient(circle at top right,rgba(241,181,67,.18),transparent 26%),linear-gradient(180deg,#fffdf8 0%,#f4ecdb 100%);--pyd-surface-shadow:0 .85rem 2rem rgba(23,48,56,.12);--pyd-card-bg:rgba(255,255,255,.82);--pyd-card-shadow:0 .65rem 1.45rem rgba(23,48,56,.06);--pyd-panel-bg:#fffefb;--pyd-option-bg:#fffdf9;--pyd-option-selected-bg:linear-gradient(180deg,#fffaf0 0%,#f7ecd6 100%);--pyd-option-selected-shadow:0 .85rem 1.8rem rgba(138,79,15,.12);--pyd-radio-bg:#ffffff;--pyd-radio-checked-bg:radial-gradient(circle at center,var(--pyd-accent) 0 45%,transparent 48% 100%),#fff7e9;--pyd-chip-bg:rgba(23,48,56,.08);--pyd-hero-note-bg:rgba(255,255,255,.72);--pyd-primary-bg:#173038;--pyd-primary-hover-bg:#0f2228;--pyd-primary-text:#fffdf7;--pyd-primary-soft-text:#fffaf0;--pyd-secondary-hover-bg:#f6eddb;--pyd-interactive-hover-bg:rgba(255,255,255,.38);--pyd-item-bg:linear-gradient(180deg,#fffdf9 0%,#f7f0e0 100%);--pyd-item-hover-shadow:0 .85rem 1.8rem rgba(23,48,56,.08);--pyd-item-drag-shadow:0 1.1rem 2rem rgba(23,48,56,.14);--pyd-feedback-border:rgba(255,255,255,.55);--pyd-feedback-shadow:0 .5rem 1rem rgba(23,48,56,.18);--pyd-disabled-bg:rgba(255,255,255,.65);--pyd-disabled-text:#5c737a;--pyd-empty-border:rgba(23,48,56,.26);--pyd-empty-bg:rgba(255,255,255,.62);--pyd-summary-bg:linear-gradient(180deg,#fffdf7 0%,#f8f1e0 100%);--pyd-summary-tile-bg:rgba(255,255,255,.7);--pyd-note-border:rgba(23,48,56,.12);--pyd-note-bg:rgba(223,236,241,.75);--pyd-note-text:#163038;--pyd-warning-border:rgba(138,79,15,.2);--pyd-warning-bg:rgba(255,243,225,.9);--pyd-warning-text:#6e410d;--pyd-map-bg:#f3ede0;--pyd-scrollbar-track:rgba(23,48,56,.08);--pyd-scrollbar-thumb:rgba(138,79,15,.55);--pyd-scrollbar-thumb-border:rgba(255,255,255,.65);color-scheme:light;font-family:var(--pyd-font-family);line-height:1.5;padding:0;}.plan-your-day[data-plan-color-mode="dark"]{--focus-ring-color:#9fc5ff;--focus-ring-offset-color:#232323;--pyd-text:#f3f1ea;--pyd-heading:#fffaf0;--pyd-hero-heading:#fffdf7;--pyd-muted:#c5d0d1;--pyd-accent:#f1b543;--pyd-accent-soft:rgba(241,181,67,.24);--pyd-accent-border:rgba(241,181,67,.55);--pyd-border-subtle:rgba(255,255,255,.08);--pyd-border:rgba(255,255,255,.12);--pyd-border-medium:rgba(255,255,255,.14);--pyd-border-strong:rgba(255,255,255,.18);--pyd-border-emphasis:rgba(255,255,255,.26);--pyd-control-mark-border:rgba(255,255,255,.42);--pyd-surface-bg:radial-gradient(circle at top right,rgba(241,181,67,.14),transparent 28%),linear-gradient(180deg,#2e2e2e 0%,#232323 100%);--pyd-surface-shadow:0 .85rem 2rem rgba(0,0,0,.34);--pyd-card-bg:rgba(48,48,48,.92);--pyd-card-shadow:0 .65rem 1.45rem rgba(0,0,0,.24);--pyd-panel-bg:#2b2b2b;--pyd-option-bg:#292929;--pyd-option-selected-bg:linear-gradient(180deg,#3a3427 0%,#2b2925 100%);--pyd-option-selected-shadow:0 .85rem 1.8rem rgba(0,0,0,.28);--pyd-radio-bg:#232323;--pyd-radio-checked-bg:radial-gradient(circle at center,var(--pyd-accent) 0 45%,transparent 48% 100%),#302818;--pyd-chip-bg:rgba(255,255,255,.1);--pyd-hero-note-bg:rgba(255,255,255,.08);--pyd-primary-bg:#f1b543;--pyd-primary-hover-bg:#ffd36b;--pyd-primary-text:#232323;--pyd-primary-soft-text:#232323;--pyd-secondary-hover-bg:rgba(241,181,67,.16);--pyd-interactive-hover-bg:rgba(255,255,255,.08);--pyd-item-bg:linear-gradient(180deg,#303030 0%,#282828 100%);--pyd-item-hover-shadow:0 .85rem 1.8rem rgba(0,0,0,.26);--pyd-item-drag-shadow:0 1.1rem 2rem rgba(0,0,0,.36);--pyd-feedback-border:rgba(241,181,67,.36);--pyd-feedback-shadow:0 .5rem 1rem rgba(0,0,0,.28);--pyd-disabled-bg:rgba(255,255,255,.08);--pyd-disabled-text:#9aa6a8;--pyd-empty-border:rgba(255,255,255,.24);--pyd-empty-bg:rgba(255,255,255,.07);--pyd-summary-bg:linear-gradient(180deg,#303030 0%,#292929 100%);--pyd-summary-tile-bg:rgba(255,255,255,.08);--pyd-note-border:rgba(145,198,217,.28);--pyd-note-bg:rgba(62,91,101,.5);--pyd-note-text:#e9f6f9;--pyd-warning-border:rgba(241,181,67,.34);--pyd-warning-bg:rgba(78,57,24,.68);--pyd-warning-text:#ffe1a3;--pyd-map-bg:#303030;--pyd-scrollbar-track:rgba(255,255,255,.08);--pyd-scrollbar-thumb:rgba(241,181,67,.62);--pyd-scrollbar-thumb-border:rgba(35,35,35,.9);color-scheme:dark;}@media (prefers-color-scheme:dark){.plan-your-day[data-plan-color-mode-default="system"]:not([data-plan-color-mode]){--focus-ring-color:#9fc5ff;--focus-ring-offset-color:#232323;--pyd-text:#f3f1ea;--pyd-heading:#fffaf0;--pyd-hero-heading:#fffdf7;--pyd-muted:#c5d0d1;--pyd-accent:#f1b543;--pyd-accent-soft:rgba(241,181,67,.24);--pyd-accent-border:rgba(241,181,67,.55);--pyd-border-subtle:rgba(255,255,255,.08);--pyd-border:rgba(255,255,255,.12);--pyd-border-medium:rgba(255,255,255,.14);--pyd-border-strong:rgba(255,255,255,.18);--pyd-border-emphasis:rgba(255,255,255,.26);--pyd-control-mark-border:rgba(255,255,255,.42);--pyd-surface-bg:radial-gradient(circle at top right,rgba(241,181,67,.14),transparent 28%),linear-gradient(180deg,#2e2e2e 0%,#232323 100%);--pyd-surface-shadow:0 .85rem 2rem rgba(0,0,0,.34);--pyd-card-bg:rgba(48,48,48,.92);--pyd-card-shadow:0 .65rem 1.45rem rgba(0,0,0,.24);--pyd-panel-bg:#2b2b2b;--pyd-option-bg:#292929;--pyd-option-selected-bg:linear-gradient(180deg,#3a3427 0%,#2b2925 100%);--pyd-option-selected-shadow:0 .85rem 1.8rem rgba(0,0,0,.28);--pyd-radio-bg:#232323;--pyd-radio-checked-bg:radial-gradient(circle at center,var(--pyd-accent) 0 45%,transparent 48% 100%),#302818;--pyd-chip-bg:rgba(255,255,255,.1);--pyd-hero-note-bg:rgba(255,255,255,.08);--pyd-primary-bg:#f1b543;--pyd-primary-hover-bg:#ffd36b;--pyd-primary-text:#232323;--pyd-primary-soft-text:#232323;--pyd-secondary-hover-bg:rgba(241,181,67,.16);--pyd-interactive-hover-bg:rgba(255,255,255,.08);--pyd-item-bg:linear-gradient(180deg,#303030 0%,#282828 100%);--pyd-item-hover-shadow:0 .85rem 1.8rem rgba(0,0,0,.26);--pyd-item-drag-shadow:0 1.1rem 2rem rgba(0,0,0,.36);--pyd-feedback-border:rgba(241,181,67,.36);--pyd-feedback-shadow:0 .5rem 1rem rgba(0,0,0,.28);--pyd-disabled-bg:rgba(255,255,255,.08);--pyd-disabled-text:#9aa6a8;--pyd-empty-border:rgba(255,255,255,.24);--pyd-empty-bg:rgba(255,255,255,.07);--pyd-summary-bg:linear-gradient(180deg,#303030 0%,#292929 100%);--pyd-summary-tile-bg:rgba(255,255,255,.08);--pyd-note-border:rgba(145,198,217,.28);--pyd-note-bg:rgba(62,91,101,.5);--pyd-note-text:#e9f6f9;--pyd-warning-border:rgba(241,181,67,.34);--pyd-warning-bg:rgba(78,57,24,.68);--pyd-warning-text:#ffe1a3;--pyd-map-bg:#303030;--pyd-scrollbar-track:rgba(255,255,255,.08);--pyd-scrollbar-thumb:rgba(241,181,67,.62);--pyd-scrollbar-thumb-border:rgba(35,35,35,.9);color-scheme:dark}}.plan-your-day img,.plan-your-day svg{display:block;max-width:100%;}.plan-your-day button,.plan-your-day input,.plan-your-day select,.plan-your-day textarea{touch-action:manipulation;}.plan-your-day button{cursor:pointer;}.plan-your-day a{color:inherit;}.plan-your-day .screen-reader-text,.plan-your-day .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}.plan-your-day{width:min(100% - 2rem,1180px);margin:clamp(1rem,4vw,3rem) auto;color:var(--pyd-text);container-type:inline-size;}.plan-your-day [hidden]{display:none!important;}.plan-your-day__surface{padding:clamp(1rem,1.6vw,1.5rem);border:thin solid var(--pyd-border);border-radius:1.5rem;background:var(--pyd-surface-bg);box-shadow:var(--pyd-surface-shadow);}.plan-your-day__hero{display:grid;gap:.8rem;margin-bottom:1.2rem;padding-bottom:1rem;border-bottom:thin solid var(--pyd-border);}.plan-your-day__eyebrow,.plan-your-day__summary-eyebrow,.plan-your-day__trip-kicker{margin:0;font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--pyd-accent);}.plan-your-day__hero h2{font-size:clamp(1.8rem,3.3vw,2.45rem);line-height:1;color:var(--pyd-hero-heading);font-weight:700;}.plan-your-day__intro,.plan-your-day__hero-note,.plan-your-day__card-header p,.plan-your-day__category-description,.plan-your-day__result-meta,.plan-your-day__trip-meta,.plan-your-day__start-description,.plan-your-day__summary-overview,.plan-your-day__preview-empty p,.plan-your-day__results-empty p,.plan-your-day__trip-empty p,.plan-your-day__input-help,.plan-your-day__auto-note,.plan-your-day__noscript-note{margin:0;font-size:.95rem;line-height:1.5;color:var(--pyd-muted);}.plan-your-day__hero-note{max-width:33rem;padding:.75rem .9rem;border-radius:1rem;background:var(--pyd-hero-note-bg);border:thin solid var(--pyd-border-subtle);}.plan-your-day__layout{display:grid;gap:1.2rem;align-items:start;}.plan-your-day__controls,.plan-your-day__preview-panel{display:grid;gap:.85rem;min-width:0;}.plan-your-day__card{min-width:0;padding:1rem;border:thin solid var(--pyd-border);border-radius:1.2rem;background:var(--pyd-card-bg);box-shadow:var(--pyd-card-shadow);}.plan-your-day__card-header,.plan-your-day__summary-top{display:flex;align-items:start;justify-content:space-between;gap:1rem;margin-bottom:.8rem;}.plan-your-day__trip-header-actions{display:inline-flex;align-items:center;justify-content:flex-end;gap:.6rem;flex-wrap:wrap;}.plan-your-day__card h3,.plan-your-day__card h4{color:var(--pyd-heading);font-weight:700;margin-top:0;}.plan-your-day__card h3{font-size:1.2rem;margin-bottom:.25rem;}.plan-your-day__fieldset{border:0;padding:0;margin:0;}.plan-your-day__count-pill,.plan-your-day__summary-count{display:inline-flex;align-items:center;justify-content:center;min-height:1.8rem;padding:.3rem .7rem;border-radius:999px;background:var(--pyd-primary-bg);color:var(--pyd-primary-soft-text);font-size:.85rem;font-weight:700;white-space:nowrap;}.plan-your-day__category-grid,.plan-your-day__start-options,.plan-your-day__results-list,.plan-your-day__trip-list,.plan-your-day__summary-grid{display:grid;gap:.7rem;}.plan-your-day__category-option,.plan-your-day__start-option{display:block;cursor:pointer;}.plan-your-day__category-option input,.plan-your-day__start-option input{position:absolute;opacity:0;pointer-events:none;}.plan-your-day__category-option-body,.plan-your-day__start-option-body{display:grid;gap:.35rem;min-height:100%;padding:.85rem .9rem .85rem 2.7rem;border:thin solid var(--pyd-border-strong);border-radius:1rem;background:var(--pyd-option-bg);position:relative;transition:border-color .2s ease,transform .2s ease,box-shadow .2s ease,background-color .2s ease;}.plan-your-day__category-option-body::before,.plan-your-day__start-option-body::before{content:"";position:absolute;top:.92rem;left:.9rem;width:1.05rem;height:1.05rem;border:2px solid var(--pyd-control-mark-border);border-radius:999px;background:var(--pyd-radio-bg);}.plan-your-day__category-option input:checked + .plan-your-day__category-option-body,.plan-your-day__start-option input:checked + .plan-your-day__start-option-body{border-color:var(--pyd-accent-border);background:var(--pyd-option-selected-bg);box-shadow:var(--pyd-option-selected-shadow);transform:translateY(-1px);}.plan-your-day__category-option input:checked + .plan-your-day__category-option-body::before,.plan-your-day__start-option input:checked + .plan-your-day__start-option-body::before{border-color:var(--pyd-accent);background:var(--pyd-radio-checked-bg);}.plan-your-day__category-radio:focus-visible + .plan-your-day__category-option-body,.plan-your-day__category-trigger:focus-visible,.plan-your-day__category-search input:focus-visible,.plan-your-day__category-search-button:focus-visible,.plan-your-day__color-mode-toggle:focus-visible,.plan-your-day__load-more-button:focus-visible,.plan-your-day__start-option input:focus-visible + .plan-your-day__start-option-body,.plan-your-day__start-toggle:focus-visible,.plan-your-day__custom-start input:focus-visible,.plan-your-day__submit:focus-visible,.plan-your-day__load-more-button:focus-visible,.plan-your-day__maps-link:focus-visible,.plan-your-day__clear-link:focus-visible,.plan-your-day__result-add:focus-visible,.plan-your-day__result-link:focus-visible,.plan-your-day__trip-tools a:focus-visible,.plan-your-day__trip-tools button:focus-visible{outline:3px solid var(--focus-ring-color);outline-offset:3px;box-shadow:0 0 0 3px var(--focus-ring-offset-color);}.plan-your-day__category-title,.plan-your-day__start-title{display:block;color:var(--pyd-heading);font-size:1rem;font-weight:700;}.plan-your-day__category-accordion{display:grid;gap:.7rem;}.plan-your-day__category-search{margin-bottom:.85rem;}.plan-your-day__category-search-controls{display:grid;gap:.65rem;}.plan-your-day__category-search input{width:100%;min-height:2.85rem;padding:.75rem .9rem;border:thin solid var(--pyd-border-strong);border-radius:.5rem;background:var(--pyd-panel-bg);color:var(--pyd-heading);}.plan-your-day__category-search-button{justify-self:start;}.plan-your-day__custom-search-results{margin-bottom:.85rem;}.plan-your-day__category-accordion-item{border:thin solid var(--pyd-border-medium);border-radius:1rem;background:var(--pyd-item-bg);transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease;}.plan-your-day__category-accordion-item.is-expanded{border-color:var(--pyd-accent-border);box-shadow:var(--pyd-item-hover-shadow);}.plan-your-day__category-accordion-item.is-expanded>h4 button{box-shadow:0 4px 5px -5px #333333d7;}.plan-your-day__category-accordion-heading{margin:0;}.plan-your-day__category-trigger{appearance:none;display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;padding:.95rem 1rem;border:0;border-radius:1rem;background:transparent;color:inherit;text-align:left;cursor:pointer;transition:transform .18s ease,background-color .18s ease,color .18s ease;}.plan-your-day__category-trigger:hover,.plan-your-day__category-trigger:active{transform:translateY(-1px);background:var(--pyd-interactive-hover-bg);}.plan-your-day__category-trigger-copy{display:grid;gap:.18rem;min-width:0;flex:1 1 auto;}.plan-your-day__category-trigger-side{display:inline-flex;align-items:center;gap:.7rem;flex-shrink:0;}.plan-your-day__category-trigger-icon{width:.72rem;height:.72rem;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform .18s ease;}.plan-your-day__category-trigger[aria-expanded="true"] .plan-your-day__category-trigger-icon{transform:rotate(-135deg);}.plan-your-day__category-panel{padding:.66rem 1rem 1rem;}.plan-your-day__custom-search-header{margin:0;}.plan-your-day__custom-search-header h4{margin:0;font-weight:700;}.plan-your-day__category-results-scroll{max-height:min(28rem,65vh);overflow-y:auto;padding-right:.35rem;scrollbar-width:thin;scrollbar-color:var(--pyd-scrollbar-thumb) var(--pyd-scrollbar-track);transition:opacity .18s ease,filter .18s ease;}.plan-your-day__category-results-scroll::-webkit-scrollbar{width:.65rem;}.plan-your-day__category-results-scroll::-webkit-scrollbar-track{background:var(--pyd-scrollbar-track);border-radius:999px;}.plan-your-day__category-results-scroll::-webkit-scrollbar-thumb{background:var(--pyd-scrollbar-thumb);border-radius:999px;border:2px solid var(--pyd-scrollbar-thumb-border);}.plan-your-day__start-toggle{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:.55rem;min-height:2.5rem;padding:.55rem .9rem;border:thin solid var(--pyd-border-medium);border-radius:999px;background:var(--pyd-panel-bg);color:var(--pyd-text);font-size:.88rem;font-weight:700;line-height:1;cursor:pointer;transition:transform .18s ease,border-color .18s ease,background-color .18s ease,color .18s ease;}.plan-your-day__start-toggle:hover,.plan-your-day__start-toggle:active{transform:translateY(-1px);border-color:var(--pyd-accent-border);background:var(--pyd-secondary-hover-bg);}.plan-your-day__hero-tools{display:flex;align-items:center;justify-content:flex-start;}.plan-your-day__color-mode-toggle{appearance:none;display:inline-flex;position:relative;align-items:center;gap:.55rem;min-height:2.5rem;padding:.45rem .75rem .45rem .5rem;border:thin solid var(--pyd-border-medium);border-radius:999px;background:var(--pyd-panel-bg);color:var(--pyd-text);cursor:pointer;font-family:inherit;font-size:.88rem;font-weight:700;line-height:1;transition:transform .18s ease,border-color .18s ease,background-color .18s ease,color .18s ease;}.plan-your-day__color-mode-toggle::before{content:"";width:2.2rem;height:1.25rem;border-radius:999px;background:var(--pyd-chip-bg);box-shadow:inset 0 0 0 thin var(--pyd-border);}.plan-your-day__color-mode-toggle::after{content:"";position:absolute;width:.85rem;height:.85rem;margin-left:.2rem;border-radius:999px;background:var(--pyd-primary-bg);transform:translateX(0);transition:background-color .18s ease,transform .18s ease;}.plan-your-day__color-mode-toggle[aria-pressed="true"]::after{transform:translateX(.95rem);}.plan-your-day__color-mode-toggle:hover,.plan-your-day__color-mode-toggle:active{transform:translateY(-1px);border-color:var(--pyd-accent-border);background:var(--pyd-secondary-hover-bg);}.plan-your-day__start-toggle-icon{width:.6rem;height:.6rem;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-135deg);transition:transform .18s ease;}.plan-your-day__start-toggle.is-collapsed .plan-your-day__start-toggle-icon{transform:rotate(45deg);}.plan-your-day__start-panel{will-change:height;}.plan-your-day__category-results-scroll[aria-busy="true"],.plan-your-day [data-plan-trip-region][aria-busy="true"],.plan-your-day [data-plan-preview-card][aria-busy="true"] .plan-your-day__map-wrap,.plan-your-day [data-plan-preview-card][aria-busy="true"] .plan-your-day__summary{opacity:.72;filter:saturate(.88);}.plan-your-day__category-results-scroll[aria-busy="true"],.plan-your-day [data-plan-trip-region][aria-busy="true"],.plan-your-day [data-plan-preview-card][aria-busy="true"]{cursor:progress;}.plan-your-day__result-distance{margin:0;font-size:.88rem;font-weight:700;color:var(--pyd-accent);}.plan-your-day__results-list,.plan-your-day__trip-list{margin:0;padding:0;list-style:none;}.plan-your-day__load-more{display:flex;justify-content:center;margin-top:.85rem;}.plan-your-day__result-item,.plan-your-day__trip-item{display:flex;flex-wrap:wrap;gap:.8rem;position:relative;padding:.85rem;border:thin solid var(--pyd-border-medium);border-radius:.5rem;background:var(--pyd-item-bg);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;}.plan-your-day__result-copy,.plan-your-day__trip-copy{display:grid;gap:.15rem;min-width:0;}.plan-your-day__result-copy h4,.plan-your-day__trip-copy h4{font-size:1rem;margin:0;font-weight:700;}.plan-your-day__result-tools,.plan-your-day__trip-tools{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;}.plan-your-day__result-link,.plan-your-day__result-add,.plan-your-day__load-more-button,.plan-your-day__trip-tools a,.plan-your-day__trip-tools button,.plan-your-day__reorder-disabled,.plan-your-day__submit,.plan-your-day__maps-link,.plan-your-day__clear-link,.plan-your-day__load-more-button,.plan-your-day__category-search-button{display:inline-flex;align-items:center;justify-content:center;min-height:2.625rem;height:42px;padding:.65rem .95rem;border:thin solid transparent;border-radius:999px;appearance:none;cursor:pointer;font-family:inherit;font-size:.9rem;font-weight:700;line-height:1;text-decoration:none;transition:transform .18s ease,background-color .18s ease,color .18s ease,border-color .18s ease,box-shadow .18s ease;}.plan-your-day__result-link,.plan-your-day__load-more-button,.plan-your-day__trip-tools a,.plan-your-day__trip-tools button,.plan-your-day__maps-link{border-color:var(--pyd-border-strong);background:var(--pyd-panel-bg);color:var(--pyd-text);}.plan-your-day__result-link:hover,.plan-your-day__result-link:active,.plan-your-day__load-more-button:hover:not(:disabled),.plan-your-day__load-more-button:active:not(:disabled),.plan-your-day__trip-tools a:hover,.plan-your-day__trip-tools a:active,.plan-your-day__trip-tools button:hover:not(:disabled),.plan-your-day__trip-tools button:active:not(:disabled),.plan-your-day__maps-link:hover:not(.is-disabled),.plan-your-day__maps-link:active:not(.is-disabled){transform:translateY(-1px);border-color:var(--pyd-accent-border);background:var(--pyd-secondary-hover-bg);}.plan-your-day__result-add,.plan-your-day__submit,.plan-your-day__load-more-button,.plan-your-day__category-search-button{background:var(--pyd-primary-bg);color:var(--pyd-primary-text);}.plan-your-day__result-add:hover,.plan-your-day__result-add:active,.plan-your-day__load-more-button:hover:not(:disabled),.plan-your-day__load-more-button:active:not(:disabled),.plan-your-day__category-search-button:hover,.plan-your-day__category-search-button:active,.plan-your-day__submit:hover,.plan-your-day__submit:active{transform:translateY(-1px);background:var(--pyd-primary-hover-bg);}.plan-your-day__load-more-button{min-width:11rem;}.plan-your-day__load-more-button.is-loading,.plan-your-day__load-more-button:disabled{cursor:progress;opacity:.82;transform:none;}.plan-your-day__result-added{display:inline-flex;align-items:center;justify-content:center;min-height:2.625rem;padding:.65rem .95rem;border-radius:999px;background:var(--pyd-chip-bg);color:var(--pyd-text);font-size:.9rem;font-weight:700;}.plan-your-day__load-more{display:flex;justify-content:flex-start;margin-top:.9rem;}.plan-your-day__load-more-button:disabled,.plan-your-day__load-more-button.is-loading{opacity:.72;cursor:progress;transform:none;}.plan-your-day__waypoint-feedback{position:absolute;top:.65rem;right:.65rem;z-index:2;max-width:calc(100% - 1.3rem);padding:.45rem .7rem;border:thin solid var(--pyd-feedback-border);border-radius:.5rem;background:var(--pyd-primary-bg);box-shadow:var(--pyd-feedback-shadow);color:var(--pyd-primary-text);font-size:.85rem;font-weight:700;line-height:1.2;pointer-events:none;}.plan-your-day.is-enhanced .plan-your-day__trip-item:hover{border-color:var(--pyd-accent-border);box-shadow:var(--pyd-item-hover-shadow);}.plan-your-day__trip-item.is-dragging{opacity:.7;transform:scale(.985);box-shadow:var(--pyd-item-drag-shadow);}.plan-your-day__trip-item.is-drop-before{box-shadow:inset 0 4px 0 var(--pyd-accent);}.plan-your-day__trip-item.is-drop-after{box-shadow:inset 0 -4px 0 var(--pyd-accent);}.plan-your-day__trip-main{display:grid;grid-template-columns:auto 1fr;gap:.75rem;}.plan-your-day__trip-number{display:inline-flex;align-items:center;justify-content:center;width:2.1rem;height:2.1rem;border-radius:999px;background:var(--pyd-primary-bg);color:var(--pyd-primary-text);font-size:.95rem;font-weight:700;}.plan-your-day__drag-handle{display:none;align-items:center;justify-content:center;min-width:4rem;padding:.6rem 16px .4rem 32px;border-radius:1000px;background:var(--pyd-primary-bg);color:var(--pyd-primary-text);font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;position:relative;height:42px;}.plan-your-day__drag-handle:before{content:'';display:inline-block;aspect-ratio:94/150;background:url("../icons/grip-vertical-solid.svg") center no-repeat;background-size:10px;position:absolute;left:8px;top:5px;bottom:5px;margin:auto 0;}.plan-your-day.is-enhanced .plan-your-day__drag-handle{display:inline-flex;}.plan-your-day__reorder-links{display:inline-flex;gap:.4rem;flex-wrap:wrap;}.plan-your-day__reorder-disabled{opacity:.45;cursor:not-allowed;border-color:var(--pyd-border);background:var(--pyd-disabled-bg);color:var(--pyd-disabled-text);}.plan-your-day__results-empty,.plan-your-day__trip-empty,.plan-your-day__preview-empty{display:grid;gap:.55rem;place-items:start;padding:1.1rem;border:thin dashed var(--pyd-empty-border);border-radius:.5rem;background:var(--pyd-empty-bg);}.plan-your-day__results-empty h4,.plan-your-day__trip-empty h4,.plan-your-day__preview-empty h4{font-size:1.15rem;font-weight:700;}.plan-your-day__custom-start{margin-top:.85rem;}.plan-your-day__custom-start label{display:inline-block;margin-bottom:.45rem;font-weight:700;color:var(--pyd-heading);}.plan-your-day__custom-start input{width:100%;min-height:2.85rem;padding:.75rem .9rem;border:thin solid var(--pyd-border-strong);border-radius:.5rem;background:var(--pyd-panel-bg);color:var(--pyd-heading);}.plan-your-day__input-help,.plan-your-day__auto-note,.plan-your-day__noscript-note{margin-top:.55rem;}.plan-your-day__actions{display:flex;gap:.75rem;flex-wrap:wrap;margin-top:.85rem;}.plan-your-day__clear-link{border-color:var(--pyd-border);background:transparent;color:var(--pyd-text);}.plan-your-day__clear-link:hover,.plan-your-day__clear-link:active{transform:translateY(-1px);border-color:var(--pyd-border-emphasis);background:var(--pyd-summary-tile-bg);}.plan-your-day__maps-link.is-disabled,.plan-your-day__maps-link[aria-disabled="true"]{opacity:.5;cursor:not-allowed;pointer-events:none;}.plan-your-day__messages{display:grid;gap:.7rem;margin-bottom:1rem;}.plan-your-day__message{padding:.75rem .85rem;border-radius:.5rem;border:thin solid transparent;font-size:.92rem;line-height:1.45;}.plan-your-day__message--note{border-color:var(--pyd-note-border);background:var(--pyd-note-bg);color:var(--pyd-note-text);}.plan-your-day__message--warning{border-color:var(--pyd-warning-border);background:var(--pyd-warning-bg);color:var(--pyd-warning-text);}.plan-your-day__summary{margin-top:1rem;margin-bottom:0;padding:.9rem;border-radius:.5rem;background:var(--pyd-summary-bg);border:thin solid var(--pyd-border-subtle);}.plan-your-day__summary-handoff{display:flex;flex-direction:column;gap:.45rem;margin-top:1rem;}.plan-your-day__summary-handoff-label{margin:0;font-size:.84rem;font-weight:700;letter-spacing:0;text-transform:uppercase;color:var(--pyd-accent);}.plan-your-day__maps-link--summary{width:100%;min-height:3.35rem;padding:.9rem 1.2rem;font-size:1.15rem;}.plan-your-day__summary-grid div{padding:.7rem .8rem;border-radius:.5rem;background:var(--pyd-summary-tile-bg);}.plan-your-day__summary-grid dt{margin-bottom:.35rem;font-size:.84rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--pyd-accent);}.plan-your-day__summary-grid dd{margin:0;font-size:.95rem;color:var(--pyd-heading);}.plan-your-day__map-wrap{overflow:hidden;border-radius:1rem;border:thin solid var(--pyd-border);background:var(--pyd-map-bg);}.plan-your-day__map-frame{display:block;width:100%;min-height:24rem;border:0;background:var(--pyd-map-bg);}@media (min-width:980px){.plan-your-day__hero{grid-template-columns:minmax(0,1fr) auto;align-items:end}.plan-your-day__summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.plan-your-day__result-item,.plan-your-day__trip-item{grid-template-columns:minmax(0,1fr) auto}.plan-your-day__trip-tools{align-self:center;justify-content:end}}@container (min-width:60rem){.plan-your-day__layout{grid-template-columns:minmax(18rem,30rem) minmax(0,1fr)}.plan-your-day__preview-card{position:sticky;top:7.75rem}}@media (max-width:979px){.plan-your-day__card-header,.plan-your-day__summary-top{flex-direction:column;align-items:start}}@media (max-width:639px){.plan-your-day__surface,.plan-your-day__card{border-radius:1rem}.plan-your-day__surface{padding:1rem}.plan-your-day__category-option-body,.plan-your-day__start-option-body{padding-left:2.75rem}.plan-your-day__category-trigger{align-items:start}.plan-your-day__category-trigger-side{gap:.55rem}.plan-your-day__category-results-scroll{max-height:min(22rem,55vh)}.plan-your-day__actions,.plan-your-day__result-tools,.plan-your-day__trip-tools,.plan-your-day__reorder-links{width:100%}.plan-your-day__result-link,.plan-your-day__result-add,.plan-your-day__trip-tools a,.plan-your-day__trip-tools button,.plan-your-day__reorder-disabled,.plan-your-day__submit,.plan-your-day__maps-link,.plan-your-day__clear-link,.plan-your-day__category-search-button{width:100%}.plan-your-day__summary-grid{grid-template-columns:1fr}.plan-your-day__map-frame{min-height:20rem}}@media (min-width:768px){.plan-your-day__category-description{display:block}.plan-your-day__category-search-controls{grid-template-columns:minmax(0,1fr) auto;align-items:center}}@media (max-width:767px){.plan-your-day__category-description{display:none}} \ No newline at end of file diff --git a/plugin/plan-your-day/assets/fonts/noto-sans-v42-latin-ext-300.woff2 b/plugin/plan-your-day/assets/fonts/noto-sans-v42-latin-ext-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..82d39a530aad72c3b269d5662014adcb15ef0fbd GIT binary patch literal 65056 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 { const configElement = root.querySelector('[data-plan-config]'); @@ -100,6 +106,81 @@ }); }; + const isColorMode = (value) => COLOR_MODE_VALUES.includes(String(value || '')); + + const normalizeColorModeDefault = (value) => { + const colorModeDefault = String(value || ''); + + return COLOR_MODE_DEFAULT_VALUES.includes(colorModeDefault) ? colorModeDefault : COLOR_MODE_LIGHT; + }; + + const getStoredColorMode = () => { + try { + const storedMode = window.localStorage?.getItem(COLOR_MODE_STORAGE_KEY); + + return isColorMode(storedMode) ? storedMode : ''; + } catch (error) { + return ''; + } + }; + + const setStoredColorMode = (colorMode) => { + if (!isColorMode(colorMode)) { + return; + } + + try { + window.localStorage?.setItem(COLOR_MODE_STORAGE_KEY, colorMode); + } catch (error) { + // Local storage can be blocked; the in-page mode still applies. + } + }; + + const getColorModeMediaQuery = () => { + if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') { + return null; + } + + return window.matchMedia('(prefers-color-scheme: dark)'); + }; + + const resolveColorMode = (colorModeDefault, mediaQuery = getColorModeMediaQuery()) => { + const storedMode = getStoredColorMode(); + + if (isColorMode(storedMode)) { + return storedMode; + } + + const defaultMode = normalizeColorModeDefault(colorModeDefault); + + if (defaultMode === COLOR_MODE_SYSTEM) { + return mediaQuery?.matches ? COLOR_MODE_DARK : COLOR_MODE_LIGHT; + } + + return defaultMode; + }; + + const syncColorModeToggle = (refs, colorMode, strings) => { + if (!(refs.colorModeToggle instanceof HTMLButtonElement)) { + return; + } + + refs.colorModeToggle.hidden = false; + refs.colorModeToggle.setAttribute('aria-pressed', String(colorMode === COLOR_MODE_DARK)); + refs.colorModeToggle.setAttribute('aria-label', String(strings.darkModeLabel || 'Dark mode')); + + if (refs.colorModeToggleLabel instanceof HTMLElement) { + refs.colorModeToggleLabel.textContent = String(strings.darkModeLabel || 'Dark mode'); + } + }; + + const applyColorMode = (root, refs, colorMode, strings) => { + const nextMode = isColorMode(colorMode) ? colorMode : COLOR_MODE_LIGHT; + + root.setAttribute('data-plan-color-mode', nextMode); + syncColorModeToggle(refs, nextMode, strings); + }; + const getCheckedStartMode = (startModeInputs) => { const checkedInput = startModeInputs.find((input) => input.checked); @@ -853,6 +934,8 @@ startToggle: root.querySelector('[data-plan-start-toggle]'), startToggleLabel: root.querySelector('[data-plan-start-toggle-label]'), startPanel: root.querySelector('[data-plan-start-panel]'), + colorModeToggle: root.querySelector('[data-plan-color-mode-toggle]'), + colorModeToggleLabel: root.querySelector('[data-plan-color-mode-toggle-label]'), tripHeaderActions: root.querySelector('[data-plan-trip-header-actions]'), tripHeading: root.querySelector('[data-plan-trip-heading]'), tripRegion: root.querySelector('[data-plan-trip-region]'), @@ -888,21 +971,34 @@ typeof config.rest?.endpointToken === 'string' && config.rest.endpointToken !== ''; const shouldHydrateOnLoad = Boolean(config.hydration?.shouldHydrateOnLoad); + const colorModeDefault = normalizeColorModeDefault( + config.colorModeDefault || root.getAttribute('data-plan-color-mode-default') + ); + const colorModeMediaQuery = getColorModeMediaQuery(); let isStartPanelOpen = true; let activeRequestController = null; let activeRequestEndpointKey = ''; let activeRequestId = 0; let pendingRouteFocusRequest = null; - let hasTouchedStartSelection = false; - let hasAutoCollapsedDefaultStart = false; - const initialWindowScrollY = typeof window === 'undefined' ? 0 : window.scrollY; const prefersReducedMotion = typeof window !== 'undefined' && typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches; let startPanelAnimationFrame = 0; + applyColorMode(root, refs, resolveColorMode(colorModeDefault, colorModeMediaQuery), strings); + + if (colorModeDefault === COLOR_MODE_SYSTEM && colorModeMediaQuery) { + colorModeMediaQuery.addEventListener('change', () => { + if (getStoredColorMode()) { + return; + } + + applyColorMode(root, refs, resolveColorMode(colorModeDefault, colorModeMediaQuery), strings); + }); + } + const renderAll = () => { renderCategoryPanels(refs, state, strings, { isLoadingMore: state.isLoadingMore, @@ -953,23 +1049,7 @@ ? 4 * progress * progress * progress : 1 - Math.pow(-2 * progress + 2, 3) / 2; - const getViewportTopOffset = () => { - const adminBar = document.getElementById('wpadminbar'); - - return (adminBar instanceof HTMLElement ? adminBar.offsetHeight : 0) + 16; - }; - - const getStartSelectionScrollTargetY = (closingHeight) => { - if (!(refs.resultsHeading instanceof HTMLElement) || typeof window === 'undefined') { - return null; - } - - const headingTop = refs.resultsHeading.getBoundingClientRect().top; - - return Math.max(window.scrollY + headingTop - getViewportTopOffset() - closingHeight, 0); - }; - - const animateStartPanel = (nextOpenState, options = {}) => { + const animateStartPanel = (nextOpenState) => { if (!(refs.startPanel instanceof HTMLElement) || !refs.startToggle) { isStartPanelOpen = nextOpenState; updateStartPanelState(); @@ -978,7 +1058,6 @@ const panel = refs.startPanel; const duration = prefersReducedMotion ? 0 : START_PANEL_ANIMATION_MS; - const scrollToY = typeof options.scrollToY === 'number' ? options.scrollToY : null; if (startPanelAnimationFrame) { window.cancelAnimationFrame(startPanelAnimationFrame); @@ -1013,13 +1092,6 @@ panel.hidden = !nextOpenState; updateStartPanelState(); - if (scrollToY !== null && typeof window !== 'undefined') { - window.scrollTo({ - top: scrollToY, - behavior: 'auto', - }); - } - return; } @@ -1033,13 +1105,6 @@ panel.hidden = !nextOpenState; updateStartPanelState(); - if (scrollToY !== null && typeof window !== 'undefined') { - window.scrollTo({ - top: scrollToY, - behavior: 'auto', - }); - } - startPanelAnimationFrame = 0; }; @@ -1071,37 +1136,12 @@ animateStartPanel(true); }; - const closeStartPanel = (options = {}) => { + const closeStartPanel = () => { if (!isStartPanelOpen) { return; } - const currentHeight = refs.startPanel instanceof HTMLElement ? refs.startPanel.getBoundingClientRect().height : 0; - const scrollToY = options.scrollToResults ? getStartSelectionScrollTargetY(currentHeight) : null; - - animateStartPanel(false, { - scrollToY, - }); - }; - - const maybeAutoCollapseDefaultStart = () => { - if ( - typeof window === 'undefined' || - hasTouchedStartSelection || - hasAutoCollapsedDefaultStart || - !isStartPanelOpen || - state.startMode !== 'default' || - String(state.customStart || '').trim() !== '' - ) { - return; - } - - if (window.scrollY - initialWindowScrollY < 100) { - return; - } - - hasAutoCollapsedDefaultStart = true; - closeStartPanel(); + animateStartPanel(false); }; const sendRequest = async (endpointKey, payload, requestOptions = {}) => { @@ -1335,11 +1375,6 @@ input.addEventListener('change', () => { state.startMode = getCheckedStartMode(refs.startModeInputs) || state.startMode || 'default'; syncStartUi(refs, state); - hasTouchedStartSelection = true; - - if (state.startMode !== 'custom' || state.customStart.trim() !== '') { - closeStartPanel({ scrollToResults: true }); - } if (!hasRestConfig) { announce(refs.liveRegion, strings.startingPointUpdated || ''); @@ -1357,11 +1392,6 @@ refs.customStartInput.addEventListener('change', () => { state.customStart = refs.customStartInput.value || ''; syncStartUi(refs, state); - hasTouchedStartSelection = true; - - if (state.startMode === 'custom' && state.customStart.trim() !== '') { - closeStartPanel({ scrollToResults: true }); - } if (!hasRestConfig) { announce(refs.liveRegion, strings.startingPointUpdated || ''); @@ -1375,10 +1405,6 @@ }); } - if (typeof window !== 'undefined') { - window.addEventListener('scroll', maybeAutoCollapseDefaultStart, { passive: true }); - } - if (refs.categorySearchInput instanceof HTMLInputElement) { refs.categorySearchInput.addEventListener('input', () => { state.categorySearch = refs.categorySearchInput.value || ''; @@ -1503,6 +1529,21 @@ return; } + const colorModeToggle = target.closest('[data-plan-color-mode-toggle]'); + + if (colorModeToggle instanceof HTMLButtonElement) { + event.preventDefault(); + + const currentMode = root.getAttribute('data-plan-color-mode') === COLOR_MODE_DARK + ? COLOR_MODE_DARK + : COLOR_MODE_LIGHT; + const nextMode = currentMode === COLOR_MODE_DARK ? COLOR_MODE_LIGHT : COLOR_MODE_DARK; + + setStoredColorMode(nextMode); + applyColorMode(root, refs, nextMode, strings); + return; + } + const customResultsButton = target.closest('[data-plan-custom-results-button]'); if (customResultsButton instanceof HTMLButtonElement) { diff --git a/plugin/plan-your-day/assets/js/plan.min.js b/plugin/plan-your-day/assets/js/plan.min.js index 8d53a33..63267ea 100644 --- a/plugin/plan-your-day/assets/js/plan.min.js +++ b/plugin/plan-your-day/assets/js/plan.min.js @@ -1 +1 @@ -(()=>{const e="planYourDayEnhanced",t=e=>String(e??"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),a=(e,t={})=>{let a=String(e||"");return Object.entries(t||{}).forEach(([e,t])=>{a=a.split(`{${e}}`).join(String(t??""))}),a},n=(e,t="")=>Array.isArray(e)?e.map(e=>n(e)):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map(([e,t])=>{const a=String(e).toLowerCase();return[e,a.includes("token")||a.includes("api_key")||a.includes("authorization")||a.includes("cookie")||a.includes("secret")?"[redacted]":n(t,e)]})):"string"==typeof e?String(t).toLowerCase().includes("token")?"[redacted]":e.replace(/([?&](?:key|api_key|token)=)[^&]+/gi,"$1[redacted]"):e,r=(e,t,a,r={})=>{if(!e?.debug||"undefined"==typeof console)return;("function"==typeof console[t]?console[t]:console.log).call(console,`[plan-your-day] ${a}`,n(r))},o=e=>Array.isArray(e)?e.map(e=>String(e??"")).filter(Boolean):[],s=(e,t)=>{e&&t&&(e.textContent="",window.requestAnimationFrame(()=>{e.textContent=t}))},i=e=>{const t=e.find(e=>e.checked);return t?t.value:""},l=(e,t)=>{const a=e.form instanceof HTMLFormElement?new FormData(e.form):new FormData;return{category:String(a.get("category")||t.category||""),category_search:String(a.get("category_search")||t.categorySearch||""),waypoints:a.getAll("waypoints[]").map(e=>String(e||"")).filter(Boolean),start_mode:String(a.get("start_mode")||t.startMode||"default"),custom_start:String(a.get("custom_start")||"")}},u=(e,n,r)=>{const o=String(e?.id||""),s=String(e?.label||""),i=String(e?.address||""),l=String(e?.distance_label||""),u=String(e?.maps_uri||""),d=n.includes(o);return`\n

  • \n
    \n

    ${t(s)}

    \n ${l?`

    ${t(l)}

    `:""}\n

    ${t(i)}

    \n
    \n
    \n ${u?`${t(r.viewInGoogleMaps||"")}`:""}\n ${d?`${t(r.inTrip||"")}`:``}\n
    \n
  • \n `},d=(e,a,n=!1)=>{if(!e?.hasMoreResults)return"";const r=String(n?a.loadingMoreResults||a.moreResultsButton||"":a.moreResultsButton||"");return`\n
    \n \n
    \n `},c=(e,a,n,r={})=>`\n
    \n ${((e,a,n)=>{const r=Array.isArray(e?.searchResults)?e.searchResults:[];if(0===r.length){const a=e?.resultsEmptyState||{};return`\n
    \n

    ${t(a.heading||"")}

    \n

    ${t(a.body||"")}

    \n
    \n `}return`\n
      \n ${r.map(e=>u(e,a,n)).join("")}\n
    \n `})(e,a,n)}\n
    \n ${d(e,n,Boolean(r.isLoadingMore))}\n `,p=(e,t)=>{const a=new Set((e=>{const t=[];return(Array.isArray(e?.searchResults)?e.searchResults:[]).forEach(e=>{const a=String(e?.id||"");a&&!t.includes(a)&&t.push(a)}),t})(e));return(Array.isArray(t?.searchResults)?t.searchResults:[]).filter(e=>{const t=String(e?.id||"");return!t||!a.has(t)&&(a.add(t),!0)})},y=(e,a)=>{e.categoryInput&&(e.categoryInput.value=a.category||""),e.waypointInputs&&(e.waypointInputs.innerHTML=o(a.route?.selectedWaypointIds).map(e=>``).join(""))},g=(e,a)=>{if(!e.messages)return;const n=Array.isArray(a)?a:[];e.messages.hidden=0===n.length,e.messages.innerHTML=(e=>(Array.isArray(e)?e:[]).map(e=>{const a=String(e?.type||"note"),n=String(e?.text||""),r="warning"===a?"alert":"";return`
  • ${t(n)}
  • `}).join(""))(n)},m=(e,t,a,n)=>{if(!(e instanceof HTMLElement))return;const r=e.querySelector("[data-plan-load-more-wrap]"),o=d(t,a,n);o?r instanceof HTMLElement?r.outerHTML=o:e.insertAdjacentHTML("beforeend",o):r instanceof HTMLElement&&r.remove()},f=(e,t,a,n,r={})=>{if(!(e instanceof HTMLElement))return;const o=Boolean(r.appendResults),s=Array.isArray(r.appendedResults)?r.appendedResults:[];o&&(s.length>0&&((e,t,a,n)=>{if(!(e instanceof HTMLElement&&Array.isArray(t)&&0!==t.length))return!1;const r=e.querySelector("[data-plan-results-list]");if(!(r instanceof HTMLElement))return!1;const o=e.querySelector("[data-plan-results-empty]");return o instanceof HTMLElement&&o.remove(),r.insertAdjacentHTML("beforeend",t.map(e=>u(e,a,n)).join("")),!0})(e,s,a,n)||0===s.length&&(e=>e instanceof HTMLElement&&e.querySelector("[data-plan-results-list], [data-plan-results-empty]")instanceof HTMLElement)(e))?m(e,t,n,Boolean(r.isLoadingMore)):e.innerHTML=c(t,a,n,r)},h=(e,t,n,r={})=>{const s=t.category||"",i=t.expandedCategory||"",l=o(t.route?.selectedWaypointIds),u=t.browse||{},d=Boolean(u.hasSearch)&&!s,p=d||0===e.categoryButtons.length,y=d&&Boolean(t.customResultsExpanded)||!d&&0===e.categoryButtons.length,g={appendResults:Boolean(r.appendResults),appendedResults:Array.isArray(r.appendedResults)?r.appendedResults:[],isLoadingMore:Boolean(r.isLoadingMore)};e.categoryButtons.forEach(e=>{const t=e.getAttribute("data-category-key")||"",a=t===s&&t===i,n=e.closest(".plan-your-day__category-accordion-item");e.setAttribute("aria-expanded",String(a)),n instanceof HTMLElement&&n.classList.toggle("is-expanded",a)}),e.categoryRegions.forEach(e=>{const t=e.getAttribute("data-category-key")||"",a=t===s&&t===i,r=e.querySelector("[data-plan-category-results-panel]");if(e.hidden=!a,r instanceof HTMLElement){if(!a)return void(r.innerHTML="");f(r,u,l,n,g)}}),e.customResults&&(e.customResults.hidden=!p,e.customResults.classList.toggle("is-expanded",y)),e.customResultsButton&&e.customResultsButton.setAttribute("aria-expanded",String(y)),e.customResultsRegion&&(e.customResultsRegion.hidden=!y),e.customResultsHeading&&(e.customResultsHeading.textContent=d?a(n.searchResultsFor||"",{search:u.categoryLabel||""}):String(u?.resultsEmptyState?.heading||"")),e.customResultsDescription&&(e.customResultsDescription.textContent=String(d?n.customSearchResultsDescription||"":u?.resultsEmptyState?.body||"")),e.customResultsPanel&&(y?d?f(e.customResultsPanel,u,l,n,g):e.customResultsPanel.innerHTML=c(u,l,n,{isLoadingMore:!1}):e.customResultsPanel.innerHTML="")},b=(e,n,r)=>{e.tripHeaderActions&&(e.tripHeaderActions.innerHTML=((e,a)=>{const n=o(e?.selectedWaypointIds),r=String(e?.tripCountLabel||"");return`\n ${t(r)}\n ${n.length>0?``:""}\n `})(n.route,r)),e.tripRegion&&(e.tripRegion.innerHTML=((e,n,r)=>{const o=Array.isArray(e?.tripWaypoints)?e.tripWaypoints:[];if(0===o.length){const a=e?.tripEmptyState||{};return`\n
    \n

    ${t(a.heading||n.tripEmptyHeading||"")}

    \n

    ${t(a.body||n.tripEmptyBody||"")}

    \n
    \n `}return`\n
      \n ${o.map((e,r)=>{const s=String(e?.id||""),i=String(e?.label||""),l=String(e?.address||""),u=r>0,d=r\n
      \n \n
      \n

      ${t(i)}

      \n

      ${t(l)}

      \n
      \n
      \n
      \n \n ${t(n.moveUp||"")}\n \n \n ${t(n.moveDown||"")}\n \n \n
      \n \n `}).join("")}\n
    \n `})(n.route,r,e.tripRegion.getAttribute("data-plan-trip-help-id")||""))},S=(e,t,a)=>{const n=t.route||{},r=String(n.iframeSrc||""),s=n.emptyPreviewState||{},i=String(n.mapsUrl||""),l=o(n.selectedWaypointIds).length>0;g(e,n.messages),e.mapWrap&&(e.mapWrap.hidden=""===r),e.iframe&&(e.iframe.src=r),e.previewEmpty&&(e.previewEmpty.hidden=""!==r),e.previewEmptyHeading&&(e.previewEmptyHeading.textContent=String(s.heading||"")),e.previewEmptyBody&&(e.previewEmptyBody.textContent=String(s.body||"")),e.summaryCount&&(e.summaryCount.textContent=String(n.tripCountLabel||""),e.summaryCount.hidden=l),e.openLinkLabel&&(e.openLinkLabel.textContent=String(n.mapsLinkLabel||"")),e.openLink&&(e.openLink.hidden=!l,e.openLink.classList.toggle("is-disabled",""===i),i?(e.openLink.href=i,e.openLink.removeAttribute("aria-disabled"),e.openLink.removeAttribute("tabindex"),e.openLink.removeAttribute("role")):(e.openLink.removeAttribute("href"),e.openLink.setAttribute("aria-disabled","true"),e.openLink.setAttribute("tabindex","0"),e.openLink.setAttribute("role","button")))},w=e=>e instanceof HTMLElement&&"function"==typeof e.focus&&(e.focus(),document.activeElement===e),v=e=>{if(!(e instanceof HTMLButtonElement))return null;if(e.matches('[data-plan-action="add-waypoint"]'))return{action:"add-waypoint",placeId:e.getAttribute("data-place-id")||e.value||""};if(e.matches('[data-plan-action="remove-waypoint"]'))return{action:"remove-waypoint",placeId:e.getAttribute("data-place-id")||e.value||""};if(e.matches("[data-plan-clear-trip]"))return{action:"clear-trip",placeId:""};if("move_waypoint"===e.name&&e.value){const[t,a]=String(e.value).split(":",2);return{action:"move-waypoint",placeId:t||"",direction:a||""}}return null},R=e=>0===o(e?.selectedWaypointIds).length,L=(e,t)=>{e.startModeInputs.forEach(e=>{e.checked=e.value===t.startMode}),e.customStartInput&&(e.customStartInput.value=t.customStart||"");const a="custom"===(i(e.startModeInputs)||t.startMode||"default");e.customStartWrap&&(e.customStartWrap.hidden=!a),e.customStartInput&&(e.customStartInput.disabled=!a)},M=(e,t)=>{if(!(e.categorySearchInput instanceof HTMLInputElement))return;const a=String(t.categorySearch||"");e.categorySearchInput.value!==a&&(e.categorySearchInput.value=a)},E=(e,t)=>{e.classList.toggle("is-submitting",t),e.setAttribute("aria-busy",String(t))},_=(e,t,a)=>{e.forEach(e=>{if(!(e instanceof HTMLButtonElement||e instanceof HTMLInputElement))return;if(t)return e.hasAttribute(a)||e.setAttribute(a,e.disabled?"true":"false"),void(e.disabled=!0);const n=e.getAttribute(a);null!==n&&(e.disabled="true"===n,e.removeAttribute(a))})},A=(e,t)=>{_(e.querySelectorAll("[data-plan-route-mutation]"),t,"data-plan-disabled-before-request")},q=(e,t)=>{_(e.querySelectorAll(['[data-plan-form] button[type="submit"]:not([data-plan-route-mutation])',"[data-plan-load-more-button]","[data-plan-start-toggle]","[data-plan-custom-results-button]",'input[name="start_mode"]',"[data-plan-custom-start]","[data-plan-category-search]"].join(",")),t,"data-plan-browse-disabled-before-request")},T=(e,t,a)=>{const n=t.category||"";if(e.categoryPanels.forEach(t=>{const r=t.getAttribute("data-category-key")||"",o=0===e.categoryButtons.length||r===n||!1===e.customResults?.hidden;t.setAttribute("aria-busy",String(a&&o))}),e.customResultsPanel instanceof HTMLElement){const t=!1===e.customResults?.hidden;e.customResultsPanel.setAttribute("aria-busy",String(a&&t))}e.tripRegion instanceof HTMLElement&&e.tripRegion.setAttribute("aria-busy",String(a)),e.previewCard instanceof HTMLElement&&e.previewCard.setAttribute("aria-busy",String(a))},H=t=>{if(!(t instanceof HTMLElement)||"true"===t.dataset[e])return;t.dataset[e]="true";const n=(e=>{const t=e.querySelector("[data-plan-config]");if(!t)return{};try{return JSON.parse(t.textContent||"{}")}catch(e){return{}}})(t),o=n.strings||{},u={form:t.querySelector("[data-plan-form]"),liveRegion:t.querySelector("[data-plan-live-region]"),categoryInput:t.querySelector("[data-plan-category-input]"),waypointInputs:t.querySelector("[data-plan-waypoint-inputs]"),categoryButtons:Array.from(t.querySelectorAll("[data-plan-category-button]")),categoryItems:Array.from(t.querySelectorAll("[data-plan-category-item]")),categoryRegions:Array.from(t.querySelectorAll("[data-plan-category-region]")),categoryPanels:Array.from(t.querySelectorAll("[data-plan-category-results-panel]")),categorySearchInput:t.querySelector("[data-plan-category-search]"),customResults:t.querySelector("[data-plan-custom-results]"),customResultsButton:t.querySelector("[data-plan-custom-results-button]"),customResultsHeading:t.querySelector("[data-plan-custom-results-heading]"),customResultsDescription:t.querySelector("[data-plan-custom-results-description]"),customResultsRegion:t.querySelector("[data-plan-custom-results-region]"),customResultsPanel:t.querySelector("[data-plan-custom-results-panel]"),resultsHeading:t.querySelector("[data-plan-results-heading]"),startModeInputs:Array.from(t.querySelectorAll('input[name="start_mode"]')),customStartWrap:t.querySelector("[data-plan-custom-start-wrap]"),customStartInput:t.querySelector("[data-plan-custom-start]"),startToggle:t.querySelector("[data-plan-start-toggle]"),startToggleLabel:t.querySelector("[data-plan-start-toggle-label]"),startPanel:t.querySelector("[data-plan-start-panel]"),tripHeaderActions:t.querySelector("[data-plan-trip-header-actions]"),tripHeading:t.querySelector("[data-plan-trip-heading]"),tripRegion:t.querySelector("[data-plan-trip-region]"),messages:t.querySelector("[data-plan-messages]"),previewCard:t.querySelector("[data-plan-preview-card]"),mapWrap:t.querySelector("[data-plan-map-wrap]"),iframe:t.querySelector("[data-plan-iframe]"),previewEmpty:t.querySelector("[data-plan-preview-empty]"),previewEmptyHeading:t.querySelector("[data-plan-preview-empty-heading]"),previewEmptyBody:t.querySelector("[data-plan-preview-empty-body]"),summaryCount:t.querySelector("[data-plan-summary-count]"),openLink:t.querySelector("[data-plan-open-link]"),openLinkLabel:t.querySelector("[data-plan-open-link-label]")},d={category:String(n.initialState?.category||""),categorySearch:String(n.initialState?.categorySearch||""),startMode:String(n.initialState?.startMode||"default"),customStart:String(n.initialState?.customStart||""),expandedCategory:String(n.initialState?.category||""),customResultsExpanded:Boolean(n.initialData?.browse?.isCustomSearch),isLoadingMore:!1,browse:n.initialData?.browse||{},route:n.initialData?.route||{}},c=u.form instanceof HTMLFormElement&&"string"==typeof n.rest?.browseUrl&&""!==n.rest.browseUrl&&"string"==typeof n.rest?.routeUrl&&""!==n.rest.routeUrl&&"string"==typeof n.rest?.endpointToken&&""!==n.rest.endpointToken,m=Boolean(n.hydration?.shouldHydrateOnLoad);let f=!0,_=null,H="",$=0,x=null,k=!1,I=!1;const C="undefined"==typeof window?0:window.scrollY,B="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;let P=0;const D=()=>{h(u,d,o,{isLoadingMore:d.isLoadingMore}),b(u,d,o),S(u,d),y(u,d),L(u,d),M(u,d),A(t,!1)},F=(e,t="")=>{g(u,[{type:"warning",text:e||o.requestFailed||""}]),s(u.liveRegion,t||e||o.requestFailed||"")},U=(e={})=>{if(!u.startToggle||!u.startPanel)return;const t=!1!==e.syncHidden;u.startToggle.hidden=!1,u.startToggle.setAttribute("aria-expanded",String(f)),u.startToggle.classList.toggle("is-collapsed",!f),t&&(u.startPanel.hidden=!f),u.startToggleLabel&&(u.startToggleLabel.textContent=String(f?o.hideStartOptions||"Hide options":o.showStartOptions||"Show options"))},W=e=>{if(!(u.resultsHeading instanceof HTMLElement)||"undefined"==typeof window)return null;const t=u.resultsHeading.getBoundingClientRect().top;return Math.max(window.scrollY+t-(()=>{const e=document.getElementById("wpadminbar");return(e instanceof HTMLElement?e.offsetHeight:0)+16})()-e,0)},j=(e,t={})=>{if(!(u.startPanel instanceof HTMLElement&&u.startToggle))return f=e,void U();const a=u.startPanel,n=B?0:480,r="number"==typeof t.scrollToY?t.scrollToY:null;P&&(window.cancelAnimationFrame(P),P=0);const o=a.hidden?0:a.getBoundingClientRect().height;a.hidden=!1,e&&(a.style.height="");const s=e?a.scrollHeight:0,i=e&&s>0?Math.max(o/s,0):1,l=e?1:0;if(f=e,a.style.overflow="hidden",a.style.pointerEvents="none",a.style.height=`${o}px`,a.style.opacity=String(i),U({syncHidden:!1}),n<=0||o===s)return a.style.height="",a.style.overflow="",a.style.pointerEvents="",a.style.opacity="",a.hidden=!e,U(),void(null!==r&&"undefined"!=typeof window&&window.scrollTo({top:r,behavior:"auto"}));const d=performance.now(),c=t=>{const u=Math.min((t-d)/n,1),p=(y=u)<.5?4*y*y*y:1-Math.pow(-2*y+2,3)/2;var y;const g=o+(s-o)*p,m=i+(l-i)*p;a.style.height=`${Math.max(g,0)}px`,a.style.opacity=String(Math.max(Math.min(m,1),0)),u<1?P=window.requestAnimationFrame(c):(a.style.height="",a.style.overflow="",a.style.pointerEvents="",a.style.opacity="",a.hidden=!e,U(),null!==r&&"undefined"!=typeof window&&window.scrollTo({top:r,behavior:"auto"}),P=0)};P=window.requestAnimationFrame(c)},K=(e={})=>{if(!f)return;const t=u.startPanel instanceof HTMLElement?u.startPanel.getBoundingClientRect().height:0,a=e.scrollToResults?W(t):null;j(!1,{scrollToY:a})},O=()=>{"undefined"==typeof window||k||I||!f||"default"!==d.startMode||""!==String(d.customStart||"").trim()||window.scrollY-C<100||(I=!0,K())},Y=async(e,i,l={})=>{if(!c)return"unsupported";const g=Boolean(l.appendBrowseResults),m=String(l.announcementMessage||""),f=String(l.errorMessage||""),v=String(l.searchContextKey||""),R="browse"===e&&!1!==l.refreshRoute,k="route"===e?l.routeFocusRequest??null:null;if(_ instanceof AbortController){if("route"===H)return r(n,"info","request:blocked",{endpointKey:e,blockedBy:H}),"busy";_.abort()}$+=1;const I=$;"route"===e&&(x=k?{requestId:I,focusRequest:k}:null),_=new AbortController,H=e,E(t,!0),T(u,d,!0),A(t,"route"===e),q(t,"route"===e),r(n,"info","request:start",{endpointKey:e,payload:i});try{const l={...i,endpoint_token:n.rest.endpointToken};"browse"===e&&(l.refresh_route=R,""!==v&&(l.search_context_key=v));const c=await fetch(n.rest["browse"===e?"browseUrl":"routeUrl"],{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(l),signal:_.signal}),E=await c.json().catch(()=>({}));if(r(n,c.ok?"info":"warn","request:response",{endpointKey:e,status:c.status,ok:c.ok,body:E}),!c.ok)throw new Error(E?.message||o.requestFailed||"");if(I!==$)return!0;if("browse"===e){const e=d.category||"",n=d.expandedCategory||"",r=d.categorySearch||"",l=E?.browse||{};if(g&&""!==String(l.searchResultsError||""))return d.isLoadingMore=!1,h(u,d,o,{appendResults:!0,appendedResults:[],isLoadingMore:!1}),F(f||o.requestFailed||"",f||o.requestFailed||""),"failed";const c=g&&""!==v&&v===String(d.browse?.searchContextKey||"")&&v===String(l.searchContextKey||""),m=c?p(d.browse,l):[];if(d.browse=c?{...(C=d.browse)||{},...(B=l)||{},searchResults:[...Array.isArray(C?.searchResults)?C.searchResults:[],...p(C,B)]}:l,d.route=E?.route||d.route||{},d.category=String(d.browse.categoryKey||i.category||""),d.categorySearch=String(d.browse.categorySearch||i.category_search||""),d.isLoadingMore=!1,d.category?(d.expandedCategory=d.category===e?n:d.category,d.customResultsExpanded=!1):d.browse.hasSearch?String(i.category_search||"")!==r&&(d.expandedCategory="",d.customResultsExpanded=!0):(d.expandedCategory="",d.customResultsExpanded=!1),c)return h(u,d,o,{appendResults:!0,appendedResults:m,isLoadingMore:!1}),b(u,d,o),S(u,d),y(u,d),L(u,d),M(u,d),A(t,!1),s(u.liveRegion,d.browse?.searchResultsError?f||o.requestFailed||"":((e,t,n)=>e>0?a(n.loadedMoreResults||"",{count:e}):String(t?.hasMoreResults?n.resultsUpdated||"":n.noMoreResults||""))(m.length,d.browse,o)),"success"}else d.route=E?.route||d.route||{},d.category=String(d.route.categoryKey||d.category||""),d.categorySearch=String(d.route.categorySearch||i.category_search||"");return d.startMode=String(i.start_mode||d.startMode||"default"),d.customStart=String(i.custom_start||""),D(),"route"===e&&x&&x.requestId===I&&(((e,t)=>{if(!t)return;const a=String(t.placeId||""),n=e.tripHeaderActions?.querySelector("button:not([disabled]):not([hidden])");let r=null;if(a&&"add-waypoint"===t.action)r=e.tripRegion?.querySelector(`[data-waypoint-id="${a}"] button[name="remove_waypoint"]`);else if(a&&"move-waypoint"===t.action){const n=String(t.direction||"");r=e.tripRegion?.querySelector(`[data-waypoint-id="${a}"] button[name="move_waypoint"][value="${a}:${n}"]`)||e.tripRegion?.querySelector(`[data-waypoint-id="${a}"] button[name="remove_waypoint"]`)}else"remove-waypoint"===t.action?r=e.tripRegion?.querySelector('[data-plan-trip-list] button[name="remove_waypoint"]')||n:"clear-trip"===t.action&&(r=n||e.tripHeading);w(r)||w(e.tripHeading)})(u,x.focusRequest),x=null),s(u.liveRegion,m||""),"success"}catch(t){return"AbortError"===t?.name?(r(n,"info","request:aborted",{endpointKey:e}),"aborted"):(r(n,"error","request:failed",{endpointKey:e,error:t instanceof Error?t.message:String(t||""),payload:i}),g&&(d.isLoadingMore=!1,h(u,d,o,{appendResults:!0,appendedResults:[],isLoadingMore:!1})),F(g?f||o.requestFailed||"":t instanceof Error?t.message:o.requestFailed||"",g&&(f||o.requestFailed)||""),"failed")}finally{I===$&&(g&&d.isLoadingMore&&(d.isLoadingMore=!1),E(t,!1),T(u,d,!1),A(t,!1),"route"===e&&x&&x.requestId===I&&(x=null),q(t,!1),_=null,H="")}var C,B};if(u.startModeInputs.forEach(e=>{e.addEventListener("change",()=>{d.startMode=i(u.startModeInputs)||d.startMode||"default",L(u,d),k=!0,"custom"===d.startMode&&""===d.customStart.trim()||K({scrollToResults:!0}),c?Y("browse",l(u,d),{announcementMessage:o.startingPointUpdated||"",refreshRoute:!0}):s(u.liveRegion,o.startingPointUpdated||"")})}),u.customStartInput instanceof HTMLInputElement&&u.customStartInput.addEventListener("change",()=>{d.customStart=u.customStartInput.value||"",L(u,d),k=!0,"custom"===d.startMode&&""!==d.customStart.trim()&&K({scrollToResults:!0}),c?Y("browse",l(u,d),{announcementMessage:o.startingPointUpdated||"",refreshRoute:!0}):s(u.liveRegion,o.startingPointUpdated||"")}),"undefined"!=typeof window&&window.addEventListener("scroll",O,{passive:!0}),u.categorySearchInput instanceof HTMLInputElement&&(u.categorySearchInput.addEventListener("input",()=>{d.categorySearch=u.categorySearchInput.value||""}),u.categorySearchInput.addEventListener("keydown",e=>{if("Enter"!==e.key||!c)return;e.preventDefault();const t=l(u,d);t.category="",t.category_search=u.categorySearchInput.value||"",d.expandedCategory="",d.customResultsExpanded=!0,Y("browse",t,{announcementMessage:o.resultsUpdated||"",refreshRoute:R(d.route)})})),u.form instanceof HTMLFormElement&&u.form.addEventListener("submit",e=>{const t=e.submitter;if(!(t instanceof HTMLButtonElement&&c))return;let n="browse",r=o.resultsUpdated||"";const i=l(u,d);if(t.matches("[data-plan-category-button]")){const n=t.getAttribute("data-category-key")||"";if(n===d.category){const r=t.querySelector(".plan-your-day__category-title")?.textContent?.trim()||n;return e.preventDefault(),d.expandedCategory=d.expandedCategory===n?"":n,d.customResultsExpanded=!1,h(u,d,o),void s(u.liveRegion,d.expandedCategory===n?a(o.categoryResultsExpanded||"",{category:r}):a(o.categoryResultsCollapsed||"",{category:r}))}i.category=n,i.category_search="",d.expandedCategory=n,d.customResultsExpanded=!1}else t.matches('[data-plan-action="search-category-query"]')?(i.category="",i.category_search=u.categorySearchInput instanceof HTMLInputElement&&u.categorySearchInput.value||"",d.expandedCategory="",d.customResultsExpanded=!0):t.matches('[data-plan-action="add-waypoint"]')?(i.waypoints=[...i.waypoints,t.getAttribute("data-place-id")||t.value||""],n="route",r=o.tripUpdated||""):t.matches('[data-plan-action="remove-waypoint"]')?(i.remove_waypoint=t.getAttribute("data-place-id")||t.value||"",n="route",r=o.tripUpdated||""):t.matches("[data-plan-clear-trip]")?(i.clear_trip=!0,n="route",r=o.tripUpdated||""):"move_waypoint"===t.name&&t.value&&(i.move_waypoint=t.value,n="route",r=o.tripUpdated||"");e.preventDefault(),Y(n,i,{announcementMessage:r,refreshRoute:"browse"===n?R(d.route):void 0,routeFocusRequest:"route"===n?v(t):null})}),t.addEventListener("click",e=>{const t=e.target;if(!(t instanceof HTMLElement))return;if(t.closest('[data-plan-open-link][aria-disabled="true"]')instanceof HTMLElement)return e.preventDefault(),void s(u.liveRegion,o.openMapsDisabled||"");if(t.closest("[data-plan-start-toggle]")instanceof HTMLButtonElement)return e.preventDefault(),f?K():f||j(!0),void s(u.liveRegion,f?o.startOptionsExpanded||"":o.startOptionsCollapsed||"");if(t.closest("[data-plan-custom-results-button]")instanceof HTMLButtonElement){if(e.preventDefault(),!d.browse?.hasSearch||d.category)return;return d.expandedCategory="",d.customResultsExpanded=!d.customResultsExpanded,h(u,d,o),void s(u.liveRegion,d.customResultsExpanded?String(o.customResultsExpanded||""):String(o.customResultsCollapsed||""))}const a=t.closest("[data-plan-load-more-button]");if(a instanceof HTMLButtonElement){if(e.preventDefault(),!c||d.isLoadingMore||a.disabled)return;const t=String(d.browse?.nextPageToken||"");if(!t)return void s(u.liveRegion,o.noMoreResults||"");d.isLoadingMore=!0,h(u,d,o,{appendResults:!0,appendedResults:[],isLoadingMore:!0}),s(u.liveRegion,o.loadingMoreResults||""),Y("browse",{...l(u,d),page_token:t,append_results:!0},{appendBrowseResults:!0,errorMessage:o.loadMoreError||"",refreshRoute:!1,searchContextKey:String(d.browse?.searchContextKey||"")})}}),t.addEventListener("keydown",e=>{const t=e.target;if(!(t instanceof HTMLElement))return;t.closest('[data-plan-open-link][aria-disabled="true"]')instanceof HTMLElement&&("Enter"!==e.key&&" "!==e.key||(e.preventDefault(),s(u.liveRegion,o.openMapsDisabled||"")))}),D(),U(),t.classList.add("is-enhanced"),m){if(!c)return void F(o.requestFailed||"");Y("browse",l(u,d),{refreshRoute:!0})}},$=()=>{document.querySelectorAll("[data-plan-root]").forEach(H)};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",$,{once:!0}):$()})(); \ No newline at end of file +(()=>{const e="planYourDayEnhanced",t="planYourDayColorMode",a="light",n="dark",r="system",o=[a,n],s=[...o,r],i=e=>String(e??"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),l=(e,t={})=>{let a=String(e||"");return Object.entries(t||{}).forEach((([e,t])=>{a=a.split(`{${e}}`).join(String(t??""))})),a},u=(e,t="")=>Array.isArray(e)?e.map((e=>u(e))):e&&"object"==typeof e?Object.fromEntries(Object.entries(e).map((([e,t])=>{const a=String(e).toLowerCase();return[e,a.includes("token")||a.includes("api_key")||a.includes("authorization")||a.includes("cookie")||a.includes("secret")?"[redacted]":u(t,e)]}))):"string"==typeof e?String(t).toLowerCase().includes("token")?"[redacted]":e.replace(/([?&](?:key|api_key|token)=)[^&]+/gi,"$1[redacted]"):e,d=(e,t,a,n={})=>{if(!e?.debug||"undefined"==typeof console)return;("function"==typeof console[t]?console[t]:console.log).call(console,`[plan-your-day] ${a}`,u(n))},c=e=>Array.isArray(e)?e.map((e=>String(e??""))).filter(Boolean):[],p=(e,t)=>{e&&t&&(e.textContent="",window.requestAnimationFrame((()=>{e.textContent=t})))},y=e=>o.includes(String(e||"")),g=e=>{const t=String(e||"");return s.includes(t)?t:a},m=()=>{try{const e=window.localStorage?.getItem(t);return y(e)?e:""}catch(e){return""}},f=()=>"undefined"==typeof window||"function"!=typeof window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)"),b=(e,t=f())=>{const o=m();if(y(o))return o;const s=g(e);return s===r?t?.matches?n:a:s},h=(e,t,r,o)=>{const s=y(r)?r:a;e.setAttribute("data-plan-color-mode",s),((e,t,a)=>{e.colorModeToggle instanceof HTMLButtonElement&&(e.colorModeToggle.hidden=!1,e.colorModeToggle.setAttribute("aria-pressed",String(t===n)),e.colorModeToggle.setAttribute("aria-label",String(a.darkModeLabel||"Dark mode")),e.colorModeToggleLabel instanceof HTMLElement&&(e.colorModeToggleLabel.textContent=String(a.darkModeLabel||"Dark mode")))})(t,s,o)},S=e=>{const t=e.find((e=>e.checked));return t?t.value:""},v=(e,t)=>{const a=e.form instanceof HTMLFormElement?new FormData(e.form):new FormData;return{category:String(a.get("category")||t.category||""),category_search:String(a.get("category_search")||t.categorySearch||""),waypoints:a.getAll("waypoints[]").map((e=>String(e||""))).filter(Boolean),start_mode:String(a.get("start_mode")||t.startMode||"default"),custom_start:String(a.get("custom_start")||"")}},w=(e,t,a)=>{const n=String(e?.id||""),r=String(e?.label||""),o=String(e?.address||""),s=String(e?.distance_label||""),u=String(e?.maps_uri||""),d=t.includes(n);return`\n
  • \n
    \n

    ${i(r)}

    \n ${s?`

    ${i(s)}

    `:""}\n

    ${i(o)}

    \n
    \n
    \n ${u?`${i(a.viewInGoogleMaps||"")}`:""}\n ${d?`${i(a.inTrip||"")}`:``}\n
    \n
  • \n `},M=(e,t,a=!1)=>{if(!e?.hasMoreResults)return"";const n=String(a?t.loadingMoreResults||t.moreResultsButton||"":t.moreResultsButton||"");return`\n
    \n \n
    \n `},L=(e,t,a,n={})=>`\n
    \n ${((e,t,a)=>{const n=Array.isArray(e?.searchResults)?e.searchResults:[];if(0===n.length){const t=e?.resultsEmptyState||{};return`\n
    \n

    ${i(t.heading||"")}

    \n

    ${i(t.body||"")}

    \n
    \n `}return`\n
      \n ${n.map((e=>w(e,t,a))).join("")}\n
    \n `})(e,t,a)}\n
    \n ${M(e,a,Boolean(n.isLoadingMore))}\n `,R=(e,t)=>{const a=new Set((e=>{const t=[];return(Array.isArray(e?.searchResults)?e.searchResults:[]).forEach((e=>{const a=String(e?.id||"");a&&!t.includes(a)&&t.push(a)})),t})(e));return(Array.isArray(t?.searchResults)?t.searchResults:[]).filter((e=>{const t=String(e?.id||"");return!t||!a.has(t)&&(a.add(t),!0)}))},_=(e,t)=>{e.categoryInput&&(e.categoryInput.value=t.category||""),e.waypointInputs&&(e.waypointInputs.innerHTML=c(t.route?.selectedWaypointIds).map((e=>``)).join(""))},E=(e,t)=>{if(!e.messages)return;const a=Array.isArray(t)?t:[];e.messages.hidden=0===a.length,e.messages.innerHTML=(e=>(Array.isArray(e)?e:[]).map((e=>{const t=String(e?.type||"note"),a=String(e?.text||""),n="warning"===t?"alert":"";return`
  • ${i(a)}
  • `})).join(""))(a)},A=(e,t,a,n)=>{if(!(e instanceof HTMLElement))return;const r=e.querySelector("[data-plan-load-more-wrap]"),o=M(t,a,n);o?r instanceof HTMLElement?r.outerHTML=o:e.insertAdjacentHTML("beforeend",o):r instanceof HTMLElement&&r.remove()},q=(e,t,a,n,r={})=>{if(!(e instanceof HTMLElement))return;const o=Boolean(r.appendResults),s=Array.isArray(r.appendedResults)?r.appendedResults:[];o&&(s.length>0&&((e,t,a,n)=>{if(!(e instanceof HTMLElement&&Array.isArray(t)&&0!==t.length))return!1;const r=e.querySelector("[data-plan-results-list]");if(!(r instanceof HTMLElement))return!1;const o=e.querySelector("[data-plan-results-empty]");return o instanceof HTMLElement&&o.remove(),r.insertAdjacentHTML("beforeend",t.map((e=>w(e,a,n))).join("")),!0})(e,s,a,n)||0===s.length&&(e=>e instanceof HTMLElement&&e.querySelector("[data-plan-results-list], [data-plan-results-empty]")instanceof HTMLElement)(e))?A(e,t,n,Boolean(r.isLoadingMore)):e.innerHTML=L(t,a,n,r)},T=(e,t,a,n={})=>{const r=t.category||"",o=t.expandedCategory||"",s=c(t.route?.selectedWaypointIds),i=t.browse||{},u=Boolean(i.hasSearch)&&!r,d=u||0===e.categoryButtons.length,p=u&&Boolean(t.customResultsExpanded)||!u&&0===e.categoryButtons.length,y={appendResults:Boolean(n.appendResults),appendedResults:Array.isArray(n.appendedResults)?n.appendedResults:[],isLoadingMore:Boolean(n.isLoadingMore)};e.categoryButtons.forEach((e=>{const t=e.getAttribute("data-category-key")||"",a=t===r&&t===o,n=e.closest(".plan-your-day__category-accordion-item");e.setAttribute("aria-expanded",String(a)),n instanceof HTMLElement&&n.classList.toggle("is-expanded",a)})),e.categoryRegions.forEach((e=>{const t=e.getAttribute("data-category-key")||"",n=t===r&&t===o,l=e.querySelector("[data-plan-category-results-panel]");if(e.hidden=!n,l instanceof HTMLElement){if(!n)return void(l.innerHTML="");q(l,i,s,a,y)}})),e.customResults&&(e.customResults.hidden=!d,e.customResults.classList.toggle("is-expanded",p)),e.customResultsButton&&e.customResultsButton.setAttribute("aria-expanded",String(p)),e.customResultsRegion&&(e.customResultsRegion.hidden=!p),e.customResultsHeading&&(e.customResultsHeading.textContent=u?l(a.searchResultsFor||"",{search:i.categoryLabel||""}):String(i?.resultsEmptyState?.heading||"")),e.customResultsDescription&&(e.customResultsDescription.textContent=String(u?a.customSearchResultsDescription||"":i?.resultsEmptyState?.body||"")),e.customResultsPanel&&(p?u?q(e.customResultsPanel,i,s,a,y):e.customResultsPanel.innerHTML=L(i,s,a,{isLoadingMore:!1}):e.customResultsPanel.innerHTML="")},H=(e,t,a)=>{e.tripHeaderActions&&(e.tripHeaderActions.innerHTML=((e,t)=>{const a=c(e?.selectedWaypointIds),n=String(e?.tripCountLabel||"");return`\n ${i(n)}\n ${a.length>0?``:""}\n `})(t.route,a)),e.tripRegion&&(e.tripRegion.innerHTML=((e,t,a)=>{const n=Array.isArray(e?.tripWaypoints)?e.tripWaypoints:[];if(0===n.length){const a=e?.tripEmptyState||{};return`\n
    \n

    ${i(a.heading||t.tripEmptyHeading||"")}

    \n

    ${i(a.body||t.tripEmptyBody||"")}

    \n
    \n `}return`\n
      \n ${n.map(((e,a)=>{const r=String(e?.id||""),o=String(e?.label||""),s=String(e?.address||""),u=a>0,d=a\n
      \n \n
      \n

      ${i(o)}

      \n

      ${i(s)}

      \n
      \n
      \n
      \n \n ${i(t.moveUp||"")}\n \n \n ${i(t.moveDown||"")}\n \n \n
      \n \n `})).join("")}\n
    \n `})(t.route,a,e.tripRegion.getAttribute("data-plan-trip-help-id")||""))},$=(e,t,a)=>{const n=t.route||{},r=String(n.iframeSrc||""),o=n.emptyPreviewState||{},s=String(n.mapsUrl||""),i=c(n.selectedWaypointIds).length>0;E(e,n.messages),e.mapWrap&&(e.mapWrap.hidden=""===r),e.iframe&&(e.iframe.src=r),e.previewEmpty&&(e.previewEmpty.hidden=""!==r),e.previewEmptyHeading&&(e.previewEmptyHeading.textContent=String(o.heading||"")),e.previewEmptyBody&&(e.previewEmptyBody.textContent=String(o.body||"")),e.summaryCount&&(e.summaryCount.textContent=String(n.tripCountLabel||""),e.summaryCount.hidden=i),e.openLinkLabel&&(e.openLinkLabel.textContent=String(n.mapsLinkLabel||"")),e.openLink&&(e.openLink.hidden=!i,e.openLink.classList.toggle("is-disabled",""===s),s?(e.openLink.href=s,e.openLink.removeAttribute("aria-disabled"),e.openLink.removeAttribute("tabindex"),e.openLink.removeAttribute("role")):(e.openLink.removeAttribute("href"),e.openLink.setAttribute("aria-disabled","true"),e.openLink.setAttribute("tabindex","0"),e.openLink.setAttribute("role","button")))},k=e=>e instanceof HTMLElement&&"function"==typeof e.focus&&(e.focus(),document.activeElement===e),x=e=>{if(!(e instanceof HTMLButtonElement))return null;if(e.matches('[data-plan-action="add-waypoint"]'))return{action:"add-waypoint",placeId:e.getAttribute("data-place-id")||e.value||""};if(e.matches('[data-plan-action="remove-waypoint"]'))return{action:"remove-waypoint",placeId:e.getAttribute("data-place-id")||e.value||""};if(e.matches("[data-plan-clear-trip]"))return{action:"clear-trip",placeId:""};if("move_waypoint"===e.name&&e.value){const[t,a]=String(e.value).split(":",2);return{action:"move-waypoint",placeId:t||"",direction:a||""}}return null},I=e=>0===c(e?.selectedWaypointIds).length,C=(e,t)=>{e.startModeInputs.forEach((e=>{e.checked=e.value===t.startMode})),e.customStartInput&&(e.customStartInput.value=t.customStart||"");const a="custom"===(S(e.startModeInputs)||t.startMode||"default");e.customStartWrap&&(e.customStartWrap.hidden=!a),e.customStartInput&&(e.customStartInput.disabled=!a)},B=(e,t)=>{if(!(e.categorySearchInput instanceof HTMLInputElement))return;const a=String(t.categorySearch||"");e.categorySearchInput.value!==a&&(e.categorySearchInput.value=a)},D=(e,t)=>{e.classList.toggle("is-submitting",t),e.setAttribute("aria-busy",String(t))},F=(e,t,a)=>{e.forEach((e=>{if(!(e instanceof HTMLButtonElement||e instanceof HTMLInputElement))return;if(t)return e.hasAttribute(a)||e.setAttribute(a,e.disabled?"true":"false"),void(e.disabled=!0);const n=e.getAttribute(a);null!==n&&(e.disabled="true"===n,e.removeAttribute(a))}))},P=(e,t)=>{F(e.querySelectorAll("[data-plan-route-mutation]"),t,"data-plan-disabled-before-request")},U=(e,t)=>{F(e.querySelectorAll(['[data-plan-form] button[type="submit"]:not([data-plan-route-mutation])',"[data-plan-load-more-button]","[data-plan-start-toggle]","[data-plan-custom-results-button]",'input[name="start_mode"]',"[data-plan-custom-start]","[data-plan-category-search]"].join(",")),t,"data-plan-browse-disabled-before-request")},W=(e,t,a)=>{const n=t.category||"";if(e.categoryPanels.forEach((t=>{const r=t.getAttribute("data-category-key")||"",o=0===e.categoryButtons.length||r===n||!1===e.customResults?.hidden;t.setAttribute("aria-busy",String(a&&o))})),e.customResultsPanel instanceof HTMLElement){const t=!1===e.customResults?.hidden;e.customResultsPanel.setAttribute("aria-busy",String(a&&t))}e.tripRegion instanceof HTMLElement&&e.tripRegion.setAttribute("aria-busy",String(a)),e.previewCard instanceof HTMLElement&&e.previewCard.setAttribute("aria-busy",String(a))},j=o=>{if(!(o instanceof HTMLElement)||"true"===o.dataset[e])return;o.dataset[e]="true";const s=(e=>{const t=e.querySelector("[data-plan-config]");if(!t)return{};try{return JSON.parse(t.textContent||"{}")}catch(e){return{}}})(o),i=s.strings||{},u={form:o.querySelector("[data-plan-form]"),liveRegion:o.querySelector("[data-plan-live-region]"),categoryInput:o.querySelector("[data-plan-category-input]"),waypointInputs:o.querySelector("[data-plan-waypoint-inputs]"),categoryButtons:Array.from(o.querySelectorAll("[data-plan-category-button]")),categoryItems:Array.from(o.querySelectorAll("[data-plan-category-item]")),categoryRegions:Array.from(o.querySelectorAll("[data-plan-category-region]")),categoryPanels:Array.from(o.querySelectorAll("[data-plan-category-results-panel]")),categorySearchInput:o.querySelector("[data-plan-category-search]"),customResults:o.querySelector("[data-plan-custom-results]"),customResultsButton:o.querySelector("[data-plan-custom-results-button]"),customResultsHeading:o.querySelector("[data-plan-custom-results-heading]"),customResultsDescription:o.querySelector("[data-plan-custom-results-description]"),customResultsRegion:o.querySelector("[data-plan-custom-results-region]"),customResultsPanel:o.querySelector("[data-plan-custom-results-panel]"),resultsHeading:o.querySelector("[data-plan-results-heading]"),startModeInputs:Array.from(o.querySelectorAll('input[name="start_mode"]')),customStartWrap:o.querySelector("[data-plan-custom-start-wrap]"),customStartInput:o.querySelector("[data-plan-custom-start]"),startToggle:o.querySelector("[data-plan-start-toggle]"),startToggleLabel:o.querySelector("[data-plan-start-toggle-label]"),startPanel:o.querySelector("[data-plan-start-panel]"),colorModeToggle:o.querySelector("[data-plan-color-mode-toggle]"),colorModeToggleLabel:o.querySelector("[data-plan-color-mode-toggle-label]"),tripHeaderActions:o.querySelector("[data-plan-trip-header-actions]"),tripHeading:o.querySelector("[data-plan-trip-heading]"),tripRegion:o.querySelector("[data-plan-trip-region]"),messages:o.querySelector("[data-plan-messages]"),previewCard:o.querySelector("[data-plan-preview-card]"),mapWrap:o.querySelector("[data-plan-map-wrap]"),iframe:o.querySelector("[data-plan-iframe]"),previewEmpty:o.querySelector("[data-plan-preview-empty]"),previewEmptyHeading:o.querySelector("[data-plan-preview-empty-heading]"),previewEmptyBody:o.querySelector("[data-plan-preview-empty-body]"),summaryCount:o.querySelector("[data-plan-summary-count]"),openLink:o.querySelector("[data-plan-open-link]"),openLinkLabel:o.querySelector("[data-plan-open-link-label]")},c={category:String(s.initialState?.category||""),categorySearch:String(s.initialState?.categorySearch||""),startMode:String(s.initialState?.startMode||"default"),customStart:String(s.initialState?.customStart||""),expandedCategory:String(s.initialState?.category||""),customResultsExpanded:Boolean(s.initialData?.browse?.isCustomSearch),isLoadingMore:!1,browse:s.initialData?.browse||{},route:s.initialData?.route||{}},w=u.form instanceof HTMLFormElement&&"string"==typeof s.rest?.browseUrl&&""!==s.rest.browseUrl&&"string"==typeof s.rest?.routeUrl&&""!==s.rest.routeUrl&&"string"==typeof s.rest?.endpointToken&&""!==s.rest.endpointToken,M=Boolean(s.hydration?.shouldHydrateOnLoad),L=g(s.colorModeDefault||o.getAttribute("data-plan-color-mode-default")),A=f();let q=!0,F=null,j="",K=0,O=null;const G="undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;let J=0;h(o,u,b(L,A),i),L===r&&A&&A.addEventListener("change",(()=>{m()||h(o,u,b(L,A),i)}));const N=()=>{T(u,c,i,{isLoadingMore:c.isLoadingMore}),H(u,c,i),$(u,c),_(u,c),C(u,c),B(u,c),P(o,!1)},Y=(e,t="")=>{E(u,[{type:"warning",text:e||i.requestFailed||""}]),p(u.liveRegion,t||e||i.requestFailed||"")},z=(e={})=>{if(!u.startToggle||!u.startPanel)return;const t=!1!==e.syncHidden;u.startToggle.hidden=!1,u.startToggle.setAttribute("aria-expanded",String(q)),u.startToggle.classList.toggle("is-collapsed",!q),t&&(u.startPanel.hidden=!q),u.startToggleLabel&&(u.startToggleLabel.textContent=String(q?i.hideStartOptions||"Hide options":i.showStartOptions||"Show options"))},Q=e=>{if(!(u.startPanel instanceof HTMLElement&&u.startToggle))return q=e,void z();const t=u.startPanel,a=G?0:480;J&&(window.cancelAnimationFrame(J),J=0);const n=t.hidden?0:t.getBoundingClientRect().height;t.hidden=!1,e&&(t.style.height="");const r=e?t.scrollHeight:0,o=e&&r>0?Math.max(n/r,0):1,s=e?1:0;if(q=e,t.style.overflow="hidden",t.style.pointerEvents="none",t.style.height=`${n}px`,t.style.opacity=String(o),z({syncHidden:!1}),a<=0||n===r)return t.style.height="",t.style.overflow="",t.style.pointerEvents="",t.style.opacity="",t.hidden=!e,void z();const i=performance.now(),l=u=>{const d=Math.min((u-i)/a,1),c=(p=d)<.5?4*p*p*p:1-Math.pow(-2*p+2,3)/2;var p;const y=n+(r-n)*c,g=o+(s-o)*c;t.style.height=`${Math.max(y,0)}px`,t.style.opacity=String(Math.max(Math.min(g,1),0)),d<1?J=window.requestAnimationFrame(l):(t.style.height="",t.style.overflow="",t.style.pointerEvents="",t.style.opacity="",t.hidden=!e,z(),J=0)};J=window.requestAnimationFrame(l)},V=async(e,t,a={})=>{if(!w)return"unsupported";const n=Boolean(a.appendBrowseResults),r=String(a.announcementMessage||""),y=String(a.errorMessage||""),g=String(a.searchContextKey||""),m="browse"===e&&!1!==a.refreshRoute,f="route"===e?a.routeFocusRequest??null:null;if(F instanceof AbortController){if("route"===j)return d(s,"info","request:blocked",{endpointKey:e,blockedBy:j}),"busy";F.abort()}K+=1;const b=K;"route"===e&&(O=f?{requestId:b,focusRequest:f}:null),F=new AbortController,j=e,D(o,!0),W(u,c,!0),P(o,"route"===e),U(o,"route"===e),d(s,"info","request:start",{endpointKey:e,payload:t});try{const a={...t,endpoint_token:s.rest.endpointToken};"browse"===e&&(a.refresh_route=m,""!==g&&(a.search_context_key=g));const f=await fetch(s.rest["browse"===e?"browseUrl":"routeUrl"],{method:"POST",credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(a),signal:F.signal}),v=await f.json().catch((()=>({})));if(d(s,f.ok?"info":"warn","request:response",{endpointKey:e,status:f.status,ok:f.ok,body:v}),!f.ok)throw new Error(v?.message||i.requestFailed||"");if(b!==K)return!0;if("browse"===e){const e=c.category||"",a=c.expandedCategory||"",r=c.categorySearch||"",s=v?.browse||{};if(n&&""!==String(s.searchResultsError||""))return c.isLoadingMore=!1,T(u,c,i,{appendResults:!0,appendedResults:[],isLoadingMore:!1}),Y(y||i.requestFailed||"",y||i.requestFailed||""),"failed";const d=n&&""!==g&&g===String(c.browse?.searchContextKey||"")&&g===String(s.searchContextKey||""),m=d?R(c.browse,s):[];if(c.browse=d?{...(h=c.browse)||{},...(S=s)||{},searchResults:[...Array.isArray(h?.searchResults)?h.searchResults:[],...R(h,S)]}:s,c.route=v?.route||c.route||{},c.category=String(c.browse.categoryKey||t.category||""),c.categorySearch=String(c.browse.categorySearch||t.category_search||""),c.isLoadingMore=!1,c.category?(c.expandedCategory=c.category===e?a:c.category,c.customResultsExpanded=!1):c.browse.hasSearch?String(t.category_search||"")!==r&&(c.expandedCategory="",c.customResultsExpanded=!0):(c.expandedCategory="",c.customResultsExpanded=!1),d)return T(u,c,i,{appendResults:!0,appendedResults:m,isLoadingMore:!1}),H(u,c,i),$(u,c),_(u,c),C(u,c),B(u,c),P(o,!1),p(u.liveRegion,c.browse?.searchResultsError?y||i.requestFailed||"":((e,t,a)=>e>0?l(a.loadedMoreResults||"",{count:e}):String(t?.hasMoreResults?a.resultsUpdated||"":a.noMoreResults||""))(m.length,c.browse,i)),"success"}else c.route=v?.route||c.route||{},c.category=String(c.route.categoryKey||c.category||""),c.categorySearch=String(c.route.categorySearch||t.category_search||"");return c.startMode=String(t.start_mode||c.startMode||"default"),c.customStart=String(t.custom_start||""),N(),"route"===e&&O&&O.requestId===b&&(((e,t)=>{if(!t)return;const a=String(t.placeId||""),n=e.tripHeaderActions?.querySelector("button:not([disabled]):not([hidden])");let r=null;if(a&&"add-waypoint"===t.action)r=e.tripRegion?.querySelector(`[data-waypoint-id="${a}"] button[name="remove_waypoint"]`);else if(a&&"move-waypoint"===t.action){const n=String(t.direction||"");r=e.tripRegion?.querySelector(`[data-waypoint-id="${a}"] button[name="move_waypoint"][value="${a}:${n}"]`)||e.tripRegion?.querySelector(`[data-waypoint-id="${a}"] button[name="remove_waypoint"]`)}else"remove-waypoint"===t.action?r=e.tripRegion?.querySelector('[data-plan-trip-list] button[name="remove_waypoint"]')||n:"clear-trip"===t.action&&(r=n||e.tripHeading);k(r)||k(e.tripHeading)})(u,O.focusRequest),O=null),p(u.liveRegion,r||""),"success"}catch(a){return"AbortError"===a?.name?(d(s,"info","request:aborted",{endpointKey:e}),"aborted"):(d(s,"error","request:failed",{endpointKey:e,error:a instanceof Error?a.message:String(a||""),payload:t}),n&&(c.isLoadingMore=!1,T(u,c,i,{appendResults:!0,appendedResults:[],isLoadingMore:!1})),Y(n?y||i.requestFailed||"":a instanceof Error?a.message:i.requestFailed||"",n&&(y||i.requestFailed)||""),"failed")}finally{b===K&&(n&&c.isLoadingMore&&(c.isLoadingMore=!1),D(o,!1),W(u,c,!1),P(o,!1),"route"===e&&O&&O.requestId===b&&(O=null),U(o,!1),F=null,j="")}var h,S};if(u.startModeInputs.forEach((e=>{e.addEventListener("change",(()=>{c.startMode=S(u.startModeInputs)||c.startMode||"default",C(u,c),w?V("browse",v(u,c),{announcementMessage:i.startingPointUpdated||"",refreshRoute:!0}):p(u.liveRegion,i.startingPointUpdated||"")}))})),u.customStartInput instanceof HTMLInputElement&&u.customStartInput.addEventListener("change",(()=>{c.customStart=u.customStartInput.value||"",C(u,c),w?V("browse",v(u,c),{announcementMessage:i.startingPointUpdated||"",refreshRoute:!0}):p(u.liveRegion,i.startingPointUpdated||"")})),u.categorySearchInput instanceof HTMLInputElement&&(u.categorySearchInput.addEventListener("input",(()=>{c.categorySearch=u.categorySearchInput.value||""})),u.categorySearchInput.addEventListener("keydown",(e=>{if("Enter"!==e.key||!w)return;e.preventDefault();const t=v(u,c);t.category="",t.category_search=u.categorySearchInput.value||"",c.expandedCategory="",c.customResultsExpanded=!0,V("browse",t,{announcementMessage:i.resultsUpdated||"",refreshRoute:I(c.route)})}))),u.form instanceof HTMLFormElement&&u.form.addEventListener("submit",(e=>{const t=e.submitter;if(!(t instanceof HTMLButtonElement&&w))return;let a="browse",n=i.resultsUpdated||"";const r=v(u,c);if(t.matches("[data-plan-category-button]")){const a=t.getAttribute("data-category-key")||"";if(a===c.category){const n=t.querySelector(".plan-your-day__category-title")?.textContent?.trim()||a;return e.preventDefault(),c.expandedCategory=c.expandedCategory===a?"":a,c.customResultsExpanded=!1,T(u,c,i),void p(u.liveRegion,c.expandedCategory===a?l(i.categoryResultsExpanded||"",{category:n}):l(i.categoryResultsCollapsed||"",{category:n}))}r.category=a,r.category_search="",c.expandedCategory=a,c.customResultsExpanded=!1}else t.matches('[data-plan-action="search-category-query"]')?(r.category="",r.category_search=u.categorySearchInput instanceof HTMLInputElement&&u.categorySearchInput.value||"",c.expandedCategory="",c.customResultsExpanded=!0):t.matches('[data-plan-action="add-waypoint"]')?(r.waypoints=[...r.waypoints,t.getAttribute("data-place-id")||t.value||""],a="route",n=i.tripUpdated||""):t.matches('[data-plan-action="remove-waypoint"]')?(r.remove_waypoint=t.getAttribute("data-place-id")||t.value||"",a="route",n=i.tripUpdated||""):t.matches("[data-plan-clear-trip]")?(r.clear_trip=!0,a="route",n=i.tripUpdated||""):"move_waypoint"===t.name&&t.value&&(r.move_waypoint=t.value,a="route",n=i.tripUpdated||"");e.preventDefault(),V(a,r,{announcementMessage:n,refreshRoute:"browse"===a?I(c.route):void 0,routeFocusRequest:"route"===a?x(t):null})})),o.addEventListener("click",(e=>{const r=e.target;if(!(r instanceof HTMLElement))return;if(r.closest('[data-plan-open-link][aria-disabled="true"]')instanceof HTMLElement)return e.preventDefault(),void p(u.liveRegion,i.openMapsDisabled||"");if(r.closest("[data-plan-start-toggle]")instanceof HTMLButtonElement)return e.preventDefault(),q?q&&Q(!1):q||Q(!0),void p(u.liveRegion,q?i.startOptionsExpanded||"":i.startOptionsCollapsed||"");if(r.closest("[data-plan-color-mode-toggle]")instanceof HTMLButtonElement){e.preventDefault();const r=(o.getAttribute("data-plan-color-mode")===n?n:a)===n?a:n;return(e=>{if(y(e))try{window.localStorage?.setItem(t,e)}catch(e){}})(r),void h(o,u,r,i)}if(r.closest("[data-plan-custom-results-button]")instanceof HTMLButtonElement){if(e.preventDefault(),!c.browse?.hasSearch||c.category)return;return c.expandedCategory="",c.customResultsExpanded=!c.customResultsExpanded,T(u,c,i),void p(u.liveRegion,c.customResultsExpanded?String(i.customResultsExpanded||""):String(i.customResultsCollapsed||""))}const s=r.closest("[data-plan-load-more-button]");if(s instanceof HTMLButtonElement){if(e.preventDefault(),!w||c.isLoadingMore||s.disabled)return;const t=String(c.browse?.nextPageToken||"");if(!t)return void p(u.liveRegion,i.noMoreResults||"");c.isLoadingMore=!0,T(u,c,i,{appendResults:!0,appendedResults:[],isLoadingMore:!0}),p(u.liveRegion,i.loadingMoreResults||""),V("browse",{...v(u,c),page_token:t,append_results:!0},{appendBrowseResults:!0,errorMessage:i.loadMoreError||"",refreshRoute:!1,searchContextKey:String(c.browse?.searchContextKey||"")})}})),o.addEventListener("keydown",(e=>{const t=e.target;if(!(t instanceof HTMLElement))return;t.closest('[data-plan-open-link][aria-disabled="true"]')instanceof HTMLElement&&("Enter"!==e.key&&" "!==e.key||(e.preventDefault(),p(u.liveRegion,i.openMapsDisabled||"")))})),N(),z(),o.classList.add("is-enhanced"),M){if(!w)return void Y(i.requestFailed||"");V("browse",v(u,c),{refreshRoute:!0})}},K=()=>{document.querySelectorAll("[data-plan-root]").forEach(j)};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",K,{once:!0}):K()})(); \ No newline at end of file diff --git a/plugin/plan-your-day/plan-your-day.php b/plugin/plan-your-day/plan-your-day.php index e399c72..ab67033 100644 --- a/plugin/plan-your-day/plan-your-day.php +++ b/plugin/plan-your-day/plan-your-day.php @@ -2,7 +2,7 @@ /** * Plugin Name: Plan Your Day * Description: A configurable day planning plugin for WordPress. - * Version: 0.1.0 + * Version: 0.5 * Requires at least: 6.8 * Requires PHP: 8.2 * Author: acodebeard @@ -16,8 +16,8 @@ defined( 'ABSPATH' ) || exit; -define( 'PLAN_YOUR_DAY_VERSION', '0.1.0' ); -define( 'PLAN_YOUR_DAY_SCHEMA_VERSION', 2 ); +define( 'PLAN_YOUR_DAY_VERSION', '0.5' ); +define( 'PLAN_YOUR_DAY_SCHEMA_VERSION', 3 ); define( 'PLAN_YOUR_DAY_PLUGIN_FILE', __FILE__ ); define( 'PLAN_YOUR_DAY_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'PLAN_YOUR_DAY_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); diff --git a/plugin/plan-your-day/readme.txt b/plugin/plan-your-day/readme.txt index ac71836..95de31d 100644 --- a/plugin/plan-your-day/readme.txt +++ b/plugin/plan-your-day/readme.txt @@ -4,7 +4,7 @@ Tags: planning, maps, wayfinding Requires at least: 6.8 Tested up to: 6.9 Requires PHP: 8.2 -Stable tag: 0.1.0 +Stable tag: 0.5 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -104,11 +104,13 @@ architecture, settings, security, and troubleshooting notes. == Changelog == -= Unreleased = += 0.5 = * Added block-editor and shortcode entry points that share the same planner renderer. * Added admin-editable categories and interface copy settings. * Added REST-powered planner interactions, rate limiting, and Google API admin tools. * Added a reproducible release zip builder and manual release-process documentation. +* Added color mode controls, Noto Sans assets, and a cleaned-up settings interface. +* Added an upgrade cleanup that prunes removed interface-copy settings from existing installs. = 0.1.0 = * Initial plugin scaffold (GH issue #20): directory structure, main plugin file, activation / deactivation hooks, uninstall routine, PSR-4 autoloading. diff --git a/plugin/plan-your-day/release.json b/plugin/plan-your-day/release.json index b2e437c..42587a0 100644 --- a/plugin/plan-your-day/release.json +++ b/plugin/plan-your-day/release.json @@ -1,9 +1,9 @@ { "name": "Plan Your Day", "slug": "plan-your-day", - "version": "0.1.0", - "schemaVersion": 2, - "artifact": "../../dist/plan-your-day-0.1.0.zip", + "version": "0.5", + "schemaVersion": 3, + "artifact": "../../dist/plan-your-day-0.5.zip", "distribution": "github-release-zip", "notes": "Installable WordPress admin zip built from this source repository with Composer production autoload files included." } diff --git a/plugin/plan-your-day/src/Admin/SettingsPage.php b/plugin/plan-your-day/src/Admin/SettingsPage.php index bd212a3..4ceb219 100644 --- a/plugin/plan-your-day/src/Admin/SettingsPage.php +++ b/plugin/plan-your-day/src/Admin/SettingsPage.php @@ -102,6 +102,24 @@ public function register(): void { 'plan_your_day_default_location' ); + add_settings_section( + 'plan_your_day_appearance', + __( 'Appearance', 'plan-your-day' ), + [ $this, 'render_appearance_section' ], + Settings::PAGE_SLUG + ); + + $this->add_field( + 'color_mode_default', + __( 'Default color mode', 'plan-your-day' ), + __( 'Choose the public planner color mode before a visitor makes their own choice. System follows the visitor browser or OS preference.', 'plan-your-day' ), + 'select', + [ + 'choices' => Settings::color_mode_choices(), + ], + 'plan_your_day_appearance' + ); + add_settings_section( 'plan_your_day_planner_behavior', __( 'Planner Behavior', 'plan-your-day' ), @@ -198,10 +216,12 @@ public function register(): void { $this->add_field( 'categories', - __( 'Categories', 'plan-your-day' ), + '', __( 'Manage the category buttons shown to visitors. The Google search query is the phrase sent to Google Places.', 'plan-your-day' ), 'categories', - [], + [ + 'field_class' => 'plan-your-day-categories-field', + ], 'plan_your_day_categories' ); @@ -554,6 +574,13 @@ public function render_planner_behavior_section(): void { ); } + public function render_appearance_section(): void { + printf( + '

    %s

    ', + esc_html__( 'Set the public planner default color mode. Visitors can switch modes on the planner without changing the saved plugin setting.', 'plan-your-day' ) + ); + } + public function render_interface_copy_section(): void { printf( '

    %s

    ', @@ -891,18 +918,27 @@ private function add_field( array $attributes = [], string $section = 'plan_your_day_google_api' ): void { + $field_class = (string) ( $attributes['field_class'] ?? '' ); + unset( $attributes['field_class'] ); + + $args = [ + 'attributes' => $attributes, + 'description' => $description, + 'key' => $key, + 'type' => $type, + ]; + + if ( '' !== $field_class ) { + $args['class'] = $field_class; + } + add_settings_field( 'plan_your_day_' . $key, $label, [ $this, 'render_field' ], Settings::PAGE_SLUG, $section, - [ - 'attributes' => $attributes, - 'description' => $description, - 'key' => $key, - 'type' => $type, - ] + $args ); } @@ -982,9 +1018,11 @@ private function render_interface_copy_group( string $group ): void { $type = (string) $definition['type']; $description = (string) $definition['description']; ?> -
    +
    + + - - + + - - + + fixture( 'assets/js/admin-settings.js' ); + + self::assertStringContainsString( 'initializeJQueryCategorySorting', $script ); + self::assertStringContainsString( 'initializeVanillaCategorySorting', $script ); + self::assertStringContainsString( 'window.jQuery', $script ); + self::assertStringContainsString( '.sortable(', $script ); + self::assertStringContainsString( 'return initializeVanillaCategorySorting', $script ); + } + + private function fixture( string $path ): string { + $content = file_get_contents( dirname( __DIR__ ) . '/' . $path ); + + self::assertIsString( $content ); + + return $content; + } +} diff --git a/plugin/plan-your-day/tests/SettingsPageTest.php b/plugin/plan-your-day/tests/SettingsPageTest.php index 7fdb80e..708cd0f 100644 --- a/plugin/plan-your-day/tests/SettingsPageTest.php +++ b/plugin/plan-your-day/tests/SettingsPageTest.php @@ -151,6 +151,17 @@ public function test_render_interface_copy_section_outputs_collapsed_accordion_g self::assertStringContainsString( 'Distance Labels', $output ); } + public function test_register_uses_waypoints_display_name_for_settings_page(): void { + $settings_page = $this->settings_page(); + + $settings_page->register(); + + $page = $GLOBALS['plan_your_day_test_options_pages'][0] ?? []; + + self::assertSame( 'Waypoints Settings', $page['page_title'] ?? null ); + self::assertSame( 'Waypoints', $page['menu_title'] ?? null ); + } + public function test_register_categories_editor_field_has_no_duplicate_label(): void { $settings_page = $this->settings_page(); @@ -163,6 +174,39 @@ public function test_register_categories_editor_field_has_no_duplicate_label(): self::assertSame( 'plan-your-day-categories-field', $field['args']['class'] ?? null ); } + public function test_register_places_interface_copy_after_google_sections(): void { + $settings_page = $this->settings_page(); + + $settings_page->register(); + + $section_ids = array_keys( $GLOBALS['plan_your_day_test_settings_sections'] ); + + self::assertGreaterThan( + array_search( 'plan_your_day_google_cache', $section_ids, true ), + array_search( 'plan_your_day_interface_copy', $section_ids, true ) + ); + } + + public function test_register_does_not_register_legacy_default_categories_toggle(): void { + $settings_page = $this->settings_page(); + + $settings_page->register(); + + self::assertArrayNotHasKey( 'plan_your_day_use_preset_categories', $GLOBALS['plan_your_day_test_settings_fields'] ); + } + + public function test_categories_section_copy_allows_empty_category_list_without_fallback_copy(): void { + $settings_page = $this->settings_page(); + + ob_start(); + $settings_page->render_categories_section(); + $output = (string) ob_get_clean(); + + self::assertStringContainsString( 'custom search only', $output ); + self::assertStringNotContainsString( 'fallback', $output ); + self::assertStringNotContainsString( 'Use Default Categories', $output ); + } + public function test_starting_point_cleanup_candidate_fields_are_removed_from_interface_copy_admin(): void { $settings_page = $this->settings_page(); @@ -327,9 +371,41 @@ public function test_enqueue_assets_only_runs_on_the_settings_screen(): void { 'https://example.test/wp-content/plugins/plan-your-day/assets/js/admin-settings.js', $GLOBALS['plan_your_day_test_enqueued_scripts']['plan-your-day-admin-settings']['src'] ); + self::assertSame( + [ 'jquery', 'jquery-ui-sortable' ], + $GLOBALS['plan_your_day_test_enqueued_scripts']['plan-your-day-admin-settings']['deps'] + ); } - public function test_categories_field_renders_starter_rows_when_no_categories_have_been_saved(): void { + public function test_categories_field_renders_no_saved_rows_when_saved_category_list_is_empty(): void { + $settings_page = $this->settings_page(); + + ob_start(); + $settings_page->render_field( + [ + 'key' => 'categories', + 'type' => 'categories', + 'description' => '', + 'attributes' => [], + ] + ); + $output = (string) ob_get_clean(); + + self::assertStringNotContainsString( 'Coffee near me', $output ); + self::assertSame( 0, preg_match_all( '/plan_your_day_settings\[categories\]\[\d+\]\[label\]/', $output ) ); + } + + public function test_categories_field_renders_saved_default_rows(): void { + update_option( + Settings::OPTION_NAME, + array_merge( + Settings::defaults(), + [ + 'categories' => Settings::default_categories(), + ] + ) + ); + $settings_page = $this->settings_page(); ob_start(); @@ -343,9 +419,11 @@ public function test_categories_field_renders_starter_rows_when_no_categories_ha ); $output = (string) ob_get_clean(); - self::assertStringContainsString( 'Coffee', $output ); - self::assertStringContainsString( 'coffee shops and cafes', $output ); - self::assertStringContainsString( 'View built-in starter categories', $output ); + self::assertStringContainsString( 'Coffee near me', $output ); + self::assertStringNotContainsString( 'Leave a row empty to ignore it.', $output ); + self::assertStringNotContainsString( 'View built-in starter categories', $output ); + self::assertStringNotContainsString( 'Manage the category buttons shown to visitors.', $output ); + self::assertSame( count( CategoryCatalog::default_rows() ), preg_match_all( '/plan_your_day_settings\[categories\]\[\d+\]\[label\]/', $output ) ); } public function test_categories_field_template_keeps_new_row_form_controls(): void { @@ -366,12 +444,80 @@ public function test_categories_field_template_keeps_new_row_form_controls(): vo self::assertStringContainsString( 'data-plan-category-row', $output ); self::assertStringContainsString( 'data-plan-category-drag-handle', $output ); self::assertStringContainsString( 'draggable="true"', $output ); + self::assertStringNotContainsString( 'class="button plan-your-day-category-drag-handle"', $output ); self::assertStringContainsString( 'data-plan-category-sort-order', $output ); self::assertStringContainsString( 'plan_your_day_settings[categories][__INDEX__][label]', $output ); self::assertStringContainsString( 'plan_your_day_settings[categories][__INDEX__][description]', $output ); self::assertStringContainsString( 'plan_your_day_settings[categories][__INDEX__][text_query]', $output ); + self::assertStringContainsString( 'data-plan-delete-category', $output ); + self::assertStringContainsString( 'type="button"', $output ); + self::assertStringContainsString( 'class="button button-primary plan-your-day-add-category-button"', $output ); + self::assertStringContainsString( 'placeholder="Short button name, e.g. Farmers market"', $output ); + self::assertStringContainsString( 'placeholder="A helpful one-sentence description for visitors"', $output ); + self::assertStringContainsString( 'placeholder="Google search phrase, e.g. farmers markets near me"', $output ); self::assertStringContainsString( 'type="hidden" name="plan_your_day_settings[categories][__INDEX__][sort_order]"', $output ); self::assertStringNotContainsString( 'type="number" name="plan_your_day_settings[categories][__INDEX__][sort_order]"', $output ); + self::assertStringNotContainsString( 'plan_your_day_settings[categories][__INDEX__][remove]', $output ); + } + + public function test_categories_field_marks_columns_for_admin_widths_and_delete_confirmation(): void { + $settings_page = $this->settings_page(); + + ob_start(); + $settings_page->render_field( + [ + 'key' => 'categories', + 'type' => 'categories', + 'description' => '', + 'attributes' => [], + ] + ); + $output = (string) ob_get_clean(); + + self::assertStringContainsString( 'class="plan-your-day-category-label-column"', $output ); + self::assertStringContainsString( 'class="plan-your-day-category-description-column"', $output ); + self::assertStringContainsString( 'class="plan-your-day-category-label-cell"', $output ); + self::assertStringContainsString( 'class="plan-your-day-category-description-cell"', $output ); + self::assertStringContainsString( 'data-plan-delete-category-confirm=', $output ); + } + + public function test_categories_table_uses_dedicated_compact_columns_for_order_and_enabled(): void { + $settings_page = $this->settings_page(); + + ob_start(); + $settings_page->render_field( + [ + 'key' => 'categories', + 'type' => 'categories', + 'description' => '', + 'attributes' => [], + ] + ); + $output = (string) ob_get_clean(); + + self::assertStringContainsString( '', $output ); + self::assertStringContainsString( 'class="plan-your-day-category-order-col"', $output ); + self::assertStringContainsString( 'class="plan-your-day-category-enabled-col"', $output ); + self::assertStringNotContainsString( 'width="42"', $output ); + self::assertStringNotContainsString( 'width="32"', $output ); + } + + public function test_categories_field_uses_external_admin_script_for_sorting_behavior(): void { + $settings_page = $this->settings_page(); + + ob_start(); + $settings_page->render_field( + [ + 'key' => 'categories', + 'type' => 'categories', + 'description' => '', + 'attributes' => [], + ] + ); + $output = (string) ob_get_clean(); + + self::assertStringNotContainsString( '