diff --git a/404.php b/404.php new file mode 100644 index 0000000..f3d22e0 --- /dev/null +++ b/404.php @@ -0,0 +1,3 @@ + +

+ + +
1 ) ); } ?>
+ { + const root = document.documentElement; + const storedTheme = localStorage.getItem('c1024-theme'); + if (storedTheme) root.dataset.theme = storedTheme; + + const themeToggle = document.querySelector('[data-theme-toggle]'); + if (themeToggle) { + const updateThemeLabel = () => { + const dark = root.dataset.theme === 'dark'; + themeToggle.setAttribute('aria-pressed', String(dark)); + themeToggle.setAttribute('aria-label', dark ? 'Use light mode' : 'Use dark mode'); + }; + updateThemeLabel(); + themeToggle.addEventListener('click', () => { + root.dataset.theme = root.dataset.theme === 'dark' ? 'light' : 'dark'; + localStorage.setItem('c1024-theme', root.dataset.theme); + updateThemeLabel(); + }); + } + + const header = document.querySelector('.site-header'); + let lastY = window.scrollY; + let ticking = false; + window.addEventListener('scroll', () => { + if (ticking || !header) return; + ticking = true; + requestAnimationFrame(() => { + const currentY = window.scrollY; + header.classList.toggle('is-hidden', currentY > lastY && currentY > header.offsetHeight); + lastY = currentY; + ticking = false; + }); + }, { passive: true }); + + const searchToggle = document.querySelector('[data-search-toggle]'); + const searchPanel = document.querySelector('[data-search-panel]'); + if (searchToggle && searchPanel) { + searchToggle.addEventListener('click', () => { + const open = searchPanel.classList.toggle('is-open'); + searchToggle.setAttribute('aria-expanded', String(open)); + if (open) searchPanel.querySelector('input')?.focus(); + }); + document.addEventListener('click', event => { + if (!searchPanel.contains(event.target) && !searchToggle.contains(event.target)) { + searchPanel.classList.remove('is-open'); + searchToggle.setAttribute('aria-expanded', 'false'); + } + }); + } + + const menuToggle = document.querySelector('[data-menu-toggle]'); + if (menuToggle && header) menuToggle.addEventListener('click', () => { + const open = header.classList.toggle('menu-open'); + menuToggle.setAttribute('aria-expanded', String(open)); + }); +})(); diff --git a/comments.php b/comments.php new file mode 100644 index 0000000..b43285b --- /dev/null +++ b/comments.php @@ -0,0 +1,12 @@ + +
+ +

+
    'ol', 'short_ping' => true, 'avatar_size' => 48 ) ); ?>
+ + +

+ +
diff --git a/editor-style.css b/editor-style.css new file mode 100644 index 0000000..950993a --- /dev/null +++ b/editor-style.css @@ -0,0 +1 @@ +@font-face{font-family:'Alpha Lyrae';src:url('fonts/AlphaLyrae-Medium.woff2') format('woff2')}@font-face{font-family:'Crimson Pro';src:url('fonts/crimson-pro-latin-ext-wght-normal.woff2') format('woff2')}@font-face{font-family:'Berkeley Mono';src:url('fonts/BerkeleyMono-Regular.woff2') format('woff2')}body{font-family:'Crimson Pro',Georgia,serif;font-size:22px;line-height:1.55;color:#1d1b19}h1,h2,h3,h4{font-family:'Alpha Lyrae',sans-serif;font-weight:500;letter-spacing:.025em}code,pre{font-family:'Berkeley Mono',monospace}a{color:#c3480b} diff --git a/footer.php b/footer.php new file mode 100644 index 0000000..0c8f237 --- /dev/null +++ b/footer.php @@ -0,0 +1,9 @@ + + + + diff --git a/front-page.php b/front-page.php new file mode 100644 index 0000000..dccb7fa --- /dev/null +++ b/front-page.php @@ -0,0 +1,16 @@ + + +
+ +

+
+ +
+ 1 ) ); } } else { while ( have_posts() ) { the_post(); ?>
>
+
+ true, 'flex-height' => true ) ); + add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'style', 'script' ) ); + add_theme_support( 'align-wide' ); + add_editor_style( 'editor-style.css' ); + register_nav_menus( array( + 'primary' => __( 'Primary menu', 'c1024-2026' ), + 'footer' => __( 'Footer menu', 'c1024-2026' ), + ) ); +} +add_action( 'after_setup_theme', 'c1024_2026_setup' ); + +function c1024_2026_assets() { + wp_enqueue_style( 'c1024-2026-style', get_stylesheet_uri(), array(), '1.0.0' ); + wp_enqueue_script( 'c1024-2026-theme', get_template_directory_uri() . '/assets/js/theme.js', array(), '1.0.0', true ); +} +add_action( 'wp_enqueue_scripts', 'c1024_2026_assets' ); + +function c1024_2026_customize_register( $wp_customize ) { + $wp_customize->add_section( 'c1024_2026_home_hero', array( + 'title' => __( 'Home page video hero', 'c1024-2026' ), + 'description' => __( 'Displayed on the site front page.', 'c1024-2026' ), + 'priority' => 30, + ) ); + $wp_customize->add_setting( 'c1024_2026_hero_video', array( 'sanitize_callback' => 'absint' ) ); + $wp_customize->add_control( new WP_Customize_Media_Control( $wp_customize, 'c1024_2026_hero_video', array( + 'label' => __( 'Hero video', 'c1024-2026' ), 'section' => 'c1024_2026_home_hero', 'mime_type' => 'video', + ) ) ); + $wp_customize->add_setting( 'c1024_2026_hero_title', array( 'default' => get_bloginfo( 'name' ), 'sanitize_callback' => 'sanitize_text_field' ) ); + $wp_customize->add_control( 'c1024_2026_hero_title', array( 'label' => __( 'Overlay heading', 'c1024-2026' ), 'section' => 'c1024_2026_home_hero', 'type' => 'text' ) ); + $wp_customize->add_setting( 'c1024_2026_hero_text', array( 'sanitize_callback' => 'sanitize_textarea_field' ) ); + $wp_customize->add_control( 'c1024_2026_hero_text', array( 'label' => __( 'Overlay text', 'c1024-2026' ), 'section' => 'c1024_2026_home_hero', 'type' => 'textarea' ) ); +} +add_action( 'customize_register', 'c1024_2026_customize_register' ); + +function c1024_2026_excerpt_more( $more ) { + return '…'; +} +add_filter( 'excerpt_more', 'c1024_2026_excerpt_more' ); diff --git a/header.php b/header.php new file mode 100644 index 0000000..9b32135 --- /dev/null +++ b/header.php @@ -0,0 +1,30 @@ + +> + + + + + +> + + + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..7af178b --- /dev/null +++ b/index.php @@ -0,0 +1,6 @@ + +
+ + 1 ) ); } else { ?>

+
+ +
+
>
', '' ); ?>
+
+ + +
1 ) ); } else { ?>

+"> + + + + diff --git a/single.php b/single.php new file mode 100644 index 0000000..78000da --- /dev/null +++ b/single.php @@ -0,0 +1,13 @@ + +
+ +
> +
', '' ); ?>
+
+
+
+
+ + +
+a{color:var(--accent)}.header-actions{display:flex;align-items:center;gap:.4rem}.icon-button{display:grid;place-items:center;width:2.2rem;height:2.2rem;padding:0;border:0;border-radius:50%;background:transparent;color:var(--text)}.icon-button:hover,.icon-button:focus{background:var(--surface);color:var(--accent)}.icon{width:1.15rem;height:1.15rem;fill:none;stroke:currentColor;stroke-width:1.8}.search-panel{position:absolute;top:calc(100% + 1px);right:max(1rem,calc((100vw - var(--wide))/2));width:min(420px,calc(100vw - 2rem));padding:1rem;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);transform:translateY(-.5rem);opacity:0;visibility:hidden;transition:.18s}.search-panel.is-open{transform:none;opacity:1;visibility:visible}.search-form{display:flex;gap:.5rem}.search-field{flex:1;min-width:0;padding:.55rem .7rem;border:1px solid var(--line);border-radius:2px;background:var(--bg);color:var(--text)}.button,.search-submit,input[type=submit]{padding:.55rem .9rem;border:1px solid var(--accent);border-radius:2px;background:var(--accent);color:#fff;font-family:'Berkeley Mono',monospace;font-size:.68rem;letter-spacing:.04em}.menu-toggle{display:none} +.site-main{max-width:var(--content);padding:3.5rem 1.5rem 5rem;margin:auto}.page-header{max-width:var(--content);padding:3.5rem 1.5rem 0;margin:auto}.page-title,.entry-title,h1,h2,h3,h4{font-family:'Alpha Lyrae',sans-serif;font-weight:500;line-height:1.16;letter-spacing:.025em}.page-title{margin:0;font-size:clamp(2rem,1.35rem + 2.5vw,3.5rem)}.archive-description{color:var(--muted)}.post-card{padding:2.25rem 0;border-bottom:1px solid var(--line)}.post-card:first-child{padding-top:0}.entry-meta,.entry-footer,.taxonomy{color:var(--muted);font-family:'Berkeley Mono',monospace;font-size:.68rem;letter-spacing:.035em}.entry-meta a,.entry-footer a{color:inherit}.entry-title{margin:.35rem 0 .8rem;font-size:clamp(1.75rem,1.3rem + 1.7vw,2.75rem)}.entry-title a{color:var(--text);text-decoration:none}.entry-title a:hover{color:var(--accent)}.entry-summary p{margin-bottom:0}.entry-thumbnail{margin:1.25rem 0}.entry-thumbnail img{width:100%;border-radius:2px}.post-categories,.tags-links{display:flex;flex-wrap:wrap;gap:.4rem;margin:.7rem 0}.post-categories a,.tags-links a{padding:.18rem .45rem;border:1px solid var(--line);border-radius:999px;color:var(--muted);text-decoration:none}.post-categories a:hover,.tags-links a:hover{border-color:var(--accent);color:var(--accent)}.single .entry-header,.page .entry-header{margin-bottom:2rem}.single .entry-title,.page .entry-title{font-size:clamp(2.25rem,1.5rem + 3vw,4rem)}.entry-content{font-size:clamp(1.25rem,1.1rem + .4vw,1.5rem)}.entry-content>*{margin-top:0;margin-bottom:1.3em}.entry-content h2{margin-top:2em;font-size:1.55em}.entry-content h3{margin-top:1.8em;font-size:1.25em}.entry-content ul,.entry-content ol{padding-left:1.3em}.entry-content blockquote{padding:.35rem 1.25rem;border-left:4px solid var(--accent);margin-left:0;color:var(--muted);font-style:italic}.entry-content pre{padding:1rem 1.2rem;overflow:auto;border-radius:2px;background:var(--code-bg);color:var(--code-text);font-size:.78em}.entry-content code{font-family:'Berkeley Mono',monospace;font-size:.8em}.entry-content :not(pre)>code{padding:.1em .3em;border-radius:2px;background:var(--surface);border:1px solid var(--line)}.wp-block-image,.entry-content figure{margin-left:0;margin-right:0}.wp-caption-text{color:var(--muted);font-family:'Berkeley Mono',monospace;font-size:.68rem}.wp-block-separator{border:0;border-top:1px solid var(--line)} +.hero{position:relative;display:grid;min-height:min(65vh,760px);overflow:hidden;background:#171615;color:#fff}.hero-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.hero::after{position:absolute;inset:0;background:linear-gradient(90deg,rgba(0,0,0,.74),rgba(0,0,0,.2));content:''}.hero-content{position:relative;z-index:1;align-self:end;max-width:var(--wide);width:100%;padding:clamp(4rem,13vw,10rem) 1.5rem 3.5rem;margin:auto}.hero-eyebrow{font-family:'Berkeley Mono',monospace;font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:#f09b72}.hero-title{max-width:850px;margin:.45rem 0;font-family:'Alpha Lyrae',sans-serif;font-size:clamp(2.8rem,7vw,6rem);font-weight:500;line-height:.98}.hero-text{max-width:560px;margin:0;font-size:clamp(1.25rem,1.1rem + .5vw,1.6rem)}.hero+.site-main{padding-top:3rem}.pagination,.post-navigation{display:flex;justify-content:space-between;gap:1rem;margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid var(--line);font-family:'Berkeley Mono',monospace;font-size:.7rem}.pagination .nav-links{display:flex;gap:.8rem}.page-numbers{padding:.25rem}.page-numbers.current{color:var(--accent)}.comments-area{margin-top:4rem;padding-top:2rem;border-top:1px solid var(--line)}.comment-list{padding:0;list-style:none}.comment-body{padding:1rem 0;border-bottom:1px solid var(--line)}.comment-meta{font-family:'Berkeley Mono',monospace;font-size:.7rem}.comment-form input:not([type=submit]),.comment-form textarea{width:100%;padding:.55rem;border:1px solid var(--line);background:var(--surface);color:var(--text)}.site-footer{padding:2.5rem 1.5rem;border-top:1px solid var(--line);color:var(--muted);font-family:'Berkeley Mono',monospace;font-size:.68rem}.footer-inner{display:flex;justify-content:space-between;gap:1rem;max-width:var(--wide);margin:auto}.footer-menu{display:flex;gap:1rem;margin:0;padding:0;list-style:none}.footer-menu a{color:inherit}.not-found{text-align:center}.not-found .search-form{max-width:380px;margin:2rem auto} +@media(max-width:760px){.header-inner{min-height:4rem;padding:.55rem 1rem;flex-wrap:wrap}.menu-toggle{display:grid}.primary-navigation{order:4;width:100%;display:none}.site-header.menu-open .primary-navigation{display:block}.primary-menu{align-items:flex-start;flex-direction:column;gap:.9rem;padding:.8rem 0;border-top:1px solid var(--line)}.site-description{display:none}.site-main{padding:2.5rem 1rem 4rem}.page-header{padding:2.5rem 1rem 0}.hero-content{padding:6rem 1rem 2.5rem}.hero{min-height:55vh}.footer-inner{flex-direction:column}.entry-content{font-size:1.25rem}} +@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important}} diff --git a/template-parts/content.php b/template-parts/content.php new file mode 100644 index 0000000..edfe927 --- /dev/null +++ b/template-parts/content.php @@ -0,0 +1,9 @@ +
> +
+ + ', esc_url( get_permalink() ) ), '' ); ?> +
+
+ +
+