• All
  • リフォーム
DSC01262
京町屋リフォーム
晴博
月2
京町屋リフォーム
谷町君・星屋・月栖居
春之华
リフォーム京都
谷町君・春の華
秋之家
京町屋リフォーム
谷町君・星屋・秋の家
株式会社星屋 - TOPページ デザインカンプ v1 (function(){ try { var saved = localStorage.getItem('hoshiya-theme'); var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; var initial = saved || (prefersDark ? 'dark' : 'light'); document.documentElement.setAttribute('data-theme', initial); } catch(e) { document.documentElement.setAttribute('data-theme','light'); } })(); /* ========================================================= RESET & BASE ========================================================= */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } /* ========================================================= COLOR TOKENS -- ガイドライン v2 準拠 ========================================================= */ :root { /* Gold */ --gold-primary: #C9A77E; --gold-light: #E0C9A7; --gold-dark: #9B7F5A; --gold-pale: #F8F1E5; /* Grayscale */ --black: #1A1A1A; --gray-900: #2C2C2C; --gray-700: #555555; --gray-500: #888888; --gray-300: #CCCCCC; --gray-100: #F5F5F5; --white: #FFFFFF; /* Semantic */ --bg-primary: var(--white); --bg-secondary: var(--gray-100); --bg-card: var(--white); --bg-footer: var(--black); --text-primary: var(--gray-900); --text-heading: var(--black); --text-muted: var(--gray-700); --text-accent: var(--gold-primary); --text-on-dark: rgba(255,255,255,0.92); --text-on-dark-muted: rgba(255,255,255,0.7); --border-color: var(--gray-300); --border-accent: var(--gold-primary); --border-soft: #E5E5E5; /* Fonts */ --font-sans: "Noto Sans JP", "Yu Gothic", "Hiragino Sans", system-ui, sans-serif; --font-serif: "Noto Serif JP", "Yu Mincho", "Hiragino Mincho ProN", serif; --font-en: "Cormorant Garamond", "Times New Roman", Georgia, serif; /* Layout */ --header-h: 80px; --header-h-sp: 60px; --pad-x: 64px; --pad-x-sp: 20px; --max-w: 1440px; } /* DARK MODE -- 暗背景でも上品さを保つ調整 */ [data-theme="dark"] { --bg-primary: #0F0F0F; --bg-secondary: #1A1A1A; --bg-card: #222222; --bg-footer: #0A0A0A; --text-primary: #E8E8E8; --text-heading: #FFFFFF; --text-muted: #AAAAAA; --text-accent: #D4B790; /* 暗背景でも視認性のあるゴールド */ --text-on-dark: rgba(255,255,255,0.92); --text-on-dark-muted: rgba(255,255,255,0.65); --border-color: #333333; --border-accent: var(--text-accent); --border-soft: #2A2A2A; --gold-primary: #D4B790; --gold-dark: #BFA178; --gold-pale: #2A241A; } /* テーマ切替時の遷移 */ html, body, .gheader, .work, .news, .dual-tile, .gfooter, .fab, .fab-bar, .theme-toggle, .mobile-menu { transition: background-color 0.35s ease, color 0.35s ease, border-color 0.35s ease; } html { scroll-behavior: smooth; } body { font-family: var(--font-sans); color: var(--text-primary); background: var(--bg-primary); line-height: 2; font-size: 15px; font-weight: 400; letter-spacing: 0.04em; -webkit-font-smoothing: antialiased; } a { color: inherit; text-decoration: none; } ul { list-style: none; } img { max-width: 100%; display: block; } button { font: inherit; cursor: pointer; border: none; background: none; color: inherit; } .wrap { width: 100%; max-width: var(--max-w); margin: 0 auto; padding: 0 var(--pad-x); } /* ========================================================= SECTION COMMON ========================================================= */ section { padding: 128px 0; } /* セクションラベル: Cormorant Garamond + ゴールド + 大きな ls */ .sec-label { font-family: var(--font-en); font-size: 12px; letter-spacing: 0.3em; color: var(--text-accent); margin-bottom: 24px; font-weight: 400; text-transform: uppercase; } /* 英文ディスプレイ見出し */ .sec-title { font-family: var(--font-en); font-size: clamp(36px, 5vw, 48px); font-weight: 400; letter-spacing: 0.04em; line-height: 1.1; color: var(--text-heading); margin-bottom: 12px; } /* 日本語サブ見出し */ .sec-title-jp { font-family: var(--font-serif); font-size: 14px; letter-spacing: 0.3em; color: var(--text-muted); margin-bottom: 80px; font-weight: 400; } /* ゴールド細線 装飾 */ .gold-line { width: 60px; height: 1px; background: var(--gold-primary); display: inline-block; vertical-align: middle; } /* テキストリンク(→ 付き) */ .txt-link { display: inline-block; font-family: var(--font-sans); font-size: 12px; letter-spacing: 0.25em; color: var(--text-accent); border-bottom: 1px solid var(--border-accent); padding-bottom: 6px; transition: opacity 0.2s ease, color 0.2s ease; } .txt-link:hover { opacity: 0.7; } /* 写真プレースホルダー(仕様: グレー矩形のまま維持) */ .ph { background: #C9C9C9; color: #555555; display: flex; align-items: center; justify-content: center; font-family: var(--font-sans); font-size: 13px; letter-spacing: 0.15em; text-align: center; background-image: repeating-linear-gradient( 135deg, rgba(255,255,255,0) 0, rgba(255,255,255,0) 14px, rgba(255,255,255,0.35) 14px, rgba(255,255,255,0.35) 15px ); } /* ダーク時はプレースホルダーを少し落ち着いた色味に */ [data-theme="dark"] .ph { background-color: #4A4A4A; color: rgba(255,255,255,0.7); background-image: repeating-linear-gradient( 135deg, rgba(255,255,255,0) 0, rgba(255,255,255,0) 14px, rgba(255,255,255,0.10) 14px, rgba(255,255,255,0.10) 15px ); } /* ========================================================= HEADER ========================================================= */ .gheader { position: fixed; top: 0; left: 0; width: 100%; height: var(--header-h); z-index: 100; background: transparent; color: var(--white); border-bottom: 1px solid transparent; } .gheader.is-scrolled { background: var(--bg-primary); color: var(--text-primary); border-bottom: 1px solid var(--border-soft); } [data-theme="dark"] .gheader.is-scrolled { background: rgba(15,15,15,0.96); backdrop-filter: blur(8px); } .gheader-inner { height: 100%; width: 100%; padding: 0 var(--pad-x); display: flex; align-items: center; justify-content: space-between; } .logo { order: 2; display: inline-flex; align-items: center; height: 100%; } .logo img { height: 48px; width: auto; display: block; transition: opacity 0.2s ease; } .logo:hover img { opacity: 0.85; } /* 透過ヒーロー上ではロゴをホワイト風に(ロゴ画像がゴールドと前提だが念のため) */ .gheader:not(.is-scrolled) .logo img { filter: brightness(0) invert(1); /* ヒーロー透過時は白抜き */ } .gnav { order: 1; } .gnav ul { display: flex; gap: 40px; } .gnav a { font-family: var(--font-sans); font-size: 12px; letter-spacing: 0.25em; padding: 4px 0; transition: color 0.2s ease, opacity 0.2s ease; position: relative; } .gnav a::after { content: ""; position: absolute; left: 0; right: 0; bottom: -4px; height: 1px; background: var(--gold-primary); transform: scaleX(0); transform-origin: left; transition: transform 0.3s ease; } .gnav a:hover::after { transform: scaleX(1); } /* ハンバーガー(SP) */ .hamb { display: none; width: 32px; height: 32px; position: relative; order: 1; } .hamb span { position: absolute; left: 4px; width: 24px; height: 1px; background: currentColor; transition: transform 0.3s, opacity 0.3s, top 0.3s; } .hamb span:nth-child(1) { top: 11px; } .hamb span:nth-child(2) { top: 17px; } .hamb span:nth-child(3) { top: 23px; } body.menu-open .hamb span:nth-child(1) { top: 17px; transform: rotate(45deg); } body.menu-open .hamb span:nth-child(2) { opacity: 0; } body.menu-open .hamb span:nth-child(3) { top: 17px; transform: rotate(-45deg); } .mobile-menu { display: none; position: fixed; inset: 0; background: var(--bg-primary); color: var(--text-primary); z-index: 99; padding: calc(var(--header-h-sp) + 32px) var(--pad-x-sp) 32px; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; overflow-y: auto; } body.menu-open .mobile-menu { opacity: 1; pointer-events: auto; } .mobile-menu ul li { border-bottom: 1px solid var(--border-soft); } .mobile-menu ul a, .mobile-menu .theme-row { display: flex; align-items: center; justify-content: space-between; padding: 24px 4px; font-family: var(--font-sans); font-size: 14px; letter-spacing: 0.25em; color: var(--text-primary); } .mobile-menu .theme-row { cursor: pointer; width: 100%; text-align: left; } .mobile-menu .theme-row .icon { display: inline-flex; align-items: center; justify-content: center; } .mobile-menu .theme-row .label-state { color: var(--text-muted); font-size: 12px; } /* ========================================================= 01. HERO ========================================================= */ .hero { position: relative; height: 100vh; min-height: 600px; padding: 0; color: var(--white); overflow: hidden; } .hero .ph { position: absolute; inset: 0; width: 100%; height: 100%; background-color: #5C5C5C; color: rgba(255,255,255,0.6); background-image: repeating-linear-gradient( 135deg, rgba(255,255,255,0) 0, rgba(255,255,255,0) 22px, rgba(255,255,255,0.10) 22px, rgba(255,255,255,0.10) 23px ); font-size: 14px; letter-spacing: 0.2em; } /* テキスト可読性のためのダークオーバーレイ */ .hero::after { content: ""; position: absolute; inset: 0; background: linear-gradient( to bottom, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.3) 60%, rgba(0,0,0,0.55) 100% ); pointer-events: none; z-index: 1; } .hero-copy { position: relative; z-index: 2; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; padding: 0 var(--pad-x) 18vh; } .hero-copy h1 { font-family: var(--font-serif); font-size: clamp(32px, 5vw, 56px); font-weight: 300; letter-spacing: 0.08em; line-height: 1.4; margin-bottom: 24px; color: var(--white); } .hero-copy .sub { font-family: var(--font-en); font-size: clamp(13px, 1.1vw, 16px); letter-spacing: 0.35em; color: rgba(255,255,255,0.85); font-weight: 400; } .scroll-guide { position: absolute; z-index: 2; left: var(--pad-x); bottom: 32px; font-family: var(--font-en); font-size: 11px; letter-spacing: 0.4em; color: var(--white); text-align: left; } .scroll-guide .arrow { display: block; width: 1px; height: 56px; background: var(--white); margin: 12px 0 0; position: relative; animation: scroll-down 2.4s ease-in-out infinite; transform-origin: top; } @keyframes scroll-down { 0%, 100% { transform: scaleY(0.4); opacity: 0.4; } 50% { transform: scaleY(1); opacity: 1; } } /* ========================================================= 02. PICKUP ========================================================= */ .pickup { padding: 128px 0 0; background: var(--bg-primary); } .pickup-head { margin-bottom: 80px; padding: 0 var(--pad-x); max-width: var(--max-w); margin-left: auto; margin-right: auto; } .pickup-label-row { display: flex; justify-content: space-between; align-items: baseline; border-bottom: 1px solid var(--border-color); padding-bottom: 24px; } .pickup-label-row .sec-label { margin: 0; } .pickup-label-row .sec-label.jp { font-family: var(--font-serif); color: var(--text-muted); letter-spacing: 0.25em; text-transform: none; } .work { width: 100%; background: var(--bg-secondary); border-top: 1px solid var(--border-soft); border-bottom: 1px solid var(--border-soft); padding: 96px 0; } .work + .work { border-top: none; } .work:nth-child(even) { background: var(--bg-primary); } .work-row { display: grid; grid-template-columns: minmax(280px, 22%) 1fr; gap: 0; align-items: stretch; min-height: 380px; } .work-info { padding: 0 32px 0 var(--pad-x); display: flex; flex-direction: column; justify-content: flex-end; } .work-year { font-family: var(--font-en); font-size: 14px; letter-spacing: 0.2em; color: var(--text-accent); margin-bottom: 12px; font-weight: 400; } .work-name { font-family: var(--font-serif); font-size: clamp(20px, 1.8vw, 24px); font-weight: 400; letter-spacing: 0.08em; line-height: 1.6; color: var(--text-heading); margin-bottom: 8px; } .work-loc { font-family: var(--font-sans); font-size: 11px; letter-spacing: 0.25em; color: var(--text-muted); margin-bottom: 32px; } .work-controls { display: flex; align-items: center; gap: 14px; } .work-controls button { width: 44px; height: 44px; border: 1px solid var(--gold-primary); border-radius: 999px; font-family: var(--font-en); font-size: 14px; color: var(--gold-dark); background: transparent; transition: background 0.3s ease, color 0.3s ease, border-color 0.3s ease; } .work-controls button:hover { background: var(--gold-primary); color: var(--white); } [data-theme="dark"] .work-controls button { color: var(--gold-primary); } [data-theme="dark"] .work-controls button:hover { color: var(--black); } .work-counter-text { font-family: var(--font-en); font-size: 12px; letter-spacing: 0.2em; color: var(--text-muted); margin-left: 8px; } .work-carousel { overflow: hidden; position: relative; } .work-track { display: flex; gap: 16px; transition: transform 0.5s ease; height: 100%; } .work-slide { flex: 0 0 auto; width: 480px; height: 380px; } .work-slide .ph { width: 100%; height: 100%; } .work-slide.is-tall { width: 320px; } .work-slide.is-wide { width: 560px; } .pickup-more { text-align: center; padding: 96px var(--pad-x); background: var(--bg-primary); } /* ========================================================= 03. ABOUT ========================================================= */ .about { position: relative; padding: 0; height: 100vh; min-height: 600px; color: var(--white); overflow: hidden; } .about .ph { position: absolute; inset: 0; background-color: #6E6E6E; color: rgba(255,255,255,0.65); background-image: repeating-linear-gradient( 135deg, rgba(255,255,255,0) 0, rgba(255,255,255,0) 22px, rgba(255,255,255,0.10) 22px, rgba(255,255,255,0.10) 23px ); } .about::after { content: ""; position: absolute; inset: 0; background: linear-gradient(to right, rgba(0,0,0,0.5), rgba(0,0,0,0.35)); pointer-events: none; z-index: 1; } .about-inner { position: relative; z-index: 2; height: 100%; display: flex; flex-direction: column; justify-content: center; padding: 0 var(--pad-x); max-width: var(--max-w); margin: 0 auto; } .about-inner .sec-label { color: var(--gold-light); } .about-inner h2 { font-family: var(--font-serif); font-size: clamp(24px, 3.2vw, 40px); font-weight: 300; letter-spacing: 0.12em; line-height: 1.8; margin-bottom: 32px; max-width: 900px; color: var(--white); } .about-body { font-family: var(--font-sans); font-size: clamp(14px, 1vw, 15px); line-height: 2.2; letter-spacing: 0.05em; max-width: 720px; margin-bottom: 40px; color: rgba(255,255,255,0.92); font-weight: 300; } .about-inner .txt-link { color: var(--white); border-bottom-color: rgba(255,255,255,0.7); } .about-inner .txt-link:hover { opacity: 0.8; } /* ========================================================= 04. NEWS ========================================================= */ .news { padding: 128px 0; background: var(--bg-primary); } .news-list { border-top: 1px solid var(--border-soft); margin-bottom: 48px; } .news-item { display: grid; grid-template-columns: 160px 140px 1fr; gap: 32px; align-items: center; padding: 32px 8px; border-bottom: 1px solid var(--border-soft); transition: opacity 0.2s ease, background-color 0.2s ease; } .news-item:hover { opacity: 0.7; } .news-item .date { font-family: var(--font-en); font-size: 14px; color: var(--text-accent); letter-spacing: 0.15em; } .news-item .cat { display: inline-block; font-family: var(--font-sans); font-size: 10px; letter-spacing: 0.25em; border: 1px solid var(--border-color); padding: 5px 12px; text-align: center; color: var(--text-muted); width: fit-content; } .news-item .title { font-family: var(--font-sans); font-size: 15px; letter-spacing: 0.05em; color: var(--text-heading); font-weight: 400; } .news-foot { text-align: right; } /* ========================================================= 05. DUAL CTA ========================================================= */ .dual-cta { display: grid; grid-template-columns: 1fr 1fr; gap: 0; padding: 0; } .dual-tile { position: relative; display: flex; align-items: center; justify-content: center; text-align: center; aspect-ratio: 16 / 9; overflow: hidden; color: var(--white); transition: opacity 0.3s ease; } .dual-tile .ph { position: absolute; inset: 0; background-color: #5E5E5E; color: rgba(255,255,255,0.6); background-image: repeating-linear-gradient( 135deg, rgba(255,255,255,0) 0, rgba(255,255,255,0) 22px, rgba(255,255,255,0.10) 22px, rgba(255,255,255,0.10) 23px ); } .dual-tile:nth-child(2) .ph { background-color: #4A4A4A; } .dual-tile::after { content: ""; position: absolute; inset: 0; background: rgba(0,0,0,0.42); transition: background-color 0.3s ease; pointer-events: none; } .dual-tile:hover::after { background: rgba(0,0,0,0.55); } .dual-tile-inner { position: relative; z-index: 2; padding: 32px; max-width: 480px; } .dual-tile h3 { font-family: var(--font-serif); font-size: clamp(22px, 2.4vw, 30px); font-weight: 400; letter-spacing: 0.18em; margin-bottom: 24px; color: var(--white); } .dual-tile p { font-family: var(--font-sans); font-size: 13px; line-height: 2; margin-bottom: 32px; color: rgba(255,255,255,0.92); font-weight: 300; } /* ホワイト枠線ボタン風 link */ .dual-tile .tile-link { display: inline-flex; align-items: center; gap: 16px; font-family: var(--font-sans); font-size: 12px; letter-spacing: 0.25em; padding: 14px 28px; border: 1px solid rgba(255,255,255,0.85); transition: background 0.3s ease, color 0.3s ease; } .dual-tile:hover .tile-link { background: var(--white); color: var(--black); } .dual-tile .tile-link .arrow-circle { width: 22px; height: 22px; border: 1px solid currentColor; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 11px; transition: background 0.3s ease, color 0.3s ease; } /* ========================================================= FOOTER ========================================================= */ .gfooter { background: var(--bg-footer); color: rgba(255,255,255,0.85); padding: 96px 0 40px; text-align: center; } .gfooter .logo { display: inline-flex; margin: 0 auto 56px; height: 32px; } .gfooter .logo img { height: 32px; width: auto; /* ロゴはゴールド前提だが、フッターで明るめに見せたい場合のフィルタ調整は不要 */ } .footer-nav ul { display: flex; justify-content: center; gap: 40px; flex-wrap: wrap; margin-bottom: 56px; } .footer-nav a { font-family: var(--font-sans); font-size: 11px; letter-spacing: 0.3em; color: rgba(255,255,255,0.85); transition: color 0.2s ease; } .footer-nav a:hover { color: var(--gold-light); } .footer-related { font-family: var(--font-sans); font-size: 11px; letter-spacing: 0.2em; color: rgba(255,255,255,0.7); margin-bottom: 56px; } .footer-related .lbl { display: block; font-family: var(--font-en); margin-bottom: 16px; color: var(--gold-primary); letter-spacing: 0.3em; font-size: 11px; } .footer-related a { border-bottom: 1px solid rgba(255,255,255,0.4); padding-bottom: 2px; margin: 0 12px; transition: opacity 0.2s ease; } .footer-related a:hover { opacity: 0.7; } .copyright { font-family: var(--font-en); font-size: 11px; letter-spacing: 0.3em; color: rgba(255,255,255,0.5); border-top: 1px solid rgba(255,255,255,0.12); padding-top: 32px; } /* ========================================================= 固定CTA + テーマトグル ========================================================= */ .fab { position: fixed; right: 32px; bottom: 32px; z-index: 90; background: var(--gold-primary); color: var(--white); font-family: var(--font-sans); font-size: 11px; letter-spacing: 0.3em; padding: 18px 30px; box-shadow: 0 8px 24px rgba(155,127,90,0.28); transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease; border: 1px solid var(--gold-primary); } .fab:hover { background: var(--gold-dark); border-color: var(--gold-dark); } [data-theme="dark"] .fab { color: var(--black); } [data-theme="dark"] .fab:hover { background: var(--gold-light); border-color: var(--gold-light); } .fab-bar { display: none; position: fixed; left: 0; right: 0; bottom: 0; background: var(--gold-primary); color: var(--white); text-align: center; padding: 18px; font-family: var(--font-sans); font-size: 13px; letter-spacing: 0.25em; z-index: 90; } [data-theme="dark"] .fab-bar { color: var(--black); } /* テーマトグル: PC では右下 CONTACT ボタンの上に配置 */ .theme-toggle { position: fixed; right: 32px; bottom: 96px; /* fab の上 */ z-index: 91; width: 48px; height: 48px; border-radius: 50%; background: var(--bg-card); color: var(--text-primary); border: 1px solid var(--border-color); display: inline-flex; align-items: center; justify-content: center; box-shadow: 0 4px 14px rgba(0,0,0,0.10); transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, transform 0.2s ease; } .theme-toggle:hover { transform: translateY(-2px); border-color: var(--gold-primary); color: var(--gold-primary); } .theme-toggle svg { width: 20px; height: 20px; } /* アイコン切替 */ .theme-toggle .icon-moon { display: none; } [data-theme="dark"] .theme-toggle .icon-sun { display: none; } [data-theme="dark"] .theme-toggle .icon-moon { display: inline; } /* ========================================================= FADE IN ========================================================= */ .fade-in { opacity: 0; transform: translateY(20px); transition: opacity 0.8s ease, transform 0.8s ease; } .fade-in.is-visible { opacity: 1; transform: translateY(0); } /* ========================================================= RESPONSIVE ========================================================= */ @media (max-width: 1280px) { :root { --pad-x: 48px; } section { padding: 96px 0; } } @media (max-width: 1024px) { :root { --pad-x: 40px; } section { padding: 80px 0; } .work { padding: 80px 0; } } @media (max-width: 768px) { :root { --pad-x: var(--pad-x-sp); } body { font-size: 14px; padding-bottom: 56px; } section, .pickup, .news { padding: 80px 0; } .gheader { height: var(--header-h-sp); } .gheader-inner { padding: 0 var(--pad-x-sp); } .gnav { display: none; } .hamb { display: block; } .mobile-menu { display: block; } .logo img { height: 32px; } .sec-title { font-size: 32px; } .sec-title-jp { margin-bottom: 48px; font-size: 13px; } .hero { min-height: 520px; } .hero-copy { padding: 0 var(--pad-x-sp) 14vh; } .hero-copy h1 { font-size: 24px; line-height: 1.7; letter-spacing: 0.08em; } .hero-copy .sub { font-size: 11px; letter-spacing: 0.3em; } .scroll-guide { left: var(--pad-x-sp); } .scroll-guide .arrow { height: 36px; } .pickup { padding: 80px 0 0; } .pickup-head { margin-bottom: 32px; } .work { padding: 56px 0; } .work-row { grid-template-columns: 1fr; gap: 24px; min-height: auto; } .work-info { padding: 0 var(--pad-x-sp); } .work-name { font-size: 20px; } .work-loc { margin-bottom: 16px; } .work-controls button { width: 40px; height: 40px; } .work-carousel { padding-left: var(--pad-x-sp); overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .work-carousel::-webkit-scrollbar { display: none; } .work-track { transform: none !important; gap: 8px; height: auto; } .work-slide, .work-slide.is-tall, .work-slide.is-wide { width: 75vw; max-width: 360px; height: 240px; } .pickup-more { padding: 56px var(--pad-x-sp); } .about { height: 80vh; min-height: 460px; } .about-inner { justify-content: center; padding: 0 var(--pad-x-sp); } .about-inner h2 { font-size: 20px; line-height: 2; letter-spacing: 0.1em; } .news-item { grid-template-columns: 1fr; gap: 8px; padding: 24px 4px; } .news-item .date { font-size: 13px; } .news-item .cat { font-size: 9px; padding: 3px 8px; } .dual-cta { grid-template-columns: 1fr; } .dual-tile { aspect-ratio: 4 / 3; } .dual-tile h3 { font-size: 20px; letter-spacing: 0.15em; margin-bottom: 16px; } .dual-tile p { font-size: 12px; margin-bottom: 24px; } .dual-tile-inner { padding: 24px; } .gfooter { padding: 64px 0 32px; } .footer-nav ul { gap: 20px 28px; } .fab { display: none; } .fab-bar { display: block; } .theme-toggle { display: none; } /* SP ではハンバーガー内に配置 */ } @media (max-width: 414px) { .hero-copy h1 { font-size: 21px; } } /* prefers-reduced-motion: アニメーションを抑制 */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } .fade-in { opacity: 1; transform: none; } }
写真: ヒーロー画像(建築物・全画面)

未来へ受け継がれる景色をつくる。

HOSHIYA Architecture & Design

SCROLL

Portfolio

代表的プロジェクト

2024

Amber Echoland

白馬 / HAKUBA

images 1 / 16

2023

Amber MIZUHO

白馬 / HAKUBA

images 1 / 12

2023

星屋旅館 晴博

京都 / KYOTO

images 1 / 14

2022

星屋旅館 東山望月居

京都 / KYOTO

images 1 / 10
写真: 建築物の俯瞰(全幅・背景)

02 — ABOUT

私たちは、
三方よしの精神で
建築をつくる。

白馬の山岳に佇む Amber Echoland、京都・嵐山に息づく星屋旅館 晴博、東山に月を望む望月居。
それぞれの土地に固有の物語があり、私たちはその物語を建築のかたちに翻訳する。 設計から施工管理まで一貫して手がけることで、図面だけでは伝わらない細部まで、思想を貫く。
三方よしの精神は、星屋の建築の出発点です。

会社案内を見る

資料請求

星屋の建築哲学と、これまで手がけてきた竣工事例を一冊にまとめたパンフレットをお送りします。 ご検討中のプロジェクトに、ぜひお役立てください。

資料請求する

会社概要

三方よしの精神で建築をつくる、株式会社星屋について。 私たちの考えと、これまでの歩みをご紹介します。

会社概要を見る
CONTACT お問い合わせ (function() { /* ヘッダー: スクロールで透過→白背景 */ var header = document.getElementById('gheader'); var hero = document.getElementById('hero'); function onScroll() { var threshold = (hero ? hero.offsetHeight - 80 : 80); if (window.scrollY > threshold) header.classList.add('is-scrolled'); else header.classList.remove('is-scrolled'); } window.addEventListener('scroll', onScroll, { passive: true }); onScroll(); /* SP: ハンバーガー */ var hamb = document.getElementById('hamb'); hamb.addEventListener('click', function() { document.body.classList.toggle('menu-open'); var open = document.body.classList.contains('menu-open'); hamb.setAttribute('aria-expanded', open ? 'true' : 'false'); }); document.querySelectorAll('#mobileMenu [data-close]').forEach(function(a) { a.addEventListener('click', function() { document.body.classList.remove('menu-open'); hamb.setAttribute('aria-expanded', 'false'); }); }); /* PICKUP: 各 work のカルーセル制御(左右ボタンで横スクロール) */ document.querySelectorAll('.work').forEach(function(work) { var carousel = work.querySelector('[data-carousel]'); var track = work.querySelector('.work-track'); var prev = work.querySelector('[data-dir="-1"]'); var next = work.querySelector('[data-dir="1"]'); var counter = work.querySelector('.work-counter-text'); var slides = work.querySelectorAll('.work-slide'); if (!track || !slides.length) return; var idx = 0; var total = slides.length; function isMobile() { return window.matchMedia('(max-width: 768px)').matches; } function update() { if (isMobile()) { track.style.transform = ''; return; } // 該当スライドの left オフセット分シフト var offset = slides[idx].offsetLeft; track.style.transform = 'translateX(' + (-offset) + 'px)'; if (counter) { var totalText = counter.textContent.split('/')[1] || ' ' + total; counter.textContent = 'images ' + (idx + 1) + ' /' + totalText; } } function move(dir) { idx = (idx + dir + total) % total; update(); } if (prev) prev.addEventListener('click', function() { move(-1); }); if (next) next.addEventListener('click', function() { move(1); }); window.addEventListener('resize', update); update(); }); /* フェードイン */ var io = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting) { entry.target.classList.add('is-visible'); io.unobserve(entry.target); } }); }, { threshold: 0.12 }); document.querySelectorAll('.fade-in').forEach(function(el) { io.observe(el); }); /* ========================================================= THEME TOGGLE (light / dark) ─ OS設定に追従、localStorage に保存 ========================================================= */ function getCurrentTheme() { return document.documentElement.getAttribute('data-theme') || 'light'; } function applyTheme(t) { document.documentElement.setAttribute('data-theme', t); try { localStorage.setItem('hoshiya-theme', t); } catch(e) {} var label = document.getElementById('themeLabel'); if (label) label.textContent = (t === 'dark' ? 'ダーク' : 'ライト'); } function toggleTheme() { applyTheme(getCurrentTheme() === 'dark' ? 'light' : 'dark'); } /* 初期ラベル */ (function(){ var label = document.getElementById('themeLabel'); if (label) label.textContent = (getCurrentTheme() === 'dark' ? 'ダーク' : 'ライト'); })(); var btnPc = document.getElementById('themeToggle'); var btnSp = document.getElementById('themeToggleSp'); if (btnPc) btnPc.addEventListener('click', toggleTheme); if (btnSp) btnSp.addEventListener('click', toggleTheme); /* OS のテーマ設定が変わった場合(ユーザーが localStorage で固定していなければ追従) */ if (window.matchMedia) { var mql = window.matchMedia('(prefers-color-scheme: dark)'); var onChange = function(e) { var saved = null; try { saved = localStorage.getItem('hoshiya-theme'); } catch(_) {} if (!saved) applyTheme(e.matches ? 'dark' : 'light'); }; if (mql.addEventListener) mql.addEventListener('change', onChange); else if (mql.addListener) mql.addListener(onChange); } })();
Scroll to Top