/** * yumezemi-card ブロックのフロントエンド表示用スタイル */ :root { --yumezemi-primary: #78909c; --yumezemi-primary-dark: #607d8b; --yumezemi-secondary: #b0bec5; --yumezemi-text-primary: #37474f; --yumezemi-text-secondary: #546e7a; --yumezemi-text-muted: #78909c; --yumezemi-bg-card: #ffffff; --yumezemi-bg-light: #eceff1; --yumezemi-border: #cfd8dc; --yumezemi-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --yumezemi-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.04); --yumezemi-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -2px rgba(0, 0, 0, 0.04); --yumezemi-radius-sm: 0.375rem; --yumezemi-radius: 0.5rem; --yumezemi-radius-lg: 0.75rem; --yumezemi-transition: all 0.3s ease; } .yumezemi-card-wrapper { margin-bottom: 0 !important; width: 100% !important; display: block !important; } .sub-card-small.yumezemi-card { background: var(--yumezemi-bg-card, #ffffff); border-radius: var(--yumezemi-radius-lg, 0.75rem); box-shadow: var(--yumezemi-shadow, 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)); overflow: hidden; transition: transform 0.3s ease, box-shadow 0.3s ease; display: flex; flex-direction: column; height: 100%; width: 100%; cursor: pointer; border: none; position: relative; &:hover { transform: translateY(-0.25rem); box-shadow: var(--yumezemi-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)); .yumezemi-image-container img { transform: scale(1.05); } .yumezemi-more { background-color: var(--yumezemi-primary-dark, #4a5568); } } } /* 単一画像スタイル */ .yumezemi-image-container { position: relative; width: 100%; height: 200px; overflow: hidden; } .yumezemi-image { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; } /* プレースホルダー画像 */ .yumezemi-img-placeholder { width: 100%; height: 200px; background-color: var(--yumezemi-primary); display: flex; align-items: center; justify-content: center; color: white; font-size: 18px; background-image: linear-gradient(135deg, rgba(255,255,255,0.1) 25%, transparent 25%), linear-gradient(225deg, rgba(255,255,255,0.1) 25%, transparent 25%), linear-gradient(45deg, rgba(255,255,255,0.1) 25%, transparent 25%), linear-gradient(315deg, rgba(255,255,255,0.1) 25%, transparent 25%); background-position: 10px, 10px, 0, 0; background-size: 20px 20px; position: relative; &::after { content: "夢ゼミ"; font-size: 32px; font-weight: bold; opacity: 0.3; } } .yumezemi-content { padding: 1.5rem; padding-top: 2rem; display: flex; flex-direction: column; flex-grow: 1; position: relative; } .yumezemi-meta { position: absolute; top: -1.5rem; left: 1.5rem; z-index: 2; display: inline-flex; align-items: center; border-radius: 99px; padding: 0.5rem 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); max-width: calc(100% - 3rem); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .yumezemi-date { font-size: 0.875rem; font-weight: 700; color: #fff; &.date-placeholder { font-style: italic; opacity: 0.8; } } .yumezemi-theme { font-size: 1.25rem; font-weight: 700; color: var(--yumezemi-text-primary); margin-bottom: 1rem; line-height: 1.4; margin-top: 0.75rem; } .yumezemi-more { display: inline-flex; align-items: center; justify-content: center; font-size: 0.875rem; font-weight: 600; color: #fff; padding: 0.625rem 1.25rem; border-radius: 99px; transition: var(--yumezemi-transition); margin-top: 1rem; &::after { content: ''; width: 1rem; height: 1rem; margin-left: 0.5rem; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='white'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M14 5l7 7m0 0l-7 7m7-7H3'/%3E%3C/svg%3E"); background-size: contain; background-repeat: no-repeat; transition: transform 0.2s ease; } &:hover::after { transform: translateX(0.25rem); } } /* モーダル詳細表示 */ .yumezemi-details-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.4); z-index: 1000; justify-content: center; align-items: center; padding: 1.5rem; overflow-y: auto; opacity: 0; transition: opacity 0.3s ease; &.visible { opacity: 1; } } .yumezemi-details-content { background: var(--yumezemi-bg-card); border-radius: var(--yumezemi-radius-lg); max-width: 700px; width: 100%; max-height: 85vh; overflow-y: auto; position: relative; box-shadow: var(--yumezemi-shadow-lg); transform: translateY(20px); opacity: 0; transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1); &.visible { transform: translateY(0); opacity: 1; } } .yumezemi-close-button { position: absolute; top: 1rem; right: 1rem; width: 2.5rem; height: 2.5rem; border-radius: 50%; background: rgba(0, 0, 0, 0.5); color: #fff; font-size: 1.5rem; display: flex; align-items: center; justify-content: center; border: none; cursor: pointer; z-index: 10; transition: var(--yumezemi-transition); &:hover { background: rgba(0, 0, 0, 0.7); transform: scale(1.1); } } /* 詳細画像スタイル */ .yumezemi-detail-image { position: relative; width: 100%; height: 250px; overflow: hidden; img { width: 100%; height: 100%; object-fit: cover; display: block; } } /* 詳細表示プレースホルダー */ .yumezemi-detail-img-placeholder { width: 100%; height: 250px; background-color: var(--yumezemi-primary); display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; background-image: linear-gradient(135deg, rgba(255,255,255,0.1) 25%, transparent 25%), linear-gradient(225deg, rgba(255,255,255,0.1) 25%, transparent 25%), linear-gradient(45deg, rgba(255,255,255,0.1) 25%, transparent 25%), linear-gradient(315deg, rgba(255,255,255,0.1) 25%, transparent 25%); background-position: 10px, 10px, 0, 0; background-size: 20px 20px; position: relative; &::after { content: "夢ゼミ"; font-size: 48px; font-weight: bold; opacity: 0.3; } } .yumezemi-detail-header { position: relative; .yumezemi-detail-overlay { position: absolute; bottom: 0; left: 0; width: 100%; background: linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0) 100%); padding: 3rem 1.5rem 1.5rem; h2 { color: #fff; font-size: 1.75rem; font-weight: 700; margin: 0; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); } } } .yumezemi-detail-body { padding: 1.5rem; padding-top: 2.5rem; position: relative; } .yumezemi-date-detail { position: absolute; top: -1rem; left: 1.5rem; display: inline-flex; align-items: center; font-size: 0.875rem; font-weight: 700; color: #fff; padding: 0.5rem 1rem; border-radius: 99px; margin-bottom: 1.5rem; &.date-placeholder { font-style: italic; opacity: 0.8; } } .yumezemi-lecturer-info { background: var(--yumezemi-bg-light); border-radius: var(--yumezemi-radius); padding: 1.25rem; margin-bottom: 1.5rem; margin-top: 1rem; } .yumezemi-lecturer-title { font-size: 1rem; font-weight: 600; color: var(--yumezemi-text-primary); margin: 0 0 0.5rem 0; } .yumezemi-occupation-detail { font-size: 0.875rem; color: var(--yumezemi-text-secondary); margin: 0; } .yumezemi-guest-detail { font-size: 0.875rem; font-weight: 500; color: var(--yumezemi-text-secondary); background: var(--yumezemi-bg-light); padding: 0.75rem 1rem; border-radius: var(--yumezemi-radius); margin-bottom: 1.5rem; } .yumezemi-detail-text { font-size: 1rem; line-height: 1.7; color: var(--yumezemi-text-secondary); white-space: pre-wrap; } /* レスポンシブ対応 */ @media (max-width: 767px) { .yumezemi-details-content { max-width: 95%; } .yumezemi-detail-image { height: 180px; } .yumezemi-detail-img-placeholder { height: 180px; } .yumezemi-detail-header .yumezemi-detail-overlay h2 { font-size: 1.5rem; } .yumezemi-detail-body { padding: 1.25rem; padding-top: 2.25rem; } } /* yumezemi-cardsのグリッド表示用 */ .yumezemi-cards-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; margin: 2rem auto; max-width: 1200px; padding: 0 1rem; @media (max-width: 767px) { grid-template-columns: 1fr; gap: 1.5rem; } /* 子要素の配置 */ .yumezemi-card-wrapper { width: 100%; margin-bottom: 0; display: block; } }