美波咲良のAV女優プロフィール

美波咲良のAV女優プロフィール

美波咲良は1995年11月30日生まれのAV女優。身長160cmのプロポーションを持つ。この記事では、プロフィールや出演作品、人気ランキング、おすすめ代表作まで徹底解説する。

【美波咲良】基本プロフィール

美波咲良の顔写真
名前美波咲良
生年月日1995年11月30日
身長160cm
X(旧Twitter)https://x.com/intent/tweet?text=美波咲良(みなみさくら)- AV女優プロフィール&url=https://www.minnano-av.com/actress376765.html

【美波咲良】人物像・魅力・コメント

美波咲良

生年月日1995-11-30
出身地
身長160
B/W/HB110 / W73 / H102
所属Eve-Rest Model Agency
活動期間2022年 -
デビュー
趣味・特技
タグ爆乳
.fanza-widget { font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Yu Gothic", "Meiryo", sans-serif; margin: 0 0 24px 0; padding: 0; background: #fff8fb; color: #333; } .fanza-widget header { background: linear-gradient(90deg, #ff8fb4, #ff6f9b); color: #fff; padding: 16px; text-align: center; box-shadow: 0 2px 4px rgba(0,0,0,0.08); } .fanza-widget header h1 { margin: 0; font-size: 20px; } .fanza-widget .container { max-width: 1280px; margin: 16px auto 40px; padding: 0 12px; } .fanza-widget .toolbar { display: flex; justify-content: space-between; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 14px; background: #fff; border-radius: 999px; padding: 6px 12px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); margin-bottom: 8px; } .fanza-widget .toolbar-group { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; } .fanza-widget .badge { display: inline-block; padding: 2px 8px; border-radius: 999px; background: #ffe4ef; color: #d81b60; font-size: 11px; } .fanza-widget select, .fanza-widget input[type="search"] { padding: 4px 8px; font-size: 13px; border-radius: 999px; border: 1px solid #ddd; background: #fff; max-width: 200px; } .fanza-widget .toolbar input[type="checkbox"] { margin-right: 2px; } .fanza-widget .genre-wrap { margin: 4px 0 12px; display: flex; flex-wrap: wrap; gap: 6px; } .fanza-widget .genre-btn { border-radius: 999px; border: 1px solid #ffd1e4; background: #fff; padding: 4px 10px; font-size: 12px; cursor: pointer; line-height: 1.2; color: #ff6f9b; /* ← ここを追加:文字色ピンク */ font-weight: 600; /* ← お好みで */ } .fanza-widget .genre-btn.is-active { background: #ff6f9b; border-color: #ff6f9b; color: #fff; } .fanza-widget .genre-btn.genre-hidden { display: none; } .fanza-widget .genre-more-btn { border-radius: 999px; border: none; padding: 4px 10px; font-size: 12px; cursor: pointer; background: #ffe4ef; color: #d81b60; } .fanza-widget .item-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 16px; } .fanza-widget .item-card { position: relative; background: #fff; border-radius: 12px; padding: 8px; box-shadow: 0 1px 4px rgba(0,0,0,0.08); display: block; transition: transform 0.15s ease, box-shadow 0.15s ease; } .fanza-widget .item-card.hidden { display: none !important; } .fanza-widget .item-card:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.12); } .fanza-widget .item-card a { color: inherit; text-decoration: none; display: block; } .fanza-widget .item-card .thumb { width: 100%; padding-top: 70%; position: relative; overflow: hidden; border-radius: 10px; background: #eee; } .fanza-widget .item-card img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; } .fanza-widget .item-card .title { font-size: 14px; margin: 8px 0 0; line-height: 1.4; } .fanza-widget .meta { margin-top: 4px; font-size: 11px; color: #666; display: flex; flex-direction: column; gap: 2px; } .fanza-widget .meta-row { display: flex; align-items: center; justify-content: space-between; } .fanza-widget .meta-price { font-weight: 600; } .fanza-widget .meta-review { margin-left: auto; } .fanza-widget .meta-label { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; } .fanza-widget .fav-btn { position: absolute; top: 6px; right: 6px; width: 26px; height: 26px; border-radius: 50%; border: none; cursor: pointer; background: rgba(255,255,255,0.9); display: flex; align-items: center; justify-content: center; box-shadow: 0 1px 4px rgba(0,0,0,0.18); font-size: 16px; color: #ff6f9b; transition: transform 0.1s ease, box-shadow 0.1s ease, background 0.1s ease, color 0.1s ease; } .fanza-widget .fav-btn::before { content: "2661"; /* ♡ */ } .fanza-widget .fav-btn:hover { transform: scale(1.06); box-shadow: 0 2px 6px rgba(0,0,0,0.25); } .fanza-widget .item-card.is-favorited .fav-btn { background: #ff6f9b; color: #fff; } .fanza-widget .item-card.is-favorited .fav-btn::before { content: "2665"; /* ♥ */ } .fanza-widget .more-wrap { text-align: center; margin: 24px 0 8px; } .fanza-widget .more-button { padding: 10px 24px; font-size: 14px; border-radius: 999px; border: none; cursor: pointer; background: #ff6f9b; color: #fff; box-shadow: 0 2px 6px rgba(0,0,0,0.16); } .fanza-widget .more-button:disabled { background: #aaa; box-shadow: none; cursor: default; } .fanza-widget footer { padding: 16px; text-align: center; font-size: 12px; color: #777; border-top: 1px solid #f0f0f0; background: #fff; } /* タブレット */ @media (max-width: 900px) { .fanza-widget .item-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } } /* スマホ最適化 */ @media (max-width: 600px) { .fanza-widget header h1 { font-size: 16px; } .fanza-widget .item-grid { grid-template-columns: repeat(2, 1fr); gap: 8px; } .fanza-widget .item-card .title { font-size: 12px; } .fanza-widget .toolbar { border-radius: 16px; } }

美波咲良 のAV作品一覧

並び替え 人気順 新着順 価格が安い順 価格が高い順 評価順
検索
価格 指定なし 〜1,000円 1,000〜2,000円 2,000〜3,000円 3,000円以上
評価 指定なし ★3.5以上 ★4.0以上 ★4.5以上 レビューありのみ
すべて
読み込み中...
(function() { const wrapper = document.currentScript ? document.currentScript.closest('.fanza-widget') : document.querySelector('.fanza-widget'); if (!wrapper) return; const PAGE_KEY = "美波咲良_のAV作品一覧"; const FAVORITES_KEY = 'fanzaFavorites_' + PAGE_KEY; const STATE_VERSION = 'v2'; const STATE_KEY = 'fanzaWidgetState_' + STATE_VERSION + '_' + PAGE_KEY; const FIRST_VISIBLE = 20; const LOAD_CHUNK = 20; const GENRE_MAX_VISIBLE = 16; const grid = wrapper.querySelector('#item-grid'); if (!grid) return; const allCards = Array.from(grid.querySelectorAll('.item-card')); const btnMore = wrapper.querySelector('#more-button'); const sortSelect = wrapper.querySelector('#sort-select'); const labelSelect = wrapper.querySelector('#label-select'); const soloOnly = wrapper.querySelector('#solo-only'); const searchBox = wrapper.querySelector('#keyword-search'); const countInfo = wrapper.querySelector('#count-info'); const genreWrap = wrapper.querySelector('#genre-wrap'); const priceFilter = wrapper.querySelector('#price-filter'); const reviewFilter = wrapper.querySelector('#review-filter'); const favOnly = wrapper.querySelector('#fav-only'); const favInfo = wrapper.querySelector('#fav-info'); if (!allCards.length) { if (btnMore) { btnMore.disabled = true; btnMore.textContent = '作品が見つかりませんでした'; } if (countInfo) countInfo.textContent = '0 / 0 件 表示中'; return; } // ===== localStorage helpers ===== function loadFavorites() { try { const raw = window.localStorage.getItem(FAVORITES_KEY); if (!raw) return new Set(); const arr = JSON.parse(raw); if (Array.isArray(arr)) { return new Set(arr.map(String)); } } catch (e) {} return new Set(); } function saveFavorites() { try { const arr = Array.from(favorites); window.localStorage.setItem(FAVORITES_KEY, JSON.stringify(arr)); } catch (e) {} } function loadState() { try { const raw = window.localStorage.getItem(STATE_KEY); if (!raw) return null; return JSON.parse(raw); } catch (e) {} return null; } function saveState() { try { const state = { sort: currentSort, labelId: currentLabelId, keyword: keyword, soloOnly: soloOnly && soloOnly.checked ? 1 : 0, priceFilter: currentPriceFilter, reviewFilter: currentReviewFilter, favOnly: favoritesOnly ? 1 : 0, genres: Array.from(activeGenres), }; window.localStorage.setItem(STATE_KEY, JSON.stringify(state)); } catch (e) {} } function updateFavoriteBadge() { if (!favInfo) return; favInfo.textContent = 'お気に入り: ' + favorites.size + '件'; } // ===== state ===== let currentSort = 'rank'; let currentLabelId = 'all'; let keyword = ''; let currentCards = allCards.slice(); let visibleCount = 0; let activeGenres = new Set(); let genreExpanded = false; let currentPriceFilter = 'all'; let currentReviewFilter = 'all'; let favoritesOnly = false; let favorites = loadFavorites(); function getNumeric(val, fallback) { const n = Number(val); return isNaN(n) ? fallback : n; } // ===== 共通ヘルパー:カードのジャンル名配列をクリーンに取得 ===== function getCardGenreNames(card) { const raw = card.dataset.genreNames || ''; if (!raw) return []; return raw .split(',') .map(name => { if (!name) return ''; // 全角スペース・NBSPなどを通常スペースに寄せる const replaced = name .replace(/u3000/g, ' ') .replace(/u00A0/g, ' '); const normalized = replaced.replace(/s+/g, ' ').trim(); return normalized; }) // 「空白を全部取ると何も残らない」ものは除外 .filter(name => name && name.replace(/s+/g, '').length > 0); } // ===== お気に入りボタン状態反映 ===== allCards.forEach(card => { const cid = card.dataset.contentId; if (!cid) return; const favBtn = card.querySelector('.fav-btn'); if (!favBtn) return; if (favorites.has(String(cid))) { card.classList.add('is-favorited'); } favBtn.addEventListener('click', function(ev) { ev.preventDefault(); ev.stopPropagation(); const key = String(cid); if (favorites.has(key)) { favorites.delete(key); card.classList.remove('is-favorited'); } else { favorites.add(key); card.classList.add('is-favorited'); } saveFavorites(); updateFavoriteBadge(); if (favoritesOnly) { rebuildCards(); } }); }); updateFavoriteBadge(); // ===== match helpers ===== function matchesKeyword(card, kw) { if (!kw) return true; const words = kw.split(/s+/).filter(Boolean); if (!words.length) return true; const haystack = [ card.querySelector('.title')?.textContent || '', card.dataset.actressNames || '', card.dataset.labelName || '', card.dataset.makerName || '', card.dataset.seriesName || '', card.dataset.genreNames || '' ].join(' ').toLowerCase(); return words.every(w => haystack.includes(w.toLowerCase())); } function matchesSolo(card) { if (!soloOnly || !soloOnly.checked) return true; const c = getNumeric(card.dataset.actressCount, 0); return c === 1; } function matchesGenres(card) { if (!activeGenres.size) return true; const names = getCardGenreNames(card); if (!names.length) return false; const nameSet = new Set(names); return Array.from(activeGenres).every(g => nameSet.has(g)); } function matchesLabel(card) { if (currentLabelId === 'all') return true; return card.dataset.labelId === currentLabelId; } function matchesPrice(card) { const mode = currentPriceFilter; if (!mode || mode === 'all') return true; const price = getNumeric(card.dataset.price, 0); if (!price) return false; switch (mode) { case '~1000': return price 1000 && price 2000 && price = 3000; default: return true; } } function matchesReview(card) { const mode = currentReviewFilter; if (!mode || mode === 'all') return true; const score = getNumeric(card.dataset.review, 0); if (mode === 'has') { return score > 0; } const threshold = parseFloat(mode); if (!threshold) return true; return score >= threshold; } function matchesFavorite(card) { if (!favoritesOnly) return true; const cid = card.dataset.contentId; if (!cid) return false; return favorites.has(String(cid)); } // ===== sort ===== function sortCards(cards, mode) { return cards.slice().sort((a, b) => { const rankA = getNumeric(a.dataset.rank, 0); const rankB = getNumeric(b.dataset.rank, 0); const priceA = getNumeric(a.dataset.price, 0); const priceB = getNumeric(b.dataset.price, 0); const reviewA = getNumeric(a.dataset.review, 0); const reviewB = getNumeric(b.dataset.review, 0); const dateA = Date.parse(a.dataset.date || '') || 0; const dateB = Date.parse(b.dataset.date || '') || 0; switch (mode) { case 'date': return dateB - dateA; case 'price-asc': return priceA - priceB; case 'price-desc': return priceB - priceA; case 'review': return reviewB - reviewA; case 'rank': default: return rankA - rankB; } }); } // ===== label options ===== function rebuildLabelOptions(baseCards) { if (!labelSelect) return; const prev = currentLabelId; labelSelect.innerHTML = 'すべて'; const map = new Map(); baseCards.forEach(card => { const id = card.dataset.labelId; const name = card.dataset.labelName; if (id && name && !map.has(id)) { map.set(id, name); } }); map.forEach((name, id) => { const opt = document.createElement('option'); opt.value = id; opt.textContent = name; labelSelect.appendChild(opt); }); if (prev && map.has(prev)) { currentLabelId = prev; labelSelect.value = prev; } else { currentLabelId = 'all'; labelSelect.value = 'all'; } } // ===== genre tabs ===== function buildGenreFilters(baseCards) { if (!genreWrap) return; genreWrap.innerHTML = ''; const counts = new Map(); baseCards.forEach(card => { const names = getCardGenreNames(card); names.forEach(name => { counts.set(name, (counts.get(name) || 0) + 1); }); }); const genres = Array.from(counts.entries()).sort((a, b) => b[1] - a[1]); if (!genres.length) return; genres.forEach(([name, count], index) => { if (!name) return; // 念のため const btn = document.createElement('button'); btn.type = 'button'; btn.className = 'genre-btn'; btn.textContent = name; btn.dataset.genreName = name; if (activeGenres.has(name)) { btn.classList.add('is-active'); } if (!genreExpanded && index >= GENRE_MAX_VISIBLE) { btn.classList.add('genre-hidden'); } btn.addEventListener('click', () => { if (activeGenres.has(name)) { activeGenres.delete(name); btn.classList.remove('is-active'); } else { activeGenres.add(name); btn.classList.add('is-active'); } rebuildCards(); }); genreWrap.appendChild(btn); }); if (genres.length > GENRE_MAX_VISIBLE) { const moreBtn = document.createElement('button'); moreBtn.type = 'button'; moreBtn.className = 'genre-more-btn'; moreBtn.textContent = genreExpanded ? 'ジャンルを折りたたむ' : 'もっと見る'; moreBtn.addEventListener('click', () => { genreExpanded = !genreExpanded; const genreButtons = genreWrap.querySelectorAll('.genre-btn'); genreButtons.forEach((btn, index) => { if (index >= GENRE_MAX_VISIBLE) { btn.classList.toggle('genre-hidden', !genreExpanded); } }); moreBtn.textContent = genreExpanded ? 'ジャンルを折りたたむ' : 'もっと見る'; }); genreWrap.appendChild(moreBtn); } } // ===== visible update ===== function updateVisible() { allCards.forEach(card => card.classList.add('hidden')); const maxVisible = Math.min(visibleCount, currentCards.length); for (let i = 0; i = maxVisible); } if (btnMore) { if (currentCards.length === 0) { btnMore.disabled = true; btnMore.textContent = '該当作品なし'; } else if (maxVisible >= currentCards.length) { btnMore.disabled = true; btnMore.textContent = 'すべて表示しました'; } else { btnMore.disabled = false; btnMore.textContent = 'もっと見る(+20件)'; } } if (countInfo) { if (favoritesOnly && favorites.size === 0) { countInfo.textContent = 'お気に入りに登録された作品がありません。カード右上のハートボタンで登録できます。'; } else { countInfo.textContent = maxVisible + ' / ' + currentCards.length + ' 件 表示中(全 ' + allCards.length + ' 件)'; } } saveState(); } // ===== pipeline ===== function rebuildCards() { const base = allCards.filter(card => { if (!matchesKeyword(card, keyword)) return false; if (!matchesSolo(card)) return false; if (!matchesGenres(card)) return false; if (!matchesPrice(card)) return false; if (!matchesReview(card)) return false; if (!matchesFavorite(card)) return false; return true; }); buildGenreFilters(base); rebuildLabelOptions(base); currentCards = base.filter(card => matchesLabel(card)); currentCards = sortCards(currentCards, currentSort); currentCards.forEach(card => grid.appendChild(card)); visibleCount = Math.min(FIRST_VISIBLE, currentCards.length); updateVisible(); } function showMore() { visibleCount += LOAD_CHUNK; if (visibleCount > currentCards.length) { visibleCount = currentCards.length; } updateVisible(); } // ===== restore initial state ===== (function applyInitialState() { const state = loadState(); if (!state) return; if (typeof state.keyword === 'string' && searchBox) { searchBox.value = state.keyword; keyword = state.keyword; } if (typeof state.sort === 'string' && sortSelect) { currentSort = state.sort; sortSelect.value = state.sort; } if (typeof state.priceFilter === 'string' && priceFilter) { currentPriceFilter = state.priceFilter; priceFilter.value = state.priceFilter; } if (typeof state.reviewFilter === 'string' && reviewFilter) { currentReviewFilter = state.reviewFilter; reviewFilter.value = state.reviewFilter; } if (soloOnly && state.soloOnly) { soloOnly.checked = true; } if (favOnly && state.favOnly) { favOnly.checked = true; favoritesOnly = true; } if (Array.isArray(state.genres) && state.genres.length) { activeGenres = new Set(state.genres); } if (typeof state.labelId === 'string') { currentLabelId = state.labelId; } })(); // ===== init & events ===== currentCards = allCards.slice(); rebuildCards(); if (btnMore) btnMore.addEventListener('click', showMore); if (sortSelect) sortSelect.addEventListener('change', function() { currentSort = this.value; rebuildCards(); }); if (labelSelect) labelSelect.addEventListener('change', function() { currentLabelId = this.value || 'all'; rebuildCards(); }); if (soloOnly) soloOnly.addEventListener('change', function() { rebuildCards(); }); if (priceFilter) priceFilter.addEventListener('change', function() { currentPriceFilter = this.value || 'all'; rebuildCards(); }); if (reviewFilter) reviewFilter.addEventListener('change', function() { currentReviewFilter = this.value || 'all'; rebuildCards(); }); if (favOnly) favOnly.addEventListener('change', function() { favoritesOnly = !!this.checked; rebuildCards(); }); if (searchBox) { let timer = null; searchBox.addEventListener('input', function() { if (timer) clearTimeout(timer); const value = this.value; timer = setTimeout(() => { keyword = value.trim(); rebuildCards(); }, 180); }); } })();

【美波咲良】出演作品・人気ランキング・おすすめ代表作

【美波咲良】 の作品(全1件)

【女優別まとめ】 の作品(全36件)

SHARE:
あなたへのおすすめ