self::primary_color(), '--acc-secondary' => self::secondary_color(), '--acc-accent' => self::accent_color(), '--acc-font-display' => FontRegistry::display_stack( self::display_font_slug() ), '--acc-font-body' => FontRegistry::body_stack( self::body_font_slug() ), ]; $decls = ''; foreach ( $vars as $name => $value ) { $decls .= $name . ':' . $value . ';'; } return ':root{' . $decls . '}'; } /** * Google Fonts URL for any chosen font that isn't already loaded by the * default @import in system.css (Zilla Slab, DM Sans). Returns null when * both fonts are system fonts or already covered by the default import. */ public static function google_fonts_url(): ?string { $params = []; if ( self::display_font_slug() !== FontRegistry::DEFAULT_DISPLAY ) { $param = FontRegistry::display_google_param( self::display_font_slug() ); if ( $param ) { $params[] = 'family=' . $param; } } if ( self::body_font_slug() !== FontRegistry::DEFAULT_BODY ) { $param = FontRegistry::body_google_param( self::body_font_slug() ); if ( $param ) { $params[] = 'family=' . $param; } } if ( ! $params ) { return null; } return 'https://fonts.googleapis.com/css2?' . implode( '&', $params ) . '&display=swap'; } private static function color_setting( string $key, string $default ): string { $value = (string) ( self::settings()[ $key ] ?? '' ); return $value !== '' && preg_match( '/^#[0-9a-fA-F]{6}$/', $value ) ? $value : $default; } private static function settings(): array { return get_option( 'academiccrew_settings', [] ); } }