JS-portal / style.css
tomo2chin2's picture
Update style.css
7e652a7 verified
/* style.css - キラキラ☆ドリームポータル */
/* モダンフォントをインポート */
@import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;600;700&family=M+PLUS+Rounded+1c:wght@300;400;500;700&display=swap');
/* かわいいアイコンフォント */
@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css');
:root {
/* カラーパレット - より洗練されたパステルトーン */
--primary: #ff85a2; /* メインカラー - ピンク */
--primary-light: #ffc2d1; /* ライトピンク */
--secondary: #a2d7ff; /* セカンダリ - スカイブルー */
--secondary-light: #d1f0ff; /* ライトブルー */
--accent: #ffde59; /* アクセント - 黄色 */
--accent-light: #fff6d1; /* ライト黄色 */
--success: #a5dda5; /* 成功 - ライムグリーン */
--error: #ff8989; /* エラー - ライトレッド */
--neutral: #f9f9f9; /* 背景用ニュートラル */
--white: #ffffff; /* 白 */
--text: #575757; /* テキスト色 */
--shadow: rgba(0, 0, 0, 0.1); /* 影の色 */
}
/* ベーススタイル */
body {
font-family: 'M PLUS Rounded 1c', 'Quicksand', sans-serif;
color: var(--text);
background: linear-gradient(135deg, #ffeffd 0%, #d1f9ff 100%);
margin: 0;
padding: 0;
min-height: 100vh;
font-size: 16px;
line-height: 1.6;
background-attachment: fixed;
}
/* キラキラエフェクト用の背景オーバーレイ */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='80' viewBox='0 0 80 80'%3E%3Cpath fill='%23ffffff' fill-opacity='0.2' d='M14 16H9v-2h5V9.87a4 4 0 1 1 2 0V14h5v2h-5v15.95A10 10 0 0 0 23.66 27l-3.46-2 8.2-2.2-2.9 5a12 12 0 0 1-21 0l-2.89-5 8.2 2.2-3.47 2A10 10 0 0 0 14 31.95V16zm40 40h-5v-2h5v-4.13a4 4 0 1 1 2 0V54h5v2h-5v15.95A10 10 0 0 0 63.66 67l-3.47-2 8.2-2.2-2.88 5a12 12 0 0 1-21.02 0l-2.88-5 8.2 2.2-3.47 2A10 10 0 0 0 54 71.95V56zm-39 6a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm40-40a2 2 0 1 1 0-4 2 2 0 0 1 0 4zM15 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm40 40a2 2 0 1 0 0-4 2 2 0 0 0 0 4z'%3E%3C/path%3E%3C/svg%3E");
z-index: -1;
}
/* アニメーション定義 */
@keyframes float {
0% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
100% { transform: translateY(0px); }
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
@keyframes sparkle {
0% { opacity: 0; }
50% { opacity: 1; }
100% { opacity: 0; }
}
/* メインコンテナ */
.gradio-container {
max-width: 1000px;
margin: 2rem auto;
padding: 1.5rem;
border-radius: 24px;
background-color: var(--white);
box-shadow: 0 10px 30px var(--shadow);
position: relative;
overflow: hidden;
border: none;
}
/* キラキラデコレーション(コンテナの枠) */
.gradio-container::before {
content: '';
position: absolute;
top: -2px;
left: -2px;
right: -2px;
bottom: -2px;
z-index: -1;
background: linear-gradient(45deg, var(--primary), var(--secondary), var(--accent), var(--primary));
background-size: 400% 400%;
border-radius: 26px;
animation: gradientBG 15s ease infinite;
}
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* タイトル */
h1 {
font-family: 'Quicksand', 'M PLUS Rounded 1c', sans-serif;
color: var(--primary);
text-align: center;
font-size: 2.5rem;
margin: 0.5rem 0 1.5rem;
font-weight: 700;
letter-spacing: 0.5px;
position: relative;
display: inline-block;
left: 50%;
transform: translateX(-50%);
}
/* キラキラ付きタイトル */
h1::after {
content: '✨';
position: absolute;
right: -2rem;
top: 0.2rem;
animation: sparkle 2s infinite;
}
h1::before {
content: '✨';
position: absolute;
left: -2rem;
top: 0.2rem;
animation: sparkle 2s infinite 1s;
}
/* サブタイトル */
h2 {
font-family: 'Quicksand', 'M PLUS Rounded 1c', sans-serif;
color: var(--secondary);
font-size: 1.8rem;
margin: 1rem 0;
font-weight: 600;
position: relative;
display: inline-block;
padding-bottom: 0.5rem;
}
h2::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 4px;
background: linear-gradient(to right, var(--primary-light), var(--secondary-light));
border-radius: 10px;
}
/* タブコンテナ */
.gradio-tabs {
border-radius: 16px;
overflow: hidden;
box-shadow: 0 4px 15px var(--shadow);
background-color: var(--neutral);
margin: 1.5rem 0;
}
/* タブナビゲーション */
.gradio-tabs .gradio-tabs-nav {
display: flex;
background: linear-gradient(90deg, var(--primary-light), var(--secondary-light));
padding: 0.5rem 0.5rem 0;
border-radius: 16px 16px 0 0;
}
/* タブボタン */
.gradio-tabs .gradio-tabs-nav button {
background: var(--neutral) !important;
color: var(--text) !important;
border: none !important;
border-radius: 12px 12px 0 0 !important;
padding: 1rem 1.5rem !important;
font-family: 'M PLUS Rounded 1c', sans-serif;
font-size: 1.1rem !important;
font-weight: 500;
margin-right: 0.3rem;
transition: all 0.3s ease;
opacity: 0.7;
display: flex;
align-items: center;
justify-content: center;
}
.gradio-tabs .gradio-tabs-nav button:hover {
opacity: 0.9;
transform: translateY(-2px);
}
.gradio-tabs .gradio-tabs-nav button.selected {
background: var(--white) !important;
color: var(--primary) !important;
font-weight: 700;
opacity: 1;
box-shadow: 0 -4px 10px rgba(0,0,0,0.05);
}
.gradio-tabs .gradio-tabs-nav button i {
margin-right: 0.5rem;
font-size: 1.2rem;
}
/* タブコンテンツ */
.gradio-tabs .gradio-tab-item {
padding: 1.5rem;
background-color: var(--white);
border-radius: 0 0 16px 16px;
}
/* ボタンスタイル */
button, .button-primary {
background: linear-gradient(45deg, var(--primary), #ff9cbe) !important;
color: var(--white) !important;
border: none !important;
border-radius: 50px !important;
padding: 0.8rem 2rem !important;
font-family: 'M PLUS Rounded 1c', sans-serif !important;
font-size: 1.1rem !important;
font-weight: 500 !important;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 15px rgba(255, 133, 162, 0.3);
display: flex;
align-items: center;
justify-content: center;
text-align: center;
margin: 1rem 0;
}
button:hover, .button-primary:hover {
transform: translateY(-3px);
box-shadow: 0 7px 20px rgba(255, 133, 162, 0.4);
background: linear-gradient(45deg, #ff6a93, var(--primary)) !important;
}
button:active, .button-primary:active {
transform: translateY(1px);
box-shadow: 0 2px 10px rgba(255, 133, 162, 0.3);
}
button i, .button-primary i {
margin-right: 0.5rem;
font-size: 1.2rem;
}
/* セカンダリボタン */
.button-secondary {
background: linear-gradient(45deg, var(--secondary), #c4e7ff) !important;
box-shadow: 0 4px 15px rgba(162, 215, 255, 0.3);
}
.button-secondary:hover {
box-shadow: 0 7px 20px rgba(162, 215, 255, 0.4);
background: linear-gradient(45deg, #7bc6ff, var(--secondary)) !important;
}
/* アクセントボタン */
.button-accent {
background: linear-gradient(45deg, var(--accent), #fff0a8) !important;
box-shadow: 0 4px 15px rgba(255, 222, 89, 0.3);
color: var(--text) !important;
}
.button-accent:hover {
box-shadow: 0 7px 20px rgba(255, 222, 89, 0.4);
background: linear-gradient(45deg, #ffd42a, var(--accent)) !important;
}
/* テキスト入力フィールド */
.gr-textbox, .gr-textarea {
border-radius: 16px !important;
border: 2px solid var(--primary-light) !important;
padding: 0.8rem 1.2rem !important;
font-family: 'M PLUS Rounded 1c', sans-serif !important;
font-size: 1rem !important;
color: var(--text) !important;
background-color: var(--white) !important;
transition: all 0.3s ease;
box-shadow: 0 4px 10px rgba(0,0,0,0.03);
}
.gr-textbox:focus, .gr-textarea:focus {
border-color: var(--primary) !important;
box-shadow: 0 4px 15px rgba(255, 133, 162, 0.15);
}
/* ラジオボタン&チェックボックスコンテナ */
.gr-radio-row, .gr-checkbox-row {
margin: 0.5rem 0;
}
/* ラジオボタン&チェックボックスラベル */
label.gr-radio-label, label.gr-checkbox-label {
background-color: var(--neutral);
padding: 0.8rem 1rem;
margin: 0.5rem 0;
border-radius: 12px;
cursor: pointer;
display: flex;
align-items: center;
transition: all 0.3s ease;
border: 2px solid transparent;
font-size: 1rem;
}
label.gr-radio-label:hover, label.gr-checkbox-label:hover {
background-color: var(--accent-light);
transform: translateY(-2px);
box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}
/* 選択状態 */
label.gr-radio-label.selected, label.gr-checkbox-label.selected {
background-color: var(--accent-light);
border-color: var(--accent);
font-weight: 500;
}
/* ラジオボタン/チェックボックス入力要素 */
.gr-radio-input, .gr-checkbox-input {
position: absolute;
opacity: 0;
width: 0;
height: 0;
}
/* カスタムラジオボタン */
label.gr-radio-label span::before {
content: '';
display: inline-block;
width: 1.5rem;
height: 1.5rem;
margin-right: 0.8rem;
border: 2px solid var(--primary);
border-radius: 50%;
background-color: var(--white);
transition: all 0.2s ease;
box-sizing: border-box;
}
/* 選択されたラジオボタン */
label.gr-radio-label input:checked + span::before {
border-color: var(--primary);
background-color: var(--primary);
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='4' fill='white'/%3E%3C/svg%3E");
background-size: 100% 100%;
background-repeat: no-repeat;
background-position: center;
}
/* カスタムチェックボックス */
label.gr-checkbox-label span::before {
content: '';
display: inline-block;
width: 1.5rem;
height: 1.5rem;
margin-right: 0.8rem;
border: 2px solid var(--secondary);
border-radius: 8px;
background-color: var(--white);
transition: all 0.2s ease;
box-sizing: border-box;
}
/* 選択されたチェックボックス */
label.gr-checkbox-label input:checked + span::before {
border-color: var(--secondary);
background-color: var(--secondary);
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3E%3C/svg%3E");
background-size: 100% 100%;
background-position: center;
}
/* キャラクター画像 */
#character_image {
margin: 0 auto;
text-align: center;
position: relative;
max-width: 200px;
}
#character_image img {
max-width: 100%;
height: auto;
border-radius: 50%;
border: 3px solid var(--primary-light);
box-shadow: 0 10px 25px rgba(255, 133, 162, 0.2);
animation: float 6s ease-in-out infinite;
}
/* 吹き出し付きキャラクター */
#character_image::after {
content: '';
position: absolute;
width: 30px;
height: 30px;
background-color: var(--primary-light);
bottom: 40px;
right: 0;
transform: rotate(45deg);
z-index: -1;
}
/* チャットボット */
.gr-chatbot {
border: none !important;
border-radius: 16px !important;
background-color: var(--neutral) !important;
margin-bottom: 1.5rem;
height: 300px;
overflow-y: auto;
padding: 1rem !important;
box-shadow: inset 0 2px 10px rgba(0,0,0,0.05);
}
/* チャットメッセージ基本スタイル */
.gr-chatbot .message {
max-width: 80% !important;
padding: 1rem !important;
margin-bottom: 1rem !important;
border-radius: 18px !important;
line-height: 1.5;
position: relative;
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
/* ユーザーメッセージ */
.gr-chatbot .message.user {
background: linear-gradient(135deg, #f9f0ff, #e1d2ff) !important;
border-radius: 18px 18px 4px 18px !important;
margin-left: auto !important;
color: #5a3d7a !important;
box-shadow: 0 3px 10px rgba(225, 210, 255, 0.3);
}
/* ボットメッセージ */
.gr-chatbot .message.bot {
background: linear-gradient(135deg, #ffecf1, #ffd6e0) !important;
border-radius: 18px 18px 18px 4px !important;
margin-right: auto !important;
color: #a94768 !important;
box-shadow: 0 3px 10px rgba(255, 214, 224, 0.3);
}
/* ギャラリー */
#creature_gallery {
margin: 1.5rem 0;
}
#creature_gallery .gr-gallery-item {
border: none;
border-radius: 16px;
overflow: hidden;
background-color: var(--white);
box-shadow: 0 5px 15px var(--shadow);
transition: all 0.3s ease;
}
#creature_gallery .gr-gallery-item:hover {
transform: translateY(-5px);
box-shadow: 0 12px 30px var(--shadow);
}
#creature_gallery .gr-gallery-item img {
border-radius: 12px;
margin: 0.5rem;
}
/* アバターセクション */
#avatar_image {
padding: 1rem;
background: linear-gradient(135deg, #fff8e1, #fffcf0);
border-radius: 16px;
box-shadow: 0 5px 15px rgba(0,0,0,0.05);
position: relative;
overflow: hidden;
}
#avatar_image::before {
content: '';
position: absolute;
top: -50px;
left: -50px;
width: 100px;
height: 100px;
background: linear-gradient(45deg, var(--accent), transparent);
border-radius: 50%;
opacity: 0.5;
}
#avatar_image::after {
content: '';
position: absolute;
bottom: -50px;
right: -50px;
width: 100px;
height: 100px;
background: linear-gradient(45deg, var(--primary-light), transparent);
border-radius: 50%;
opacity: 0.5;
}
/* ポイント表示 */
#current_points {
font-size: 2rem !important;
font-weight: bold !important;
color: var(--primary) !important;
text-align: center !important;
margin-top: 1rem;
padding: 1rem;
border: none;
background: linear-gradient(135deg, #fff8f8, #ffecf0);
border-radius: 16px;
box-shadow: 0 5px 15px rgba(255, 133, 162, 0.15);
position: relative;
overflow: hidden;
animation: pulse 2s infinite ease-in-out;
}
#current_points::before {
content: '✨';
position: absolute;
left: 20px;
top: 50%;
transform: translateY(-50%);
}
#current_points::after {
content: '✨';
position: absolute;
right: 20px;
top: 50%;
transform: translateY(-50%);
}
/* クイズセクション */
#quiz_image {
border: 4px solid var(--accent-light);
border-radius: 20px;
overflow: hidden;
margin-bottom: 1.5rem;
box-shadow: 0 8px 25px rgba(0,0,0,0.1);
transition: all 0.3s ease;
}
#quiz_image:hover {
transform: scale(1.02);
}
#quiz_result_textbox {
font-size: 1.3rem !important;
font-weight: bold !important;
text-align: center !important;
padding: 1rem !important;
margin-top: 1rem;
border-width: 3px !important;
border-radius: 16px !important;
background: linear-gradient(135deg, #f9f9f9, #f0f0f0) !important;
}
/* 正解/不正解クラス */
.result-correct {
color: #2e8540 !important;
border-color: #2e8540 !important;
background: linear-gradient(135deg, #f0ffe0, #eaffda) !important;
}
.result-incorrect {
color: #d83b01 !important;
border-color: #d83b01 !important;
background: linear-gradient(135deg, #fff0f0, #ffe6e6) !important;
}
/* ラベル */
.gr-label {
font-weight: 600;
color: var(--primary);
font-size: 1.1rem;
margin-bottom: 0.5rem;
display: block;
}
/* レスポンシブデザイン */
@media (max-width: 768px) {
.gradio-container {
margin: 1rem;
padding: 1rem;
}
h1 {
font-size: 2rem;
}
h2 {
font-size: 1.5rem;
}
.gradio-tabs .gradio-tabs-nav button {
padding: 0.8rem 1rem !important;
font-size: 0.9rem !important;
}
.gr-chatbot {
height: 250px;
}
}
/* アニメーション要素 */
.animate-float {
animation: float 6s ease-in-out infinite;
}
.animate-pulse {
animation: pulse 2s infinite ease-in-out;
}
.animate-sparkle {
animation: sparkle 1.5s infinite;
}
/* ローディング状態をかわいく */
.gr-loading {
border-radius: 50%;
background: linear-gradient(45deg, var(--primary), var(--secondary), var(--accent));
background-size: 200% 200%;
animation: gradientBG 2s ease infinite;
}
/* スクロールバーをかわいく */
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
background: var(--neutral);
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: linear-gradient(var(--primary-light), var(--secondary-light));
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: linear-gradient(var(--primary), var(--secondary));
}
/* アクセシビリティ向上:フォーカス状態の視覚的フィードバック */
:focus {
outline: 3px solid var(--primary-light);
outline-offset: 2px;
}
/* 吹き出し装飾 */
.bubble {
position: relative;
background: var(--white);
border-radius: 16px;
padding: 1rem;
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
.bubble::after {
content: '';
position: absolute;
bottom: -10px;
left: 20px;
width: 20px;
height: 20px;
background: var(--white);
transform: rotate(45deg);
box-shadow: 5px 5px 10px rgba(0,0,0,0.1);
}
/* ホームページのイメージエリア */
#home_image {
position: relative;
margin: 2rem auto;
max-width: 90%;
border-radius: 24px;
overflow: hidden;
box-shadow: 0 10px 30px rgba(0,0,0,0.15);
transition: all 0.5s ease;
}
#home_image:hover {
transform: translateY(-10px);
box-shadow: 0 15px 40px rgba(0,0,0,0.2);
}
/* デコレーション要素 */
.deco-star {
position: absolute;
font-size: 1.5rem;
color: var(--accent);
opacity: 0.8;
animation: sparkle 2s infinite;
}
.deco-heart {
position: absolute;
font-size: 1.5rem;
color: var(--primary);
opacity: 0.8;
animation: pulse 3s infinite;
}
/* 花の装飾 */
.flower-deco {
position: absolute;
width: 50px;
height: 50px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath fill='%23ffb6c1' d='M50 0 C60 25 75 40 100 50 C75 60 60 75 50 100 C40 75 25 60 0 50 C25 40 40 25 50 0'/%3E%3Ccircle fill='%23ffde59' cx='50' cy='50' r='20'/%3E%3C/svg%3E");
background-size: contain;
background-repeat: no-repeat;
pointer-events: none;
z-index: 2;
opacity: 0.7;
}
/* クリックアニメーション */
@keyframes clickEffect {
0% {
opacity: 1;
transform: scale(0);
}
100% {
opacity: 0;
transform: scale(2);
}
}
.click-effect {
position: absolute;
border-radius: 50%;
background-color: var(--primary);
width: 50px;
height: 50px;
margin-left: -25px;
margin-top: -25px;
animation: clickEffect 0.5s ease-out;
pointer-events: none;
}
/* 音楽プレーヤー */
#creature_sound {
background: linear-gradient(135deg, #f0f8ff, #e6f2ff);
border-radius: 16px;
padding: 0.5rem;
box-shadow: 0 5px 15px rgba(0,0,0,0.05);
}
#creature_sound audio {
width: 100%;
border-radius: 12px;
}
/* 音声コントロールをかわいくカスタマイズ */
audio::-webkit-media-controls-panel {
background: linear-gradient(135deg, var(--secondary-light), var(--primary-light));
}
audio::-webkit-media-controls-play-button {
background-color: var(--primary);
border-radius: 50%;
}
/* イベントリスト(お知らせなど) */
.event-list {
list-style: none;
padding: 0;
margin: 1rem 0;
}
.event-item {
background: linear-gradient(135deg, #fff8f8, #ffecf0);
border-radius: 12px;
padding: 1rem;
margin-bottom: 1rem;
box-shadow: 0 4px 10px rgba(0,0,0,0.05);
position: relative;
padding-left: 3rem;
transition: all 0.3s ease;
}
.event-item:hover {
transform: translateY(-3px);
box-shadow: 0 6px 15px rgba(0,0,0,0.1);
}
.event-item::before {
content: '📢';
position: absolute;
left: 1rem;
top: 50%;
transform: translateY(-50%);
font-size: 1.5rem;
}
.event-date {
font-size: 0.9rem;
color: var(--text);
opacity: 0.7;
}
.event-title {
font-weight: 600;
color: var(--primary);
margin: 0.3rem 0;
}
/* バッジ(ユーザーレベルなど) */
.badge {
display: inline-block;
padding: 0.3rem 0.8rem;
border-radius: 20px;
font-size: 0.9rem;
font-weight: 600;
margin-right: 0.5rem;
background: linear-gradient(45deg, var(--primary), var(--primary-light));
color: var(--white);
box-shadow: 0 3px 8px rgba(255, 133, 162, 0.3);
}
.badge-blue {
background: linear-gradient(45deg, var(--secondary), var(--secondary-light));
box-shadow: 0 3px 8px rgba(162, 215, 255, 0.3);
}
.badge-yellow {
background: linear-gradient(45deg, var(--accent), var(--accent-light));
color: var(--text);
box-shadow: 0 3px 8px rgba(255, 222, 89, 0.3);
}
/* ツールチップ */
.tooltip {
position: relative;
display: inline-block;
cursor: pointer;
}
.tooltip .tooltip-text {
visibility: hidden;
width: 120px;
background-color: var(--primary);
color: var(--white);
text-align: center;
border-radius: 8px;
padding: 0.5rem;
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
margin-left: -60px;
opacity: 0;
transition: opacity 0.3s;
font-size: 0.9rem;
}
.tooltip .tooltip-text::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: var(--primary) transparent transparent transparent;
}
.tooltip:hover .tooltip-text {
visibility: visible;
opacity: 1;
}
/* アバタークリエーター強化 */
.avatar-part-selector {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 0.8rem;
margin: 1rem 0;
}
.avatar-part-option {
border: 2px solid var(--neutral);
border-radius: 12px;
overflow: hidden;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
}
.avatar-part-option:hover {
transform: translateY(-3px);
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
.avatar-part-option.selected {
border-color: var(--primary);
box-shadow: 0 5px 15px rgba(255, 133, 162, 0.2);
}
.avatar-part-option img {
width: 100%;
display: block;
}
.avatar-part-option.selected::after {
content: '✓';
position: absolute;
right: 5px;
top: 5px;
background-color: var(--primary);
color: var(--white);
width: 20px;
height: 20px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.8rem;
}
/* カラーピッカー */
.color-picker {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin: 1rem 0;
}
.color-option {
width: 30px;
height: 30px;
border-radius: 50%;
cursor: pointer;
transition: all 0.3s ease;
border: 2px solid var(--white);
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.color-option:hover {
transform: scale(1.2);
}
.color-option.selected {
border-color: var(--text);
box-shadow: 0 0 0 2px var(--white), 0 0 0 4px var(--primary);
}
/* プログレスバー */
.progress-container {
width: 100%;
background-color: var(--neutral);
border-radius: 10px;
margin: 1rem 0;
overflow: hidden;
height: 15px;
box-shadow: inset 0 2px 5px rgba(0,0,0,0.05);
}
.progress-bar {
height: 100%;
border-radius: 10px;
background: linear-gradient(45deg, var(--primary), var(--secondary));
transition: width 0.5s ease;
position: relative;
overflow: hidden;
}
.progress-bar::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(
90deg,
rgba(255,255,255,0) 0%,
rgba(255,255,255,0.2) 50%,
rgba(255,255,255,0) 100%
);
animation: shine 1.5s infinite;
}
@keyframes shine {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
/* カード要素 */
.card {
background-color: var(--white);
border-radius: 16px;
padding: 1.5rem;
margin: 1rem 0;
box-shadow: 0 5px 20px rgba(0,0,0,0.08);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 30px rgba(0,0,0,0.12);
}
.card::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 5px;
background: linear-gradient(90deg, var(--primary), var(--secondary), var(--accent));
}
.card-title {
font-size: 1.3rem;
color: var(--primary);
margin-top: 0;
margin-bottom: 1rem;
font-weight: 600;
}
/* アクセシビリティ強化 */
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
.skip-link {
position: absolute;
left: -9999px;
z-index: 999;
padding: 1em;
background-color: var(--white);
color: var(--primary);
opacity: 0;
}
.skip-link:focus {
left: 50%;
transform: translateX(-50%);
opacity: 1;
}
/* アニメーション用スケルトンローディング */
.skeleton {
background: linear-gradient(90deg, var(--neutral) 25%, #f0f0f0 50%, var(--neutral) 75%);
background-size: 200% 100%;
animation: loading 1.5s infinite;
border-radius: 4px;
}
@keyframes loading {
0% { background-position: -100% 0; }
100% { background-position: 100% 0; }
}
.skeleton-text {
height: 1rem;
margin-bottom: 0.5rem;
width: 100%;
}
.skeleton-image {
height: 200px;
width: 100%;
}
/* ドロップダウンメニュー */
.gr-dropdown {
position: relative;
width: 100%;
}
.gr-dropdown select {
appearance: none;
width: 100%;
padding: 0.8rem 1.2rem;
font-family: 'M PLUS Rounded 1c', sans-serif;
font-size: 1rem;
color: var(--text);
border: 2px solid var(--primary-light);
border-radius: 16px;
background-color: var(--white);
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ff85a2'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 10px center;
background-size: 20px;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 10px rgba(0,0,0,0.03);
}
.gr-dropdown select:hover {
border-color: var(--primary);
}
.gr-dropdown select:focus {
border-color: var(--primary);
box-shadow: 0 4px 15px rgba(255, 133, 162, 0.15);
outline: none;
}
/* プラットフォーム全体の追加装飾 */
.platform-deco {
position: fixed;
pointer-events: none;
z-index: -1;
opacity: 0.5;
}
.deco-top-left {
top: 20px;
left: 20px;
width: 100px;
height: 100px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath fill='none' stroke='%23ffc2d1' stroke-width='3' d='M10,50 C10,30 30,10 50,10 C70,10 90,30 90,50 C90,70 70,90 50,90 C30,90 10,70 10,50 Z'%3E%3C/path%3E%3C/svg%3E");
animation: rotate 30s linear infinite;
}
.deco-bottom-right {
bottom: 20px;
right: 20px;
width: 120px;
height: 120px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath fill='none' stroke='%23a2d7ff' stroke-width='3' d='M20,20 L80,20 L80,80 L20,80 Z'%3E%3C/path%3E%3C/svg%3E");
animation: pulse 15s ease-in-out infinite;
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* アクセシビリティとユーザビリティのためのフォーカス可視化 */
a:focus, button:focus, input:focus, select:focus, textarea:focus {
outline: 2px solid var(--primary);
outline-offset: 2px;
}
/* ダークモードサポート (オプション) */
@media (prefers-color-scheme: dark) {
:root {
--primary: #ff85a2;
--primary-light: #ff9fb3;
--secondary: #7bc6ff;
--secondary-light: #a2d7ff;
--accent: #ffde59;
--accent-light: #ffe88a;
--success: #a5dda5;
--error: #ff8989;
--neutral: #2a2a2a;
--white: #333333;
--text: #f0f0f0;
--shadow: rgba(0, 0, 0, 0.3);
}
body {
background: linear-gradient(135deg, #2a122a 0%, #0a1a2a 100%);
}
.gradio-container {
background-color: #222222;
}
.gr-textbox, .gr-textarea {
background-color: #333333 !important;
color: #f0f0f0 !important;
}
/* その他のダークモード調整が必要なセレクタ... */
}