๐ฟ mint-ds v1.0
Mint Design System
30ไปฃๅฅณๆงๅใFintechใขใใชใฎใใถใคใณใทในใใ ใงใใใ้ฃใใใชใใปๆใใชใใป่งฆใฃใฆใใฆๆฅฝใใใใ่ปธใซ่จญ่จใใใใใใณใใฐใชใผใณใใผในใฎๆธ ๆฝๆใใUIใใฌใผใ ใฏใผใฏใๅใปใฏใทใงใณใฎใณใผใใฏใใฎใพใพใณใใผใใฆไฝฟใใพใใ
๐จ ใซใฉใผใใฌใใ
ๆทกใใใณใใฐใชใผใณใๅบ่ชฟใจใใ9่ฒใฎใทในใใ ใซใฉใผใCSSๅคๆฐใจใใฆๅฎ็พฉใใไธ่ฒซใใใใผใใ็ถญๆใใพใใในใฆใฉใใใใฏใชใใฏใใใจใซใฉใผใณใผใใใณใใผใงใใพใใ
ใทในใใ ใซใฉใผ
่ฃๅฉใซใฉใผ๏ผ็ดๆฅๆๅฎ๏ผ
CSSๅคๆฐๅฎ็พฉ
css
:root { --base-bg: #e8f5f1; /* ใใผใน่ๆฏ๏ผๆทกใใใณใ๏ผ*/ --accent: #a8d5ba; /* ใขใฏใปใณใ๏ผ่ฅ่ใใณใ๏ผ*/ --accent-deep: #4a8c6f; /* ใขใฏใปใณใๆทฑ๏ผๆทฑใฟใใณใ๏ผ*/ --text-main: #44504c; /* ใกใคใณๆๅญ๏ผใใฃใณใผใซใฐใฌใผ๏ผ*/ --text-sub: #ccd6d1; /* ใตใๆๅญ๏ผๆฅต่ใฐใฌใผ๏ผ*/ --card-bg: #ffffff; /* ใซใผใ่ๆฏ๏ผ็ด็ฝ๏ผ*/ --mint-light: #d4ede3; /* ใใผใใผใปใใผ่ๆฏ */ --mint-pale: #f0faf5; /* ๅ ฅๅใปใซใผใ่ๆฏ */ --shadow: rgba(74,140,111,0.12); /* ใฐใชใผใณ็ณปใทใฃใใฆ */ }
๐ค ใฟใคใใฐใฉใใฃ
ๆฅๆฌ่ชใฏใใฉใฎใ่งใด๏ผใทในใใ ใใฉใณใ๏ผใๆฐๅญใป่ฑๅญใฏRoboto๏ผGoogle Fonts๏ผใๆฐๅญใLight๏ผ300๏ผใง็ดฐใ่กจ็คบใใใใจใงใๆฐๅญใ่ฆๆใชใฆใผใถใผใธใฎๅง่ฟซๆใๆธใใใพใใ
ใใฉใณใ่ชญใฟ่พผใฟ
html
<!-- Google Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet"> /* CSS: ๆฅๆฌ่ชใใผใน */ body { font-family: 'Hiragino Kaku Gothic ProN', 'ใใฉใฎใ่งใด ProN W3', 'Hiragino Sans', sans-serif; } /* ๆฐๅญใป่ฑๅญ่ฆ็ด ใซๅๅฅๆๅฎ */ .number, input { font-family: 'Roboto', sans-serif; }
ใฟใคใในใฑใผใซ
LIVE PREVIEW
| ็จ้ | ใตใคใบ | Weight | ใใฉใณใ | ใใฌใใฅใผ |
|---|
๐ ในใใผใทใณใฐ & ่งไธธ
8ใฎๅๆฐใใผในใฎในใใผใทใณใฐใทในใใ ใ่งไธธใฏ่ฆ็ด ใฎ้่ฆๅบฆใปใตใคใบใซๅฟใใฆ้ๅฑค็ใซ่จญๅฎใใพใใ
ในใใผใทใณใฐในใฑใผใซ
่งไธธ๏ผborder-radius๏ผ
RADIUS SYSTEM
๐ช ใทใฃใใฆใปใฐใฉใใผใทใงใณใปๆ ็ท
้ปใๅฝฑใฎไปฃใใใซใใผใใซใฉใผใฎใฐใชใผใณ็ณปใทใฃใใฆใไฝฟ็จใ้ใใใชใใใ็ฉบๆฐๆใฎใใๅฅฅ่กใใๆผๅบใใพใใ
ใทใฃใใฆในใฑใผใซ
ใฐใฉใใผใทใงใณ
ๆ ็ท
css
/* ้ๅธธใฎใซใผใใปๅ ฅๅ */ border: 1.5px solid #d4ede3; /* ใใฉใผใซในใปใใคใฉใคใ */ border: 2px solid #a8d5ba; /* ็น็ท๏ผ่จ็ฎๅผใป่ฃ่ถณ๏ผ */ border: 1px dashed #d4ede3; /* ๅทฆใขใฏใปใณใใฉใคใณ */ border-left: 3px solid #a8d5ba; /* ใใฉใผใซในใชใณใฐ */ box-shadow: 0 0 0 4px rgba(168,213,186,0.25);
๐งฉ UIใณใณใใผใใณใ
ๅๅฉ็จๅฏ่ฝใชใณใณใใผใใณใไธ่ฆงใใฏใชใใฏใใฆๅไฝใ็ขบ่ชใงใใพใใ
ใใใธ
โจ ๅนดๆซ่ชฟๆดใป็ตฆไธๆๅพๆง้ค
ไปคๅ7ๅนดๅ๏ผๆๆฐ๏ผ
Draft
ใใฟใณ
ใปใฐใกใณใใณใณใใญใผใซ๏ผๅนดๅบฆๅใๆฟใ็ญ๏ผ
html + css
<!-- ใปใฐใกใณใใณใณใใญใผใซ --> <div class="year-toggle"> <button class="year-btn" onclick="setYear(6)">ไปคๅ6ๅนดๅ</button> <button class="year-btn active" onclick="setYear(7)">ไปคๅ7ๅนดๅ๏ผๆๆฐ๏ผ</button> </div> .year-toggle { display: flex; gap: 8px; background: var(--mint-pale); padding: 5px; border-radius: 14px; } .year-btn { flex: 1; padding: 10px 8px; border: none; border-radius: 10px; cursor: pointer; transition: all 0.3s cubic-bezier(0.34,1.56,0.64,1); color: #7a9a8e; background: transparent; } .year-btn.active { background: var(--card-bg); color: var(--accent-deep); box-shadow: 0 2px 10px var(--shadow); transform: scale(1.02); }
็ตๆใซใผใ
็ตฆไธๆๅพๆง้ค้ก
1,292,000ๅ
ๅนดๅใฎ็ด 26.0% ใๆง้ค
็ตฆไธๆๅพๆง้คๅพใฎ็ตฆไธ็ญใฎ้้ก๏ผๆๅพ๏ผ
3,668,000ๅ
ใใผใใใใฏใน
๐ ไปคๅ7ๅนด๏ผ2025ๅนด๏ผๅ ๆๅพ็จๆณ ๅฅ่กจ็ฌฌไบใซๅบใฅใ่จ็ฎใงใใ
่จ็ฎๅผ๏ผ4,960,000ๅ ร 80% โ 440,000ๅ = 3,528,000ๅ
โก WarningInline โ ใคใณใฉใคใณ่ญฆๅใใใฏใน
่ฉไพก้กใๆ่ณ็ดฏ่จ้กใไธๅใฃใฆใใพใ๏ผๅซใฟๆใฎ็ถๆ
๏ผ
ๆฐNISAๆ ๏ผ1,800ไธๅ๏ผใฏใใงใซไฝฟใๅใฃใฆใใพใใๆฐ่ฆ็ฉ็ซใฏใงใใพใใใ
html + css
<!-- WarningInline --> <div class="ds-warning-inline"> <span class="wi-icon">โ </span> <span>่ฉไพก้กใๆ่ณ็ดฏ่จ้กใไธๅใฃใฆใใพใ</span> </div> .ds-warning-inline { display: flex; gap: 8px; padding: 10px 14px; background: rgba(224,122,58,0.08); border-left: 3px solid var(--warn-color); border-radius: 10px; font-size: 12px; color: var(--warn-color); line-height: 1.7; } /* ่กจ็คบๅใๆฟใใฏ .show ใฏใฉในใงๅถๅพก */ .ds-warning-inline { display: none; } .ds-warning-inline.show { display: flex; }
โ๏ธ ใใฉใผใ ๅ
ฅๅ
ๅ
ฅๅใใฉใผใ ใฎ3ใคใฎใขใผใ๏ผใใญในใใปในใฉใคใใผใปใฏใคใใฏใใฟใณ๏ผใฏๅไธใฎๅคใๅ
ฑๆใใพใใใใฌใผในใใซใใผใฏๆๅญ่ฒใปใตใคใบใจใใซๅ
ฅๅๅคใใๆงใใใซ่จญๅฎใใพใใ
ใใญในใๅ
ฅๅ๏ผๆฐๅญ๏ผ
ๅ
css
input[type="text"] { padding: 18px 64px 18px 22px; font-size: 22px; font-family: 'Roboto'; font-weight: 300; border: 2px solid var(--mint-light); border-radius: 16px; background: var(--mint-pale); transition: all 0.3s ease; } input::placeholder { color: #b8d4cc; /* ๅ ฅๅๅคใใๆ็ขบใซ่ใ */ font-weight: 300; font-size: 18px; /* ๅ ฅๅๅค(22px)ใใๅฐใใ */ } input:focus { border-color: var(--accent); background: var(--card-bg); box-shadow: 0 0 0 4px rgba(168,213,186,0.25); }
ในใฉใคใใผ
0500ไธ1,000ไธ1,500ไธ+
ใฏใคใใฏใใฟใณ
ใใไฝฟใใใๅนดๅ
โ InputStepper โ ยฑใใฟใณไปใในใฉใคใใผ
LIVE DEMO โ Fintechใขใใชใง้ ปๅบใฎใปใใ
ไธๅ / ๆ
html + css + js
<!-- InputStepper --> <div class="ds-val-row"> <input class="ds-num-edit" type="number" id="inMonthly" min="0" max="30" step="0.1" value="5"> <span class="ds-val-unit">ไธๅ</span> </div> <div class="ds-input-stepper"> <button class="ds-pm-btn" data-target="slMonthly" data-step="-0.1">๏ผ</button> <input class="ds-stepper-range" type="range" id="slMonthly" min="0" max="30" step="0.1" value="5"> <button class="ds-pm-btn" data-target="slMonthly" data-step="0.1">๏ผ</button> </div> /* JS: ในใฉใคใใผ่ๆฏใใชใขใซใฟใคใ ๆดๆฐ */ function updateStepperBg(sl) { const pct = ((sl.value - sl.min) / (sl.max - sl.min)) * 100; sl.style.setProperty('--pct', pct + '%'); }
โข SelectUnderline โ ใขใณใใผใฉใคใณในใฟใคใซใฎใปใฌใฏใ
LIVE DEMO โ ็ๅนดๆๆฅใปๅนดๆ้ธๆใฎๅฎ็ชในใฟใคใซ
ๅนด
ๆ
html + css
<!-- SelectUnderline โ ็ๅนดๆๆฅไพ --> <div class="ds-select-row"> <select class="ds-select-underline" id="dobYear"></select> <span class="ds-select-unit">ๅนด</span> <select class="ds-select-underline" id="dobMonth"></select> <span class="ds-select-unit">ๆ</span> </div> .ds-select-underline { font-size: clamp(1.4rem, 5vw, 1.8rem); font-weight: 300; border: none; border-bottom: 2px solid var(--mint-light); background: transparent; -webkit-appearance: none; appearance: none; padding: 0 4px 4px; transition: border-color .25s ease; } .ds-select-underline:focus { border-bottom-color: var(--accent-deep); outline: none; }
ใซใณใๅบๅใๅ
ฅๅ๏ผJS๏ผ
javascript
function onInputChange(el) { const pos = el.selectionStart; const oldLen = el.value.length; // ๆฐๅญไปฅๅคใ้คๅป const raw = el.value.replace(/[^0-9]/g, ''); const num = parseInt(raw) || 0; el.value = num ? num.toLocaleString('ja-JP') : ''; // ใซใผใฝใซไฝ็ฝฎ่ฃๆญฃ๏ผใซใณใๆฟๅ ฅๅใฎใใ๏ผ const diff = el.value.length - oldLen; el.setSelectionRange(pos + diff, pos + diff); }
โจ ใขใใกใผใทใงใณ
12็จฎ้กใฎใขใใกใผใทใงใณใไฝฟใๅใใUIๅ
จไฝใซใ็ใ็ฉๆใใไธใใพใใใฟใคใซใใฏใชใใฏใใฆใฉใคใ็ขบ่ชใงใใพใใ
ใคใผใธใณใฐ้ขๆฐ๏ผใฏใชใใฏใใฆๆฏ่ผ๏ผ
CLICK TO ANIMATE
ๆฐๅญใซใฆใณใใขใใ๏ผใฏใชใใฏใใฆ่ฉฆใ๏ผ
0
javascript
function animateNum(el, from, to, ms) { const t0 = performance.now(); function step(now) { const p = Math.min((now - t0) / ms, 1); const ease = 1 - Math.pow(1 - p, 4); // easeOutQuart el.textContent = Math.round(from + (to - from) * ease) .toLocaleString('ja-JP'); if (p < 1) requestAnimationFrame(step); } requestAnimationFrame(step); }
ๅ
จใขใใกใผใทใงใณไธ่ฆง
๐ ใคใณใฟใฉใฏใทใงใณ
ใฆใผใถใผใฎๆไฝใซๅฏพใใฆใ่คๆฐใฌใคใคใผใฎใใฃใผใใใใฏใ่ฟใใพใใใ่งฆใฃใฆๆฅฝใใใใๅฎ็พใใใใใฎ่จญ่จใงใใ
ใใฃใผใใใใฏ่จญ่จ
| ๆไฝ | ใใฃใผใใใใฏ |
|---|---|
| ๆฐๅญๅ ฅๅ | ใซใฆใณใใขใใ + ใใผใขใใกใผใทใงใณ + ใใผใใๆดๆฐ |
| ใฏใคใใฏใใฟใณ | ใใฟใณใใคใฉใคใ๏ผในใใชใณใฐ๏ผ+ ๆฐๅญๆดๆฐ |
| ๅนดๅใๅคงใใๅคๅ | ใณใณใใงใใใฃ + ใใผในใ้็ฅ |
| ๅนดๅบฆๅใๆฟใ | ใปใฐใกใณใๅใๆฟใ๏ผในใใชใณใฐ๏ผ+ ใใผในใ้็ฅ |
| ใซใผใใใใผ | 2pxๆตฎใไธใใ + ใฐใชใผใณๅฝฑๅผท่ชฟ |
| ใใผใธใญใผใ | ใใใใผ๏ผไธใใใใงใผใใคใณ โ ใซใผใ๏ผไธใใใใงใผใใคใณ๏ผ0.2s้ ๅปถ๏ผ |
ใณใณใใงใใใฃ๏ผใฏใชใใฏใใฆ่ฉฆใ๏ผ
ๅฎ้ใฎใขใใชใงใฏๅนดๅๅคๅใ20ไธๅ่ถ ใฎใจใใซ็บ็ซใใพใ
javascript
function fireConfetti() { const wrap = document.getElementById('confetti-wrap'); const colors = ['#a8d5ba','#4a8c6f','#d4ede3', '#e8f5f1','#7fc49e','#2d7a5a']; for (let i = 0; i < 50; i++) { const c = document.createElement('div'); c.style.cssText = ` position:absolute; left: ${10 + Math.random()*80}%; width: ${6 + Math.random()*8}px; height: ${6 + Math.random()*8}px; background: ${colors[Math.floor(Math.random()*colors.length)]}; border-radius: ${Math.random() > 0.5 ? '50%' : '2px'}; animation: confettiFall ${1.2+Math.random()*1.3}s linear forwards; `; wrap.appendChild(c); setTimeout(() => c.remove(), 3000); } }
ใใผในใ้็ฅ๏ผใฏใชใใฏใใฆ่ฉฆใ๏ผ
css + javascript
/* CSS */ .toast { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%) translateY(80px); background: var(--accent-deep); color: #fff; padding: 12px 28px; border-radius: 40px; opacity: 0; pointer-events: none; transition: transform 0.4s cubic-bezier(0.34,1.56,0.64,1), opacity 0.4s ease; } .toast.show { transform: translateX(-50%) translateY(0); opacity: 1; } /* JS */ let toastTimer; function showToast(msg) { const t = document.getElementById('toast'); t.textContent = msg; t.classList.add('show'); clearTimeout(toastTimer); toastTimer = setTimeout(() => t.classList.remove('show'), 2600); }
๐ Fintechใใฟใผใณ
่ณ็ฃ้็จใป้่ใทใใฅใฌใผใทใงใณ็ป้ขใง็นฐใ่ฟใไฝฟใใใUIใใฟใผใณใงใใSummaryGrid / StatCardใใทใใฅใฌใผใทใงใณๆฃใฐใฉใใใณใณใใผใใณใใจใใฆๅฎ็พฉใใพใใ
โฃ SummaryGrid / StatCard โ KPIใปใตใใชใผใฐใชใใ
LIVE DEMO โ 3ใซใฉใ ใฐใชใใ๏ผใขใใคใซใฏ2ใซใฉใ ๏ผ
65ๆญณๆใฎ่ณ็ฃ๏ผ29ๅนดๅพ๏ผ
4,106ไธๅ
ใใก้็จๅ็
2,306ไธๅ
ๆฐNISAๆ ไฝฟใๅใ
19ๅนด4ใถๆ็ฎ
54ๆญณ3ใถๆ
html + css
<!-- SummaryGrid / StatCard --> <div class="ds-summary-grid"> <!-- ใใคใฉใคใใซใผใ๏ผ1็ช็ฎใปๅผท่ชฟ่กจ็คบ๏ผ --> <div class="ds-stat-card highlight"> <div class="ds-stat-label">65ๆญณๆใฎ่ณ็ฃ</div> <div><span class="ds-stat-num">4,106</span><span class="ds-stat-unit">ไธๅ</span></div> </div> <!-- ้ๅธธใซใผใ --> <div class="ds-stat-card"> <div class="ds-stat-label">ใใก้็จๅ็</div> <div><span class="ds-stat-num">2,306</span><span class="ds-stat-unit">ไธๅ</span></div> </div> </div> .ds-summary-grid { display: grid; grid-template-columns: 1fr 1fr; /* ใขใใคใซ: 2ๅ */ gap: 12px; } @media (min-width: 480px) { .ds-summary-grid { grid-template-columns: repeat(3, 1fr); /* ใฟใใฌใใไปฅไธ: 3ๅ */ gap: 14px; } }
โค SimulationChart โ ็ฉ็ซใทใใฅใฌใผใทใงใณๆฃใฐใฉใ
LIVE DEMO โ ใใใผใงใใผใซใใใ่กจ็คบ๏ผ30ๅนดๅใใผใฟ๏ผ
ๅ
ๆฌ
้็จๅ็
โป ๆฐNISAๆ ๏ผ1,800ไธๅ๏ผๅฐ้ๅพใฏๆฐ่ฆ็ฉ็ซๅๆญขใป้็จใฎใฟ็ถ็ถ
javascript โ canvas ๆฃใฐใฉใๆ็ป
function renderSimChart(data, canvas) { const dpr = window.devicePixelRatio || 1; const cW = canvas.parentElement.clientWidth; const PAD = { t:14, r:14, b:42, l:64 }; const n = data.length; const plotW= cW - PAD.l - PAD.r; const BAR = Math.max(3, plotW/n - Math.max(1, plotW/n*0.28)); const GAP = Math.max(1, plotW/n - BAR); const ctx = canvas.getContext('2d'); const max = Math.max(...data.map(d => d.total)); data.forEach((d, i) => { const x = PAD.l + i * (BAR+GAP); const pH = 300 - PAD.t - PAD.b; const totalH = (d.total / max) * pH; const principH = (d.principal / max) * pH; // ๅ ๆฌ: --accent ctx.fillStyle = '#a8d5ba'; rRect(ctx, x, baseY-principH, BAR, principH, [0,0,4,4]); // ้็จๅ็: --accent-deep ctx.fillStyle = '#4a8c6f'; rRect(ctx, x, baseY-totalH, BAR, totalH-principH, [4,4,0,0]); }); }
๐ฑ ใขใใคใซใใกใผในใ
ใใฎใใถใคใณใทในใใ ใฏในใใใฆใผใถใผใๆๅชๅ
ใซ่จญ่จใใใฆใใพใใใฟใผใฒใใใงใใ30ไปฃๅฅณๆงใฎๅคใใใในใใใงๆฐ่ปฝใซ็ขบ่ชใใใใใใใขใใคใซไฝ้จใๅบๆบใซPCใธๆกๅผตใใๆฆ็ฅใใจใใพใใ
ใใฌใผใฏใใคใณใๅฎ็พฉ
BREAKPOINTS
css โ mobile-first
/* ใใผใน = ใขใใคใซ๏ผใ479px๏ผใซๆธใ */ .card { padding: 28px 20px; border-radius: 20px; } /* ใฟใใฌใใไปฅไธใซไธๆธใ */ @media (min-width: 480px) { .card { padding: 40px 36px; border-radius: 28px; } } /* PCไปฅไธใซใใใซไธๆธใ */ @media (min-width: 768px) { .container { max-width: 560px; } }
ใฟใใใฟใผใฒใใใตใคใบ
TOUCH TARGET โ ๆๅฐ44px ร 44px
css
/* Apple HIG / Google Material ๆจๅฅจ: ๆๅฐ 44ร44px */ /* โ ใฏใคใใฏใใฟใณ โ padding ใง้ซใใ็ขบไฟ */ .quick-btn { min-height: 44px; padding: 11px 20px; } /* โ ในใฉใคใใผใฎใคใพใฟ โ ๅๅใชๅฝใใๅคๅฎ */ input[type="range"]::-webkit-slider-thumb { width: 24px; height: 24px; /* ๅฎใตใคใบ */ /* ่ฆ่ฆใฏ24pxใงใใใฟใใ้ ๅใฏใใฉใฆใถใ44pxใซๆกๅผต */ } /* โ ๅ ฅๅใใฃใผใซใ โ ้ซใใๅๅใซ็ขบไฟ */ input[type="text"] { padding: 18px 64px 18px 22px; /* ็ธฆ56px็ธๅฝ */ }
ใขใใคใซใใฉใณใใตใคใบๆฆ็ฅ
FLUID TYPOGRAPHY โ clamp() ใใผใน
css
/* clamp(ๆๅฐ, ๆตๅๅค, ๆๅคง) ใง็ป้ขๅน ใซ่ชๅ่ฟฝๅพ */ h1 { font-size: clamp(20px, 5vw, 32px); } .result-val { font-size: clamp(22px, 6vw, 30px); } .input-num { font-size: clamp(18px, 5vw, 22px); } /* iOS ใบใผใ ้ฒๆญข: input ใฏ 16px ไปฅไธๅฟ ้ */ input { font-size: 16px; } /* 16pxๆชๆบใ ใจ่ชๅใบใผใ ใ็บ็ */ /* NG ไพ */ input { font-size: 14px; } /* โ iOS Safariใ่ชๅใบใผใ ใใฆใใพใ */
ใฌใคใขใฆใๅคๅ๏ผใขใใคใซ โ PC๏ผ
LAYOUT COMPARISON โ ใฏใชใใฏใงๅใๆฟใ
css โ ใฌใคใขใฆใๅคๅ
/* ใขใใคใซ๏ผใใผใน๏ผ */ .donut-wrap { flex-direction: column; } .result-value { font-size: 24px; } .card { border-radius: 20px; padding: 28px 20px; } .quick-btns { gap: 8px; } /* ใฟใใฌใใไปฅไธ (min-width: 480px) */ @media (min-width: 480px) { .donut-wrap { flex-direction: row; } .result-value { font-size: 30px; } .card { border-radius: 28px; padding: 40px 36px; } } /* PCใฌใคใขใฆใ: ใณใณใใๅน ใๅถ้ */ @media (min-width: 768px) { .container { max-width: 560px; margin: 36px auto; } }
ในใฏใญใผใซใปใฟใใๆ้ฉๅ
css + html
/* ใฟใใๆใฎใใคใฉใคใ้คๅป */ button, input, a { -webkit-tap-highlight-color: transparent; } /* ในใ ใผใบในใฏใญใผใซ */ html { scroll-behavior: smooth; } /* ๆฐๅญๅ ฅๅ: ใขใใคใซใญใผใใผใใใใณใญใผใซ */ <input type="text" inputmode="numeric" /> /* โ type="number" ใใ type="text" + inputmode="numeric" ใ ใซใณใๅบๅใ่กจ็คบใฎใใใซใใฟใผ */ /* overflow: hidden ใงๆจชในใฏใญใผใซ้ฒๆญข */ body { overflow-x: hidden; } /* ้ทๆผใใกใใฅใผๆๅถ๏ผUI่ฆ็ด ๏ผ */ .card, .result-item { -webkit-user-select: none; user-select: none; }
ใขใใคใซใใกใผในใๅฎ่ฃ
ใใงใใฏใชในใ
CHECKLIST
Safe Area๏ผใใใใปใใผใ ใใผๅฏพๅฟ๏ผ
html + css
<!-- viewport ใซ viewport-fit=cover ใ่ฟฝๅ --> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> /* Safe Area ๅฏพๅฟ: ใใใฟใผใปๅบๅฎ่ฆ็ด ใซ้ฉ็จ */ footer { padding-bottom: calc(40px + env(safe-area-inset-bottom)); } /* ใใผในใ้็ฅ โ ใใผใ ใใผใจ่ขซใใชใใใ */ .toast { bottom: calc(30px + env(safe-area-inset-bottom)); } /* ๅบๅฎใใ็ญใใใๅ ดๅ */ .fixed-nav { padding-top: env(safe-area-inset-top); }
๐ก ใใถใคใณๅๅ
ใใฎใใถใคใณใทในใใ ใ่ฒซใ10ใฎๅๅใๆฐใใๆฉ่ฝใปใณใณใใผใใณใใ่ฟฝๅ ใใ้ใฎๅคๆญๅบๆบใจใใฆไฝฟ็จใใฆใใ ใใใ
็ตตๆๅญๆดป็จใฌใคใ
STRATEGIC EMOJI USE
ๆณๅฎใฟใผใฒใใ
TARGET USER
๐ฉ 30ไปฃๅฅณๆงใปไผ็คพๅก
๐ญ ใ้ใป็จ้ใ่ฆๆ
๐ฑ ในใใใงๆฐ่ปฝใซ็ขบ่ช
โฐ ๅนดๆซ่ชฟๆดใทใผใบใณใซไฝฟ็จ
๐ญ ใ้ใป็จ้ใ่ฆๆ
๐ฑ ในใใใงๆฐ่ปฝใซ็ขบ่ช
โฐ ๅนดๆซ่ชฟๆดใทใผใบใณใซไฝฟ็จ
DESIGN MISSION
โ
้ฃใใใชใ
โ ๆใใชใ
โ ่งฆใฃใฆใใฆๆฅฝใใ
โ ๆฏๆฅ่ฆใใใชใ
โ ๆใใชใ
โ ่งฆใฃใฆใใฆๆฅฝใใ
โ ๆฏๆฅ่ฆใใใชใ