-
Star
(182)
You must be signed in to star a gist -
Fork
(247)
You must be signed in to fork a gist
-
-
Save isdaviddong/23cc140c1780828b44f79397f737b95e to your computer and use it in GitHub Desktop.
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <title></title> | |
| <meta charset="utf-8" /> | |
| <script src="Scripts/jquery-1.9.1.min.js"></script> | |
| <link href="Content/bootstrap.min.css" rel="stylesheet" /> | |
| <script src="Scripts/isRockFx.js"></script> | |
| <script> | |
| $(function () { | |
| $('#ButtonCal').click( | |
| function () { | |
| //取得用戶輸入的參數 | |
| var para = { 'height': $('#txbHeight').val(), 'weight': $('#txbWeight').val() }; | |
| //呼叫API | |
| ExecuteAPI('Example', 'BMI', para, | |
| //呼叫WebAPI成功時運行的Call Back Function | |
| function (result) { | |
| alert(result.Data); | |
| } | |
| ); | |
| } | |
| ); | |
| }); | |
| </script> | |
| </head> | |
| <body> | |
| <div class="row" style="margin:10px"> | |
| <div class="col-md-12"> | |
| <div class="form-group"> | |
| 身高: | |
| <input id="txbHeight" class="form-control" placeholder="請輸入身高" /> | |
| 體重: | |
| <input id="txbWeight" class="form-control" placeholder="請輸入體重" /> | |
| <br /> | |
| <button class="btn btn-primary" id="ButtonCal">計算</button> | |
| </div> | |
| </div> | |
| </div> | |
| </body> | |
| </html> |
nival_web_pro/
├── index.html
├── app.html
├── style.css
├── scripts.js
│
├── assets/
│
├── android/
│ ├── MainActivity.java
│ ├── AndroidManifest.xml
│ └── assets/index.html
│
└── vercel/
nival_web_pro/
├── index.html
├── app.html
├── style.css
├── scripts.js
│
├── assets/
│
├── android/
│ ├── MainActivity.java
│ ├── AndroidManifest.xml
│ └── assets/index.html
│
└── vercel/
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
}
header {
background: rgba(0, 0, 0, 0.9);
color: white;
padding: 1rem 0;
position: fixed;
width: 100%;
top: 0;
z-index: 1000;
}
nav {
max-width: 1200px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 2rem;
}
.logo {
font-size: 1.8rem;
font-weight: bold;
color: #ff6b6b;
}
.nav-links {
display: flex;
gap: 2rem;
}
.nav-links a {
color: white;
text-decoration: none;
font-weight: 500;
}
.hero {
height: 100vh;
background: linear-gradient(rgba(0,0,0,0.7), rgba(0,0,0,0.7)), url('https://picsum.photos/id/1015/2000/1200') center/cover no-repeat;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: white;
margin-top: 60px;
}
.hero-content {
max-width: 800px;
padding: 2rem;
}
.hero h1 {
font-size: 4rem;
margin-bottom: 1rem;
color: #ff6b6b;
}
.hero p {
font-size: 1.4rem;
margin-bottom: 2rem;
}
.cta-button {
background: #ff6b6b;
color: white;
padding: 15px 40px;
border: none;
border-radius: 50px;
font-size: 1.2rem;
cursor: pointer;
transition: all 0.3s;
}
.cta-button:hover {
background: #ff5252;
transform: scale(1.05);
}
section {
padding: 5rem 0;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 2rem;
}
h2 {
text-align: center;
font-size: 2.8rem;
margin-bottom: 3rem;
color: #2c3e50;
}
.about {
background: white;
}
.about-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
.about-img {
border-radius: 15px;
box-shadow: 0 20px 40px rgba(0,0,0,0.1);
}
.pricing {
background: #f8f9fa;
}
.pricing-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 2rem;
}
.price-card {
background: white;
border-radius: 20px;
padding: 2.5rem;
box-shadow: 0 15px 35px rgba(0,0,0,0.1);
transition: transform 0.3s;
text-align: center;
}
.price-card:hover {
transform: translateY(-15px);
}
.price-card.mid {
border: 3px solid #ff6b6b;
}
.price-card.vip {
border: 3px solid #ffd700;
}
.price {
font-size: 3rem;
font-weight: bold;
color: #ff6b6b;
margin: 1rem 0;
}
.features {
list-style: none;
margin: 2rem 0;
text-align: left;
}
.features li {
padding: 10px 0;
border-bottom: 1px solid #eee;
}
.features li:last-child {
border-bottom: none;
}
.book-btn {
background: #2c3e50;
color: white;
width: 100%;
padding: 15px;
border: none;
border-radius: 50px;
font-size: 1.1rem;
cursor: pointer;
margin-top: 1.5rem;
}
footer {
background: #2c3e50;
color: white;
text-align: center;
padding: 3rem 0;
}
.form-section {
max-width: 600px;
margin: 0 auto;
background: white;
padding: 3rem;
border-radius: 20px;
box-shadow: 0 15px 35px rgba(0,0,0,0.1);
}
input, textarea {
width: 100%;
padding: 12px;
margin: 10px 0;
border: 1px solid #ddd;
border-radius: 8px;
}
@media (max-width: 768px) {
.about-content {
grid-template-columns: 1fr;
}
.hero h1 {
font-size: 2.8rem;
}
}
</style>
<section class="hero">
<div class="hero-content">
<h1>Meet Alex Rivera</h1>
<p>Exclusive Meet & Greet Experiences</p>
<p style="font-size: 1.1rem; opacity: 0.9;">Create unforgettable memories with your favorite creator</p>
<button class="cta-button" onclick="document.getElementById('book').scrollIntoView({behavior: 'smooth'})">
Reserve Your Spot
</button>
</div>
</section>
<section class="about" id="about">
<div class="container">
<h2>About the Experience</h2>
<div class="about-content">
<div>
<h3 style="margin-bottom: 1.5rem; color: #ff6b6b;">What to Expect</h3>
<p style="font-size: 1.1rem; margin-bottom: 1.5rem;">
Join me for an intimate meet and greet where we can chat, take photos, and create amazing memories together.
</p>
<ul style="font-size: 1.1rem; line-height: 2;">
<li>✅ Personalized conversation</li>
<li>✅ Professional photos</li>
<li>✅ Autographed memorabilia</li>
<li>✅ Limited edition keepsakes</li>
</ul>
</div>
<img src="https://picsum.photos/id/64/600/400" alt="Alex Rivera" class="about-img" style="width:100%;">
</div>
</div>
</section>
<section class="pricing" id="pricing">
<div class="container">
<h2>Access Pricing</h2>
<div class="pricing-grid">
<!-- Mid Tier -->
<div class="price-card mid">
<h3>MID TIER</h3>
<div class="price">$500</div>
<p>Standard Meet & Greet</p>
<ul class="features">
<li>15-minute private meet</li>
<li>2 professional photos</li>
<li>Autographed photo</li>
<li>Digital thank you video</li>
</ul>
<button class="book-btn" onclick="alert('Redirecting to booking for $500 Mid Tier...')">Book Mid Tier</button>
</div>
<!-- High/VIP Tier -->
<div class="price-card vip">
<h3>VIP TIER</h3>
<div class="price">$850</div>
<p>Premium Experience</p>
<ul class="features">
<li>30-minute private session</li>
<li>Unlimited photos</li>
<li>Personalized video message</li>
<li>Exclusive merchandise</li>
<li>Priority access</li>
</ul>
<button class="book-btn" onclick="alert('Redirecting to booking for $850 VIP Tier...')">Book VIP Tier</button>
</div>
</div>
<p style="text-align: center; margin-top: 3rem; font-size: 1.1rem; color: #666;">
All prices start from $500 and go upwards. Custom packages available upon request.
</p>
</div>
</section>
<section id="book" style="background: white;">
<div class="container">
<h2>Book Your Meet & Greet</h2>
<div class="form-section">
<form onsubmit="handleSubmit(event)">
<input type="text" placeholder="Your Full Name" required>
<input type="email" placeholder="Email Address" required>
<input type="tel" placeholder="Phone Number">
<select style="width:100%; padding:12px; margin:10px 0; border:1px solid #ddd; border-radius:8px;">
<option value="">Select Package</option>
<option value="mid">$500 - Mid Tier</option>
<option value="vip">$850 - VIP Tier</option>
<option value="custom">Custom Request</option>
</select>
<textarea placeholder="Tell me what you'd like to talk about or any special requests..." rows="5"></textarea>
<button type="submit" class="cta-button" style="width:100%; margin-top:1rem;">Submit Booking Request</button>
</form>
</div>
</div>
</section>
<footer>
<div class="container">
<p>© 2026 Alex Rivera • Exclusive Meet & Greet Experiences</p>
<p style="margin-top: 1rem; opacity: 0.8;">All rights reserved • Prices from $500 upwards</p>
</div>
</footer>
<script>
function handleSubmit(e) {
e.preventDefault();
alert("Thank you! Your meet & greet request has been received. We'll contact you within 24 hours.");
e.target.reset();
}
// Smooth scrolling for nav links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) target.scrollIntoView({ behavior: 'smooth' });
});
});
</script>
index.html
<div class="title">
<h1>🕵️♂️ مهمة المحقق العربي</h1>
<p>
اجمع الأدلة من الدول العربية واكتشف حروف المد السرية!
</p>
</div>
<div class="detective">🔍</div>
<div class="game-board">
<!-- مصر -->
<div class="card">
<div class="flag">🇪🇬</div>
<div class="country">مصر</div>
<div class="clue">
الدليل: كلمة "قَالَ"<br>
ما حرف المد الموجود؟
</div>
<input type="text" id="egypt">
<button onclick="checkAnswer('egypt','الألف','msg1')">
كشف الدليل
</button>
<div class="message" id="msg1"></div>
</div>
<!-- السعودية -->
<div class="card">
<div class="flag">🇸🇦</div>
<div class="country">السعودية</div>
<div class="clue">
الدليل: كلمة "يَقُولُ"<br>
ما حرف المد الموجود؟
</div>
<input type="text" id="saudi">
<button onclick="checkAnswer('saudi','الواو','msg2')">
كشف الدليل
</button>
<div class="message" id="msg2"></div>
</div>
<!-- المغرب -->
<div class="card">
<div class="flag">🇲🇦</div>
<div class="country">المغرب</div>
<div class="clue">
الدليل: كلمة "كَبِير"<br>
ما حرف المد الموجود؟
</div>
<input type="text" id="morocco">
<button onclick="checkAnswer('morocco','الياء','msg3')">
كشف الدليل
</button>
<div class="message" id="msg3"></div>
</div>
<!-- الإمارات -->
<div class="card">
<div class="flag">🇦🇪</div>
<div class="country">الإمارات</div>
<div class="clue">
الدليل: كلمة "نُور"<br>
ما حرف المد الموجود؟
</div>
<input type="text" id="uae">
<button onclick="checkAnswer('uae','الواو','msg4')">
كشف الدليل
</button>
<div class="message" id="msg4"></div>
</div>
<!-- الأردن -->
<div class="card">
<div class="flag">🇯🇴</div>
<div class="country">الأردن</div>
<div class="clue">
الدليل: كلمة "سَمَاء"<br>
ما حرف المد الموجود؟
</div>
<input type="text" id="jordan">
<button onclick="checkAnswer('jordan','الألف','msg5')">
كشف الدليل
</button>
<div class="message" id="msg5"></div>
</div>
</div>
يمكنك نسخ الكود وتشغيله مباشرة داخل ملف باسم
index.html
وفتحه في المتصفح وستظهر اللعبة التفاعلية كاملة بألوان جذابة وحركات ممتعة للأطفال ✨
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
margin: 0;
padding: 0;
padding-bottom: 60px; /* لمساحة القائمة السفلية */
}
/* الهيدر العلوي */
header {
background-color: #0b1723;
padding: 15px 20px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2px solid #1c354e;
position: sticky;
top: 0;
z-index: 100;
}
.logo {
font-size: 1.6rem;
font-weight: bold;
color: var(--accent-color);
text-transform: uppercase;
}
.logo span {
color: var(--yellow-gold);
}
.balance-box {
background: #1c354e;
padding: 8px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 0.9rem;
border: 1px solid var(--accent-color);
}
/* الحاوية الرئيسية */
.container {
padding: 15px;
max-width: 600px;
margin: 0 auto;
}
/* البانر الترويجي */
.promo-banner {
background: linear-gradient(135deg, #1d3855, #0d47a1);
border-radius: 12px;
padding: 20px;
margin-bottom: 20px;
text-align: center;
border-left: 5px solid var(--yellow-gold);
}
.promo-banner h2 {
margin: 0 0 10px 0;
color: var(--yellow-gold);
}
/* الأقسام السريعة */
.categories {
display: flex;
gap: 10px;
margin-bottom: 20px;
overflow-x: auto;
padding-bottom: 5px;
}
.cat-btn {
background: var(--card-color);
color: white;
border: none;
padding: 10px 20px;
border-radius: 8px;
white-space: nowrap;
cursor: pointer;
font-weight: bold;
}
.cat-btn.active {
background: var(--accent-color);
color: #000;
}
/* مباريات مباشرة */
.section-title {
font-size: 1.2rem;
margin-bottom: 12px;
display: flex;
justify-content: space-between;
align-items: center;
}
.live-dot {
width: 10px;
height: 10px;
background-color: red;
border-radius: 50%;
display: inline-block;
animation: blink 1s infinite;
}
@keyframes blink {
50% { opacity: 0; }
}
.match-card {
background: var(--card-color);
border-radius: 12px;
padding: 15px;
margin-bottom: 15px;
box-shadow: 0 4px 10px rgba(0,0,0,0.3);
}
.match-header {
display: flex;
justify-content: space-between;
color: var(--text-muted);
font-size: 0.85rem;
margin-bottom: 10px;
}
.teams {
font-size: 1.1rem;
font-weight: bold;
margin-bottom: 15px;
}
.odds-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 10px;
}
.odds-btn {
background: #233e5b;
border: 1px solid #2d4f74;
color: white;
padding: 10px;
border-radius: 8px;
cursor: pointer;
text-align: center;
transition: all 0.2s;
}
.odds-btn:hover {
border-color: var(--accent-color);
}
.odds-btn span {
display: block;
font-size: 0.75rem;
color: var(--text-muted);
}
.odds-btn strong {
color: var(--accent-color);
font-size: 1.1rem;
}
/* الألعاب والكازينو (مثل Crash / Aviator) */
.games-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
}
.game-card {
background: linear-gradient(45deg, #1e3c5a, #254d75);
height: 120px;
border-radius: 12px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 1.2rem;
font-weight: bold;
cursor: pointer;
border: 1px solid #315f8e;
position: relative;
overflow: hidden;
}
.game-card::after {
content: 'العب الآن';
position: absolute;
bottom: 10px;
font-size: 0.75rem;
background: var(--yellow-gold);
color: black;
padding: 2px 10px;
border-radius: 10px;
}
/* تذكرة الرهان السفلية المتنقلة */
.bet-slip-bar {
position: fixed;
bottom: 60px;
left: 0;
right: 0;
background: var(--yellow-gold);
color: black;
padding: 10px 20px;
text-align: center;
font-weight: bold;
cursor: pointer;
display: none; /* تظهر عند اختيار رهان */
justify-content: space-between;
align-items: center;
box-shadow: 0 -5px 15px rgba(0,0,0,0.4);
}
/* شريط التنقل السفلي الثابت */
.bottom-nav {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 60px;
background: #0b1723;
display: flex;
justify-content: space-around;
align-items: center;
border-top: 1px solid #1c354e;
z-index: 100;
}
.nav-item {
color: var(--text-muted);
text-decoration: none;
font-size: 0.8rem;
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
}
.nav-item.active {
color: var(--accent-color);
}
.nav-item i {
font-size: 1.3rem;
margin-bottom: 3px;
}
</style>
<header>
<div class="logo">Spanyouli <span>Bet</span></div>
<div class="balance-box">الحساب: 150.00 د.ج</div>
</header>
<div class="container">
<div class="promo-banner">
<h2>مكافأة ترحيبية 200%! 🔥</h2>
<p>ضاعف إيداعك الأول فوراً مع كود الخصم <strong>SPANYOULI</strong></p>
</div>
<div class="categories">
<button class="cat-btn active" onclick="switchTab('sports')">⚽ الرياضة</button>
<button class="cat-btn" onclick="switchTab('games')">🎰 الألعاب والكازينو</button>
<button class="cat-btn">📺 مباشر الآن</button>
</div>
<div id="sports-section">
<div class="section-title">
<span>مباريات حية ومباشرة</span>
<span class="live-dot"></span>
</div>
<div class="match-card">
<div class="match-header">
<span>دوري أبطال أوروبا • دقيقة '65</span>
<span style="color: var(--accent-color);">مباشر</span>
</div>
<div class="teams">ريال مدريد 2 - 1 مانشستر سيتي</div>
<div class="odds-container">
<button class="odds-btn" onclick="placeBet('ريال مدريد', 1.85)">
<span>فوز 1</span>
<strong>1.85</strong>
</button>
<button class="odds-btn" onclick="placeBet('تعادل', 3.40)">
<span>تعادل X</span>
<strong>3.40</strong>
</button>
<button class="odds-btn" onclick="placeBet('مانشستر سيتي', 4.20)">
<span>فوز 2</span>
<strong>4.20</strong>
</button>
</div>
</div>
<div class="match-card">
<div class="match-header">
<span>الدوري الإسباني • دقيقة '23</span>
<span style="color: var(--accent-color);">مباشر</span>
</div>
<div class="teams">برشلونة 0 - 0 أتلتيكو مدريد</div>
<div class="odds-container">
<button class="odds-btn" onclick="placeBet('برشلونة', 2.10)">
<span>فوز 1</span>
<strong>2.10</strong>
</button>
<button class="odds-btn" onclick="placeBet('تعادل', 2.90)">
<span>تعادل X</span>
<strong>2.90</strong>
</button>
<button class="odds-btn" onclick="placeBet('أتلتيكو مدريد', 3.10)">
<span>فوز 2</span>
<strong>3.10</strong>
</button>
</div>
</div>
</div>
<div id="games-section" style="display: none;">
<div class="section-title">ألعاب Spanyouli الحصرية</div>
<div class="games-grid">
<div class="game-card" style="background: linear-gradient(135deg, #f50057, #ff1744);" onclick="playGame('Crash')">
🚀 Crash / Aviator
</div>
<div class="game-card" style="background: linear-gradient(135deg, #3d5afe, #1a237e);" onclick="playGame('Under over 7')">
🎲 Under/Over 7
</div>
<div class="game-card" style="background: linear-gradient(135deg, #00b0ff, #006064);" onclick="playGame('الخلايا السحرية')">
💎 Apple of Fortune
</div>
<div class="game-card" style="background: linear-gradient(135deg, #ff9100, #ff6d00);" onclick="playGame('العجلة الدوارة')">
🎡 Wheel of Fortune
</div>
</div>
</div>
</div>
<div class="bet-slip-bar" id="betSlip" onclick="confirmBet()">
<span id="betDetails">تم اختيار رهان بقيمة...</span>
<span>تأكيد الرهان 💸</span>
</div>
<nav class="bottom-nav">
<div class="nav-item active" onclick="switchTab('sports')">
<i>⚽</i>
<span>الرياضة</span>
</div>
<div class="nav-item" onclick="switchTab('games')">
<i>🎰</i>
<span>الكازينو</span>
</div>
<div class="nav-item" onclick="alert('قسم المحفظة والإيداع')">
<i>💳</i>
<span>المحفظة</span>
</div>
<div class="nav-item" onclick="alert('حسابي الشخصي')">
<i>👤</i>
<span>الملف</span>
</div>
</nav>
<script>
// دالة التنقل بين الأقسام (رياضة أو ألعاب)
function switchTab(tab) {
const sportsSec = document.getElementById('sports-section');
const gamesSec = document.getElementById('games-section');
const navItems = document.querySelectorAll('.nav-item');
const catBtns = document.querySelectorAll('.cat-btn');
if(tab === 'sports') {
sportsSec.style.display = 'block';
gamesSec.style.display = 'none';
navItems[0].classList.add('active');
navItems[1].classList.remove('active');
catBtns[0].classList.add('active');
catBtns[1].classList.remove('active');
} else {
sportsSec.style.display = 'none';
gamesSec.style.display = 'block';
navItems[0].classList.remove('active');
navItems[1].classList.add('active');
catBtns[0].classList.remove('active');
catBtns[1].classList.add('active');
}
}
// دالة اختيار الرهان الرياضي
let currentOdd = 0;
let currentTeam = "";
function placeBet(team, odd) {
currentOdd = odd;
currentTeam = team;
const slip = document.getElementById('betSlip');
const details = document.getElementById('betDetails');
details.innerText = `الرهان على [${team}] بمعدل ربح (${odd})`;
slip.style.display = 'flex';
}
function confirmBet() {
let amount = prompt(`أدخل مبلغ الرهان لـ ${currentTeam} (معدل الربح: ${currentOdd}):`, "100");
if (amount) {
alert(`تم تسجيل رهانك بنجاح بقيمة ${amount} د.ج! \nالربح المتوقع في حال الفوز: ${parseFloat(amount) * currentOdd} د.ج`);
document.getElementById('betSlip').style.display = 'none';
}
}
// دالة تشغيل الألعاب
function playGame(gameName) {
alert(`جاري تحميل لعبة ${gameName}... \n(ملاحظة: تحتاج هذه اللعبة لربطها بخادم بقاعدة بيانات لتشغيل محاكي الحظ الفعلي)`);
}
</script>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
margin: 0;
padding: 0;
padding-bottom: 60px; /* لمساحة القائمة السفلية */
}
/* الهيدر العلوي */
header {
background-color: #0b1723;
padding: 15px 20px;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2px solid #1c354e;
position: sticky;
top: 0;
z-index: 100;
}
.logo {
font-size: 1.6rem;
font-weight: bold;
color: var(--accent-color);
text-transform: uppercase;
}
.logo span {
color: var(--yellow-gold);
}
.balance-box {
background: #1c354e;
padding: 8px 15px;
border-radius: 20px;
font-weight: bold;
font-size: 0.9rem;
border: 1px solid var(--accent-color);
}
/* الحاوية الرئيسية */
.container {
padding: 15px;
max-width: 600px;
margin: 0 auto;
}
/* البانر الترويجي */
.promo-banner {
background: linear-gradient(135deg, #1d3855, #0d47a1);
border-radius: 12px;
padding: 20px;
margin-bottom: 20px;
text-align: center;
border-left: 5px solid var(--yellow-gold);
}
.promo-banner h2 {
margin: 0 0 10px 0;
color: var(--yellow-gold);
}
/* الأقسام السريعة */
.categories {
display: flex;
gap: 10px;
margin-bottom: 20px;
overflow-x: auto;
padding-bottom: 5px;
}
.cat-btn {
background: var(--card-color);
color: white;
border: none;
padding: 10px 20px;
border-radius: 8px;
white-space: nowrap;
cursor: pointer;
font-weight: bold;
}
.cat-btn.active {
background: var(--accent-color);
color: #000;
}
/* مباريات مباشرة */
.section-title {
font-size: 1.2rem;
margin-bottom: 12px;
display: flex;
justify-content: space-between;
align-items: center;
}
.live-dot {
width: 10px;
height: 10px;
background-color: red;
border-radius: 50%;
display: inline-block;
animation: blink 1s infinite;
}
@keyframes blink {
50% { opacity: 0; }
}
.match-card {
background: var(--card-color);
border-radius: 12px;
padding: 15px;
margin-bottom: 15px;
box-shadow: 0 4px 10px rgba(0,0,0,0.3);
}
.match-header {
display: flex;
justify-content: space-between;
color: var(--text-muted);
font-size: 0.85rem;
margin-bottom: 10px;
}
.teams {
font-size: 1.1rem;
font-weight: bold;
margin-bottom: 15px;
}
.odds-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 10px;
}
.odds-btn {
background: #233e5b;
border: 1px solid #2d4f74;
color: white;
padding: 10px;
border-radius: 8px;
cursor: pointer;
text-align: center;
transition: all 0.2s;
}
.odds-btn:hover {
border-color: var(--accent-color);
}
.odds-btn span {
display: block;
font-size: 0.75rem;
color: var(--text-muted);
}
.odds-btn strong {
color: var(--accent-color);
font-size: 1.1rem;
}
/* الألعاب والكازينو (مثل Crash / Aviator) */
.games-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
}
.game-card {
background: linear-gradient(45deg, #1e3c5a, #254d75);
height: 120px;
border-radius: 12px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 1.2rem;
font-weight: bold;
cursor: pointer;
border: 1px solid #315f8e;
position: relative;
overflow: hidden;
}
.game-card::after {
content: 'العب الآن';
position: absolute;
bottom: 10px;
font-size: 0.75rem;
background: var(--yellow-gold);
color: black;
padding: 2px 10px;
border-radius: 10px;
}
/* تذكرة الرهان السفلية المتنقلة */
.bet-slip-bar {
position: fixed;
bottom: 60px;
left: 0;
right: 0;
background: var(--yellow-gold);
color: black;
padding: 10px 20px;
text-align: center;
font-weight: bold;
cursor: pointer;
display: none; /* تظهر عند اختيار رهان */
justify-content: space-between;
align-items: center;
box-shadow: 0 -5px 15px rgba(0,0,0,0.4);
}
/* شريط التنقل السفلي الثابت */
.bottom-nav {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 60px;
background: #0b1723;
display: flex;
justify-content: space-around;
align-items: center;
border-top: 1px solid #1c354e;
z-index: 100;
}
.nav-item {
color: var(--text-muted);
text-decoration: none;
font-size: 0.8rem;
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
}
.nav-item.active {
color: var(--accent-color);
}
.nav-item i {
font-size: 1.3rem;
margin-bottom: 3px;
}
</style>
<header>
<div class="logo">Spanyouli <span>Bet</span></div>
<div class="balance-box">الحساب: 150.00 د.ج</div>
</header>
<div class="container">
<div class="promo-banner">
<h2>مكافأة ترحيبية 200%! 🔥</h2>
<p>ضاعف إيداعك الأول فوراً مع كود الخصم <strong>SPANYOULI</strong></p>
</div>
<div class="categories">
<button class="cat-btn active" onclick="switchTab('sports')">⚽ الرياضة</button>
<button class="cat-btn" onclick="switchTab('games')">🎰 الألعاب والكازينو</button>
<button class="cat-btn">📺 مباشر الآن</button>
</div>
<div id="sports-section">
<div class="section-title">
<span>مباريات حية ومباشرة</span>
<span class="live-dot"></span>
</div>
<div class="match-card">
<div class="match-header">
<span>دوري أبطال أوروبا • دقيقة '65</span>
<span style="color: var(--accent-color);">مباشر</span>
</div>
<div class="teams">ريال مدريد 2 - 1 مانشستر سيتي</div>
<div class="odds-container">
<button class="odds-btn" onclick="placeBet('ريال مدريد', 1.85)">
<span>فوز 1</span>
<strong>1.85</strong>
</button>
<button class="odds-btn" onclick="placeBet('تعادل', 3.40)">
<span>تعادل X</span>
<strong>3.40</strong>
</button>
<button class="odds-btn" onclick="placeBet('مانشستر سيتي', 4.20)">
<span>فوز 2</span>
<strong>4.20</strong>
</button>
</div>
</div>
<div class="match-card">
<div class="match-header">
<span>الدوري الإسباني • دقيقة '23</span>
<span style="color: var(--accent-color);">مباشر</span>
</div>
<div class="teams">برشلونة 0 - 0 أتلتيكو مدريد</div>
<div class="odds-container">
<button class="odds-btn" onclick="placeBet('برشلونة', 2.10)">
<span>فوز 1</span>
<strong>2.10</strong>
</button>
<button class="odds-btn" onclick="placeBet('تعادل', 2.90)">
<span>تعادل X</span>
<strong>2.90</strong>
</button>
<button class="odds-btn" onclick="placeBet('أتلتيكو مدريد', 3.10)">
<span>فوز 2</span>
<strong>3.10</strong>
</button>
</div>
</div>
</div>
<div id="games-section" style="display: none;">
<div class="section-title">ألعاب Spanyouli الحصرية</div>
<div class="games-grid">
<div class="game-card" style="background: linear-gradient(135deg, #f50057, #ff1744);" onclick="playGame('Crash')">
🚀 Crash / Aviator
</div>
<div class="game-card" style="background: linear-gradient(135deg, #3d5afe, #1a237e);" onclick="playGame('Under over 7')">
🎲 Under/Over 7
</div>
<div class="game-card" style="background: linear-gradient(135deg, #00b0ff, #006064);" onclick="playGame('الخلايا السحرية')">
💎 Apple of Fortune
</div>
<div class="game-card" style="background: linear-gradient(135deg, #ff9100, #ff6d00);" onclick="playGame('العجلة الدوارة')">
🎡 Wheel of Fortune
</div>
</div>
</div>
</div>
<div class="bet-slip-bar" id="betSlip" onclick="confirmBet()">
<span id="betDetails">تم اختيار رهان بقيمة...</span>
<span>تأكيد الرهان 💸</span>
</div>
<nav class="bottom-nav">
<div class="nav-item active" onclick="switchTab('sports')">
<i>⚽</i>
<span>الرياضة</span>
</div>
<div class="nav-item" onclick="switchTab('games')">
<i>🎰</i>
<span>الكازينو</span>
</div>
<div class="nav-item" onclick="alert('قسم المحفظة والإيداع')">
<i>💳</i>
<span>المحفظة</span>
</div>
<div class="nav-item" onclick="alert('حسابي الشخصي')">
<i>👤</i>
<span>الملف</span>
</div>
</nav>
<script>
// دالة التنقل بين الأقسام (رياضة أو ألعاب)
function switchTab(tab) {
const sportsSec = document.getElementById('sports-section');
const gamesSec = document.getElementById('games-section');
const navItems = document.querySelectorAll('.nav-item');
const catBtns = document.querySelectorAll('.cat-btn');
if(tab === 'sports') {
sportsSec.style.display = 'block';
gamesSec.style.display = 'none';
navItems[0].classList.add('active');
navItems[1].classList.remove('active');
catBtns[0].classList.add('active');
catBtns[1].classList.remove('active');
} else {
sportsSec.style.display = 'none';
gamesSec.style.display = 'block';
navItems[0].classList.remove('active');
navItems[1].classList.add('active');
catBtns[0].classList.remove('active');
catBtns[1].classList.add('active');
}
}
// دالة اختيار الرهان الرياضي
let currentOdd = 0;
let currentTeam = "";
function placeBet(team, odd) {
currentOdd = odd;
currentTeam = team;
const slip = document.getElementById('betSlip');
const details = document.getElementById('betDetails');
details.innerText = `الرهان على [${team}] بمعدل ربح (${odd})`;
slip.style.display = 'flex';
}
function confirmBet() {
let amount = prompt(`أدخل مبلغ الرهان لـ ${currentTeam} (معدل الربح: ${currentOdd}):`, "100");
if (amount) {
alert(`تم تسجيل رهانك بنجاح بقيمة ${amount} د.ج! \nالربح المتوقع في حال الفوز: ${parseFloat(amount) * currentOdd} د.ج`);
document.getElementById('betSlip').style.display = 'none';
}
}
// دالة تشغيل الألعاب
function playGame(gameName) {
alert(`جاري تحميل لعبة ${gameName}... \n(ملاحظة: تحتاج هذه اللعبة لربطها بخادم بقاعدة بيانات لتشغيل محاكي الحظ الفعلي)`);
}
</script>
💖 Para Minha Dama 💖
Oi, Dama.
Esta página foi feita especialmente para você. Cada resposta sua será um presente para mim. ❤️
💌 Carta Final 💌
Dama,
Talvez eu não encontre sempre as palavras certas. Mas quero que você saiba que você é uma pessoa muito especial para mim.
Obrigado por cada conversa, cada sorriso e cada momento compartilhado.
Com carinho,
C ❤️
<button onclick="baix
मेसर्स धर्मराज ट्रेडिंग कंपनी
खाद, बीज एवं दवाई के थोक एवं खुदरा विक्रेता
किसानों की सेवा में सदैव तत्पर
उत्तम गुणवत्ता • उचित मूल्य • बेहतर सेवा
हमारे बारे में
मेसर्स धर्मराज ट्रेडिंग कंपनी किसानों के लिए खाद, बीज, कीटनाशक एवं कृषि दवाइयों की विश्वसनीय दुकान है। हम गुणवत्तापूर्ण उत्पाद एवं बेहतर सेवा प्रदान करते हैं।
हमारी सेवाएं
हमारी विशेषताएं
✅ उत्तम गुणवत्ता हमारी पहचान
✅ उचित मूल्य हमारी जिम्मेदारी
✅ किसानों की सेवा हमारा संकल्प
✅ बेहतर सेवा हमारा वादा
संपर्क करें
प्रो. मनीष कुमार
📞 Mobile: 9155725163
📱 WhatsApp: 9155725163, 8757188176
📧 Email: Manishkumarptg2@gmail.com
📍 Address: S.V.K Girl High School Road
मेसर्स धर्मराज ट्रेडिंग कंपनी
© 2026 All Rights Reserved
मेसर्स धर्मराज ट्रेडिंग कंपनी
खाद, बीज एवं दवाई के थोक एवं खुदरा विक्रेता
किसानों की सेवा में सदैव तत्पर
उत्तम गुणवत्ता • उचित मूल्य • बेहतर सेवा
हमारे बारे में
मेसर्स धर्मराज ट्रेडिंग कंपनी किसानों के लिए खाद, बीज, कीटनाशक एवं कृषि दवाइयों की विश्वसनीय दुकान है। हम गुणवत्तापूर्ण उत्पाद एवं बेहतर सेवा प्रदान करते हैं।
हमारी सेवाएं
हमारी विशेषताएं
✅ उत्तम गुणवत्ता हमारी पहचान
✅ उचित मूल्य हमारी जिम्मेदारी
✅ किसानों की सेवा हमारा संकल्प
✅ बेहतर सेवा हमारा वादा
संपर्क करें
प्रो. मनीष कुमार
📞 Mobile: 9155725163
📱 WhatsApp: 9155725163, 8757188176
📧 Email: Manishkumarptg2@gmail.com
📍 Address: S.V.K Girl High School Road
मेसर्स धर्मराज ट्रेडिंग कंपनी
© 2026 All Rights Reserved
मेसर्स धर्मराज ट्रेडिंग कंपनी
खाद, बीज एवं दवाई के थोक एवं खुदरा विक्रेता
किसानों की सेवा में सदैव तत्पर
उत्तम गुणवत्ता • उचित मूल्य • बेहतर सेवा
हमारे बारे में
मेसर्स धर्मराज ट्रेडिंग कंपनी किसानों के लिए खाद, बीज, कीटनाशक एवं कृषि दवाइयों की विश्वसनीय दुकान है। हम गुणवत्तापूर्ण उत्पाद एवं बेहतर सेवा प्रदान करते हैं।
हमारी सेवाएं
हमारी विशेषताएं
✅ उत्तम गुणवत्ता हमारी पहचान
✅ उचित मूल्य हमारी जिम्मेदारी
✅ किसानों की सेवा हमारा संकल्प
✅ बेहतर सेवा हमारा वादा
संपर्क करें
प्रो. मनीष कुमार
📞 Mobile: 9155725163
📱 WhatsApp: 9155725163, 8757188176
📧 Email: Manishkumarptg2@gmail.com
📍 Address: S.V.K Girl High School Road
मेसर्स धर्मराज ट्रेडिंग कंपनी
© 2026 All Rights Reserved
const app = Vue.createApp({
data() {
return {
calculatedSens: 1.0,
};
},
methods: {
lower() {
this.calculatedSens = (this.calculatedSens / 2).toFixed(3);
},
higher() {
this.calculatedSens = (this.calculatedSens * 1.5).toFixed(3);
},
},
});
app.mount("#app")
<title>Perfect Sens Finder</title>Valorant Sensitivity Adjustment Tool
This tool allows you to adjust your sensitivity by calculating a lower and higher sensitivity based on your input.
How to Use:
- Enter your current sensitivity when prompted.
- Go to the range and practice shooting bots.
- Overflicking: If you tend to overflick, click "Lower" to calculate a sensitivity that is half of your original.
- Underflicking: If you tend to underflick, click "Higher" to calculate a sensitivity that is double your original.
- Repeat steps 1 and 2 until you find a sensitivity that suits you.
Made by Saay
@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap");
:root {
--primary-color: #4caf50;
--secondary-color: #f9f9f9;
--text-color: #333;
--background-color: #ffffff;
--button-color: #2196f3;
--button-hover-color: #1976d2;
}
body {
font-family: "Poppins", sans-serif;
background-color: var(--background-color);
color: var(--text-color);
margin: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
text-align: center;
}
#app {
background: var(--secondary-color);
padding: 20px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
label {
font-weight: bold;
margin-right: 10px;
}
input[type="number"] {
width: 80px;
padding: 8px;
margin-right: 10px;
border: 1px solid var(--primary-color);
border-radius: 4px;
}
button {
background-color: var(--button-color);
color: #fff;
border: none;
padding: 10px 15px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
margin: 5px;
}
button:hover {
background-color: var(--button-hover-color);
}
h2,
h3 {
color: var(--primary-color);
}
ol {
text-align: left;
padding-left: 20px;
}
ul {
list-style: none;
padding-left: 20px;
}
const app = Vue.createApp({
data() {
return {
calculatedSens: 0.3,
};
},
methods: {
lower() {
this.calculatedSens = (this.calculatedSens / 2).toFixed(3);
},
higher() {
this.calculatedSens = (this.calculatedSens * 1.5).toFixed(3);
},
},
});
app.mount("#app");
<title>Perfect Sens Finder</title>Valorant Sensitivity Adjustment Tool
This tool allows you to adjust your sensitivity by calculating a lower and higher sensitivity based on your input.
How to Use:
- Enter your current sensitivity when prompted.
- Go to the range and practice shooting bots.
- Overflicking: If you tend to overflick, click "Lower" to calculate a sensitivity that is half of your original.
- Underflicking: If you tend to underflick, click "Higher" to calculate a sensitivity that is double your original.
- Repeat steps 1 and 2 until you find a sensitivity that suits you.
Made by Saay
@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap");
:root {
--primary-color: #4caf50;
--secondary-color: #f9f9f9;
--text-color: #333;
--background-color: #ffffff;
--button-color: #2196f3;
--button-hover-color: #1976d2;
}
body {
font-family: "Poppins", sans-serif;
background-color: var(--background-color);
color: var(--text-color);
margin: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
text-align: center;
}
#app {
background: var(--secondary-color);
padding: 20px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
label {
font-weight: bold;
margin-right: 10px;
}
input[type="number"] {
width: 80px;
padding: 8px;
margin-right: 10px;
border: 1px solid var(--primary-color);
border-radius: 4px;
}
button {
background-color: var(--button-color);
color: #fff;
border: none;
padding: 10px 15px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
margin: 5px;
}
button:hover {
background-color: var(--button-hover-color);
}
h2,
h3 {
color: var(--primary-color);
}
ol {
text-align: left;
padding-left: 20px;
}
ul {
list-style: none;
padding-left: 20px;
}
Progress Pengajuan Simulator v1.1
<!-- COLUMN 1: Phone Device Simulator -->
<section class="simulator-container" aria-label="Smartphone Simulator View">
<div class="phone-frame" id="my-phone">
<div class="phone-notch"></div>
<div class="phone-screen">
<!-- Status Bar -->
<div class="phone-status-bar">
<span class="time">14:49</span>
<div class="status-icons">
<span class="material-symbols-outlined" style="font-size: 13px; font-weight: bold;">signal_cellular_alt</span>
<span class="material-symbols-outlined" style="font-size: 13px; font-weight: bold;">flight</span>
<span class="material-symbols-outlined" style="font-size: 14px; font-weight: bold;">battery_4_bar</span>
<span class="battery-pct" style="margin-left:-2px">44</span>
</div>
</div>
<!-- Screen Header -->
<div class="phone-header">
<span class="material-symbols-outlined back-btn">arrow_back</span>
<h2>Progress Pengajuan</h2>
</div>
<!-- Screen Body -->
<div class="phone-body">
<!-- Progress Card -->
<div class="phone-card">
<!-- Expandable Header -->
<div class="phone-accordion-header" id="toggle-accordion">
<h3>Proses Pengajuan</h3>
<span class="material-symbols-outlined chevron" id="accordion-chevron">expand_less</span>
</div>
<!-- Timeline Container (Rendered dynamically via app.js) -->
<div class="phone-timeline" id="timeline-container">
<!-- Dynamically populated from app.js -->
</div>
<!-- Watermark matches background of original screenshot -->
<div class="phone-watermark">
Pachmawati 05-29 Pachmawati 05-29
</div>
</div>
</div>
<!-- Bottom Navigation Bar -->
<div class="phone-navbar">
<button class="phone-nav-btn triangle" aria-label="Back"></button>
<button class="phone-nav-btn circle" aria-label="Home"></button>
<button class="phone-nav-btn square" aria-label="App switcher"></button>
</div>
</div>
</div>
<!-- Quick Info / Status Message -->
<div class="simulator-actions">
<p style="font-size: 0.85rem; color: var(--text-secondary); text-align: center;">
Status saat ini: <span class="highlight-text" id="current-status-lbl">Menunggu Putusan MP</span>
</p>
</div>
</section>
<!-- COLUMN 2: Dashboard Control Panel -->
<section class="dashboard-controls" aria-label="Interactive Controls Dashboard">
<!-- Stats / Overview Card -->
<div class="stats-banner">
<div class="stat-item">
<span class="stat-val" id="stat-completed">1</span>
<span class="stat-lbl">Selesai</span>
</div>
<div class="stat-item" style="border-left: 1px solid rgba(255,255,255,0.1); padding-left: 1.5rem; border-right: 1px solid rgba(255,255,255,0.1); padding-right: 1.5rem;">
<span class="stat-val" id="stat-active">Putusan</span>
<span class="stat-lbl">Tahap Aktif</span>
</div>
<div class="stat-item">
<span class="stat-val" id="stat-total">12</span>
<span class="stat-lbl">Total Tahap</span>
</div>
</div>
<!-- Quick Actions Card -->
<div class="control-card">
<h3>
<span class="material-symbols-outlined">bolt</span>
Simulasi Instan
</h3>
<p style="font-size: 0.8rem; color: var(--text-secondary); margin-bottom: 1rem;">
Gunakan tombol di bawah untuk menyimulasikan perkembangan pengajuan nasabah secara cepat.
</p>
<div class="actions-grid">
<button class="btn btn-primary" id="btn-next-step">
<span class="material-symbols-outlined" style="font-size:16px">arrow_upward</span> Tahap Berikutnya
</button>
<button class="btn" id="btn-prev-step">
<span class="material-symbols-outlined" style="font-size:16px">arrow_downward</span> Tahap Sebelumnya
</button>
<button class="btn btn-success" id="btn-simulate-all">
<span class="material-symbols-outlined" style="font-size:16px">done_all</span> Sukses Semua
</button>
<button class="btn" id="btn-reset-screenshot">
<span class="material-symbols-outlined" style="font-size:16px">restart_alt</span> Reset Gambar Asli
</button>
</div>
</div>
<!-- Steps List Selector -->
<div class="control-card">
<h3>
<span class="material-symbols-outlined">list_alt</span>
Pilih Tahap Aktif
</h3>
<p style="font-size: 0.8rem; color: var(--text-secondary); margin-bottom: 0.75rem;">
Klik tahap di bawah ini untuk langsung menetapkannya sebagai tahap aktif saat ini.
</p>
<div class="steps-list" id="steps-selector-list">
<!-- Dynamically populated from app.js -->
</div>
</div>
<!-- Edit Step Details -->
<div class="control-card">
<h3>
<span class="material-symbols-outlined">edit</span>
Edit Detil Tahap Aktif
</h3>
<div class="edit-form-group">
<div class="form-field">
<label for="edit-title">Nama Alur (Bahasa Indonesia)</label>
<input type="text" id="edit-title" placeholder="Nama alur...">
</div>
<div class="form-field">
<label for="edit-subtitle">Keterangan / Subtitle Status</label>
<input type="text" id="edit-subtitle" placeholder="Keterangan alur ketika aktif...">
</div>
</div>
</div>
<!-- JSON Live Output -->
<div class="control-card">
<h3>
<span class="material-symbols-outlined">terminal</span>
Output Data JSON (Realtime)
</h3>
<p style="font-size: 0.8rem; color: var(--text-secondary); margin-bottom: 0.75rem;">
Status alur data terkirim yang digunakan oleh API progress pengajuan.
</p>
<pre class="code-preview" id="json-preview"></pre>
</div>
</section>
Dibuat dengan ❤️ untuk visualisasi Progress Pengajuan BRImo Kredit & Monitoring Setelah Pencairan.
<script src="app.js"></script><nav class="bg-slate-900 text-white shadow-md sticky top-0 z-40">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between h-16 items-center">
<div class="flex items-center space-x-2 cursor-pointer" onclick="switchPage('shop-page')">
<i class="fa-solid fa-shield-halved text-emerald-400 text-2xl"></i>
<span class="font-bold text-xl tracking-wide">OFFICIAL STORE</span>
</div>
<div class="flex items-center space-x-6">
<button onclick="switchPage('shop-page')" class="hover:text-emerald-400 transition font-medium">หน้าแรกสินค้า</button>
<button onclick="switchPage('admin-page')" class="hover:text-emerald-400 transition font-medium"><i class="fa-solid fa-gear mr-1"></i>จัดการสินค้า</button>
<button onclick="openCartModal()" class="relative p-2 text-white hover:text-emerald-400 transition">
<i class="fa-solid fa-cart-shopping text-xl"></i>
<span id="cart-count" class="absolute -top-1 -right-1 bg-emerald-500 text-white text-xs w-5 h-5 rounded-full flex items-center justify-center font-bold hidden">0</span>
</button>
</div>
</div>
</div>
</nav>
<main class="flex-grow max-w-7xl w-full mx-auto px-4 sm:px-6 lg:px-8 py-8">
<section id="shop-page" class="page active">
<div class="border-b border-gray-200 pb-5 mb-6">
<h1 class="text-3xl font-bold text-slate-800">รายการสินค้าทั้งหมด</h1>
<p class="text-sm text-gray-500 mt-1">เลือกสินค้าที่ต้องการและระบุจำนวนเพื่อเพิ่มลงตะกร้า</p>
</div>
<div id="products-grid" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
</div>
</section>
<section id="admin-page" class="page">
<div class="border-b border-gray-200 pb-5 mb-6">
<h1 class="text-3xl font-bold text-slate-800">ระบบจัดการหลังบ้าน</h1>
<p class="text-sm text-gray-500 mt-1">เพิ่มหรือลบสินค้าที่ต้องการแสดงในหน้าเว็บ</p>
</div>
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
<div class="bg-white p-6 rounded-lg shadow-sm border border-gray-200 h-fit">
<h3 class="text-lg font-semibold text-slate-700 mb-4 border-b pb-2"><i class="fa-solid fa-plus mr-2 text-emerald-500"></i>เพิ่มสินค้าใหม่</h3>
<form id="add-product-form" onsubmit="handleOrderSubmit(event)" class="space-y-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">ชื่อสินค้า</label>
<input type="text" id="p-name" required class="w-full p-2.5 border border-gray-300 rounded-md focus:ring-2 focus:ring-emerald-500 focus:outline-none">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">ราคาสินค้า (บาท)</label>
<input type="number" id="p-price" min="0" required class="w-full p-2.5 border border-gray-300 rounded-md focus:ring-2 focus:ring-emerald-500 focus:outline-none">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">URL รูปภาพสินค้า</label>
<input type="url" id="p-image" placeholder="https://images.unsplash.com/..." class="w-full p-2.5 border border-gray-300 rounded-md focus:ring-2 focus:ring-emerald-500 focus:outline-none">
<p class="text-xs text-gray-400 mt-1">*หากเว้นว่างไว้ ระบบจะใช้รูปภาพจำลองให้</p>
</div>
<button type="submit" onclick="addNewProduct(event)" class="w-full bg-slate-950 text-white py-2.5 rounded-md font-medium hover:bg-slate-800 transition">บันทึกสินค้า</button>
</form>
</div>
<div class="lg:col-span-2 bg-white p-6 rounded-lg shadow-sm border border-gray-200">
<h3 class="text-lg font-semibold text-slate-700 mb-4 border-b pb-2">รายการสินค้าในระบบ</h3>
<div class="overflow-x-auto">
<table class="w-full text-left border-collapse">
<thead>
<tr class="bg-slate-50 text-slate-600 text-sm border-b">
<th class="p-3 font-semibold">รูปภาพ</th>
<th class="p-3 font-semibold">ชื่อสินค้า</th>
<th class="p-3 font-semibold">ราคา</th>
<th class="p-3 font-semibold text-center">จัดการ</th>
</tr>
</thead>
<tbody id="admin-product-list">
</tbody>
</table>
</div>
</div>
</div>
</section>
<section id="checkout-page" class="page">
<div class="max-w-2xl mx-auto bg-white p-8 rounded-xl shadow-md border border-gray-100">
<div class="text-center mb-8">
<i class="fa-solid fa-truck-fast text-slate-800 text-4xl mb-2"></i>
<h1 class="text-2xl font-bold text-slate-800">ข้อมูลการจัดส่งและชำระเงิน</h1>
<p class="text-sm text-gray-500">กรุณากรอกข้อมูลที่ถูกต้องเพื่อให้การจัดส่งเป็นไปอย่างรวดเร็ว</p>
</div>
<form id="checkout-form" onsubmit="processCheckout(event)" class="space-y-5">
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">ชื่อ - นามสกุล ผู้ซื้อ *</label>
<input type="text" id="cust-name" required class="w-full p-2.5 border border-gray-300 rounded-md focus:ring-2 focus:ring-emerald-500 focus:outline-none">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">เบอร์โทรศัพท์ *</label>
<input type="tel" id="cust-phone" required class="w-full p-2.5 border border-gray-300 rounded-md focus:ring-2 focus:ring-emerald-500 focus:outline-none">
</div>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">ที่อยู่สำหรับจัดส่ง *</label>
<textarea id="cust-address" rows="3" required class="w-full p-2.5 border border-gray-300 rounded-md focus:ring-2 focus:ring-emerald-500 focus:outline-none" placeholder="บ้านเลขที่, ถนน, ตำบล, อำเภอ, จังหวัด..."></textarea>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">รหัสไปรษณีย์ *</label>
<input type="text" id="cust-zip" required class="w-full p-2.5 border border-gray-300 rounded-md focus:ring-2 focus:ring-emerald-500 focus:outline-none">
</div>
<div class="pt-4 border-t flex space-x-4">
<button type="button" onclick="switchPage('shop-page')" class="w-1/3 border border-gray-300 text-gray-700 py-3 rounded-md font-medium hover:bg-gray-50 transition">ย้อนกลับ</button>
<button type="submit" class="w-2/3 bg-emerald-600 text-white py-3 rounded-md font-medium hover:bg-emerald-700 transition shadow-sm">ยืนยันคำสั่งซื้อสินค้า</button>
</div>
</form>
</div>
</section>
<section id="success-page" class="page">
<div class="max-w-md mx-auto bg-white p-8 rounded-xl shadow-md border border-gray-100 text-center">
<div class="w-16 h-16 bg-emerald-100 rounded-full flex items-center justify-center mx-auto mb-4">
<i class="fa-solid fa-check text-emerald-600 text-3xl"></i>
</div>
<h1 class="text-2xl font-bold text-slate-900 mb-2">สั่งซื้อสินค้าสำเร็จ!</h1>
<p class="text-gray-600 text-sm mb-6">ระบบได้รับคำสั่งซื้อของคุณเรียบร้อยแล้ว ข้อมูลจะถูกบันทึกลงสู่ระบบ</p>
<div class="bg-slate-50 p-4 rounded-lg text-left mb-6 space-y-2 border border-slate-100">
<div class="flex justify-between text-sm"><span class="text-gray-500">หมายเลขการสั่งซื้อ:</span> <span id="receipt-id" class="font-bold text-slate-800"></span></div>
<div class="flex justify-between text-sm"><span class="text-gray-500">ชื่อผู้ซื้อ:</span> <span id="receipt-name" class="font-semibold text-slate-800"></span></div>
<div class="flex justify-between text-sm"><span class="text-gray-500">ยอดรวมทั้งสิ้น:</span> <span id="receipt-total" class="font-bold text-emerald-600"></span></div>
</div>
<button onclick="resetApp()" class="w-full bg-slate-900 text-white py-2.5 rounded-md font-medium hover:bg-slate-800 transition">กลับไปหน้าหลัก</button>
</div>
</section>
</main>
<footer class="bg-slate-900 text-slate-400 py-6 text-center text-sm border-t border-slate-800 mt-12">
<p>© 2026 Official Store. All Rights Reserved. (ระบบบันทึกข้อมูลแบบ LocalStorage)</p>
</footer>
<div id="cart-modal" class="fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center hidden opacity-0 transition-opacity duration-300">
<div class="bg-white rounded-xl shadow-xl max-w-lg w-full m-4 overflow-hidden transform scale-95 transition-transform duration-300">
<div class="bg-slate-900 text-white p-4 flex justify-between items-center">
<h3 class="text-lg font-bold"><i class="fa-solid fa-cart-shopping mr-2 text-emerald-400"></i>ตะกร้าสินค้าของคุณ</h3>
<button onclick="closeCartModal()" class="text-gray-400 hover:text-white text-xl"><i class="fa-solid fa-xmark"></i></button>
</div>
<div class="p-6 max-h-[60vh] overflow-y-auto" id="cart-modal-items">
</div>
<div class="bg-slate-50 p-4 border-t border-gray-100">
<div class="flex justify-between items-center mb-4 px-2">
<span class="text-gray-600 font-medium">ยอดรวมทั้งหมด:</span>
<span id="cart-total-price" class="text-2xl font-bold text-slate-900">0.00 บาท</span>
</div>
<div class="flex space-x-3">
<button onclick="closeCartModal()" class="w-1/2 bg-gray-200 text-gray-700 py-2.5 rounded-md font-medium hover:bg-gray-300 transition">เลือกสินค้าเพิ่ม</button>
<button id="checkout-btn" onclick="goToCheckout()" class="w-1/2 bg-emerald-600 text-white py-2.5 rounded-md font-medium hover:bg-emerald-700 transition disabled:opacity-50 disabled:cursor-not-allowed">ไปหน้าชำระเงิน</button>
</div>
</div>
</div>
</div>
<script>
// ข้อมูลเริ่มต้นสำหรับจำลองสินค้าตัวอย่างในครั้งแรกที่เปิดเว็บ
const defaultProducts = [
{ id: 1, name: "Smart Watch Series 9", price: 12900, image: "https://images.unsplash.com/photo-1542496658-e33a6d0d50f6?w=500" },
{ id: 2, name: "Wireless Noise Cancelling Headphones", price: 8900, image: "https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=500" },
{ id: 3, name: "Mechanical Gaming Keyboard", price: 3400, image: "https://images.unsplash.com/photo-1587829741301-dc798b83add3?w=500" },
{ id: 4, name: "Ergonomic Office Chair", price: 6500, image: "https://images.unsplash.com/photo-1505797149-43b0069ec26b?w=500" }
];
// โหลดข้อมูลจาก LocalStorage หรือใช้ค่าเริ่มต้น
let products = JSON.parse(localStorage.getItem('shop_products')) || defaultProducts;
let cart = {}; // รูปแบบข้อมูล { product_id: quantity }
// เมื่อโหลดหน้าเว็บเสร็จให้เริ่มทำงาน
window.onload = function() {
if(!localStorage.getItem('shop_products')) {
localStorage.setItem('shop_products', JSON.stringify(products));
}
renderShopProducts();
renderAdminProducts();
updateCartCount();
};
// ฟังก์ชันสลับหน้า (SPA)
function switchPage(pageId) {
document.querySelectorAll('.page').forEach(page => page.classList.remove('active'));
document.getElementById(pageId).classList.add('active');
window.scrollTo(0, 0);
}
// --- SECTION: หน้าแสดงสินค้า (SHOP) ---
function renderShopProducts() {
const grid = document.getElementById('products-grid');
grid.innerHTML = '';
if(products.length === 0) {
grid.innerHTML = `<div class="col-span-full text-center py-12 text-gray-400 font-medium">ไม่มีสินค้าพร้อมจำหน่ายในขณะนี้</div>`;
return;
}
products.forEach(product => {
const isChecked = cart[product.id] ? 'checked' : '';
const qty = cart[product.id] || 1;
const card = document.createElement('div');
card.className = "bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden flex flex-col group hover:shadow-md transition duration-200";
card.innerHTML = `
<div class="h-48 w-full bg-gray-100 overflow-hidden relative">
<img src="${product.image}" alt="${product.name}" class="w-full h-full object-cover group-hover:scale-105 transition duration-300">
</div>
<div class="p-4 flex-grow flex flex-col justify-between">
<div>
<h3 class="font-semibold text-slate-800 mb-1 line-clamp-2">${product.name}</h3>
<p class="text-emerald-600 font-bold text-lg mb-4">${product.price.toLocaleString()} ฿</p>
</div>
<div class="pt-3 border-t border-gray-100 flex items-center justify-between gap-2">
<label class="inline-flex items-center cursor-pointer">
<input type="checkbox" id="check-${product.id}" ${isChecked} onchange="toggleSelectProduct(${product.id})" class="w-5 h-5 rounded text-emerald-600 focus:ring-emerald-500 border-gray-300 cursor-pointer">
<span class="ml-2 text-sm text-gray-600 select-none">เลือก</span>
</label>
<div class="flex items-center border border-gray-300 rounded bg-gray-50">
<button onclick="changeQtyInput(${product.id}, -1)" class="px-2 py-1 text-gray-500 hover:bg-gray-200">-</button>
<input type="number" id="qty-${product.id}" value="${qty}" min="1" onchange="updateQtyFromInput(${product.id}, this.value)" class="w-10 text-center bg-transparent border-none text-sm focus:outline-none focus:ring-0 p-0">
<button onclick="changeQtyInput(${product.id}, 1)" class="px-2 py-1 text-gray-500 hover:bg-gray-200">+</button>
</div>
</div>
</div>
`;
grid.appendChild(card);
});
}
// กดติ๊กถูก หรือเอาติ๊กถูกออก จากสินค้า
function toggleSelectProduct(productId) {
const checkbox = document.getElementById(`check-${productId}`);
const qtyInput = document.getElementById(`qty-${productId}`);
let quantity = parseInt(qtyInput.value) || 1;
if (checkbox.checked) {
cart[productId] = quantity; // บันทึกสินค้าพร้อมจำนวนเข้าตะกร้า
} else {
delete cart[productId]; // ลบออกจากตะกร้าเมื่อยกเลิกการเช็ค
}
updateCartCount();
}
// ปุ่มกดบวกลบจำนวนสินค้าตรงการ์ด
function changeQtyInput(productId, change) {
const qtyInput = document.getElementById(`qty-${productId}`);
let currentVal = parseInt(qtyInput.value) || 1;
let newVal = currentVal + change;
if(newVal < 1) newVal = 1;
qtyInput.value = newVal;
// ถ้าเช็คเลือกสินค้าอยู่ ให้เข้าตะกร้าอัปเดตจำนวนทันที
if(cart[productId] !== undefined) {
cart[productId] = newVal;
updateCartCount();
}
}
// พิมพ์ตัวเลขจำนวนบนการ์ดสินค้าโดยตรง
function updateQtyFromInput(productId, value) {
let val = parseInt(value) || 1;
if(val < 1) val = 1;
if(cart[productId] !== undefined) {
cart[productId] = val;
updateCartCount();
}
}
// อัปเดตตัวเลขแจ้งเตือนบนไอคอนตะกร้าสินค้า
function updateCartCount() {
const countSpan = document.getElementById('cart-count');
const totalItems = Object.keys(cart).length;
if(totalItems > 0) {
countSpan.innerText = totalItems;
countSpan.classList.remove('hidden');
} else {
countSpan.classList.add('hidden');
}
}
// --- SECTION: POPUP MODAL ตะกร้าสินค้ากลางหน้าจอ ---
function openCartModal() {
const modal = document.getElementById('cart-modal');
const container = document.getElementById('cart-modal-items');
container.innerHTML = '';
let totalPrice = 0;
const cartItemKeys = Object.keys(cart);
if(cartItemKeys.length === 0) {
container.innerHTML = `
<div class="text-center py-8 text-gray-400">
<i class="fa-regular fa-folder-open text-4xl mb-2 block"></i>
ไม่มีสินค้าในตะกร้า กรุณาเลือกสินค้าที่ต้องการ
</div>`;
document.getElementById('checkout-btn').disabled = true;
} else {
document.getElementById('checkout-btn').disabled = false;
cartItemKeys.forEach(id => {
const product = products.find(p => p.id == id);
if(product) {
const qty = cart[id];
const itemTotal = product.price * qty;
totalPrice += itemTotal;
const row = document.createElement('div');
row.className = "flex items-center justify-between py-3 border-b border-gray-100 last:border-none";
row.innerHTML = `
<div class="flex items-center space-x-3">
<img src="${product.image}" class="w-12 h-12 object-cover rounded border">
<div>
<h4 class="font-medium text-slate-800 text-sm line-clamp-1">${product.name}</h4>
<p class="text-xs text-gray-400">${product.price.toLocaleString()} ฿ x ${qty}</p>
</div>
</div>
<div class="text-right">
<span class="font-semibold text-slate-900 block text-sm">${itemTotal.toLocaleString()} ฿</span>
<button onclick="removeFromModal(${id})" class="text-xs text-red-500 hover:underline">ลบออก</button>
</div>
`;
container.appendChild(row);
}
});
}
document.getElementById('cart-total-price').innerText = totalPrice.toLocaleString() + " บาท";
// เปิดเอฟเฟกต์ Fade-in
modal.classList.remove('hidden');
setTimeout(() => {
modal.classList.remove('opacity-0');
modal.querySelector('.transform').classList.remove('scale-95');
}, 10);
}
function closeCartModal() {
const modal = document.getElementById('cart-modal');
modal.classList.add('opacity-0');
modal.querySelector('.transform').classList.add('scale-95');
setTimeout(() => {
modal.classList.add('hidden');
}, 300);
}
// ลบสินค้าออกผ่านทางหน้าต่าง Popup ตะกร้า
function removeFromModal(id) {
delete cart[id];
updateCartCount();
renderShopProducts(); // ไปยกเลิก checkbox ที่หน้ารายการสินค้าด้วย
openCartModal(); // สั่งเรนเดอร์เนื้อหา Popup ใหม่
}
// กดปุ่มเพื่อไปหน้ากรอกฟอร์มที่จัดส่ง
function goToCheckout() {
closeCartModal();
switchPage('checkout-page');
}
// --- SECTION: หน้ากรอกข้อมูลและชำระเงิน (CHECKOUT & SUCCESS) ---
function processCheckout(event) {
event.preventDefault();
// รวบรวมข้อมูลสินค้าสั่งซื้อและยอดเงินรวม
let orderItems = [];
let totalAmount = 0;
Object.keys(cart).forEach(id => {
const prod = products.find(p => p.id == id);
if(prod) {
orderItems.push({ id: prod.id, name: prod.name, price: prod.price, quantity: cart[id] });
totalAmount += (prod.price * cart[id]);
}
});
// สร้าง Object ข้อมูลคำสั่งซื้อ
const orderId = "ORD-" + Date.now() + Math.floor(Math.random() * 1000); // สุ่มหมายเลขคำสั่งซื้อ
const orderData = {
order_id: orderId,
customer: {
name: document.getElementById('cust-name').value,
phone: document.getElementById('cust-phone').value,
address: document.getElementById('cust-address').value,
zipcode: document.getElementById('cust-zip').value
},
items: orderItems,
total: totalAmount,
date: new Date().toISOString()
};
// บันทึกลงใน localStorage (ดึงของเก่ามารวมก่อนแล้วยัดกลับไป)
let ordersHistory = JSON.parse(localStorage.getItem('shop_orders_history')) || [];
ordersHistory.push(orderData);
localStorage.setItem('shop_orders_history', JSON.stringify(ordersHistory));
// แสดงหน้าสั่งซื้อสำเร็จพร้อมพิมพ์ใบเสร็จย่อย
document.getElementById('receipt-id').innerText = orderId;
document.getElementById('receipt-name').innerText = orderData.customer.name;
document.getElementById('receipt-total').innerText = totalAmount.toLocaleString() + " บาท";
switchPage('success-page');
}
// เคลียร์ระบบตะกร้าเมื่อกดสั่งซื้อเรียบร้อยทั้งหมดแล้วกลับหน้าหลัก
function resetApp() {
cart = {};
document.getElementById('checkout-form').reset();
updateCartCount();
renderShopProducts();
switchPage('shop-page');
}
// --- SECTION: ระบบหลังบ้านจัดการสินค้า (ADMIN PAGE) ---
function renderAdminProducts() {
const tbody = document.getElementById('admin-product-list');
tbody.innerHTML = '';
products.forEach(product => {
const row = document.createElement('tr');
row.className = "border-b hover:bg-gray-50 text-sm";
row.innerHTML = `
<td class="p-3"><img src="${product.image}" class="w-10 h-10 object-cover rounded border"></td>
<td class="p-3 font-medium text-slate-800">${product.name}</td>
<td class="p-3">${product.price.toLocaleString()} ฿</td>
<td class="p-3 text-center">
<button onclick="deleteProduct(${product.id})" class="text-red-500 hover:text-red-700 bg-red-50 hover:bg-red-100 px-2.5 py-1.5 rounded transition text-xs"><i class="fa-regular fa-trash-can mr-1"></i>ลบ</button>
</td>
`;
tbody.appendChild(row);
});
}
function addNewProduct(event) {
event.preventDefault();
const name = document.getElementById('p-name').value.trim();
const price = parseFloat(document.getElementById('p-price').value);
let image = document.getElementById('p-image').value.trim();
if(!name || isNaN(price)) {
alert('กรุณากรอกข้อมูลให้ครบถ้วนและถูกต้อง');
return;
}
// ถ้าไม่ได้ใส่ URL รูปภาพ จะสุ่มรูปภาพสินค้าสวยๆ ให้จาก Unsplash
if(!image) {
image = "https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=500";
}
const newProduct = {
id: Date.now(), // ใช้ timestamp ป้องกัน ID ซ้ำ
name: name,
price: price,
image: image
};
products.push(newProduct);
localStorage.setItem('shop_products', JSON.stringify(products));
// รีเซ็ตฟอร์มและรีเรนเดอร์ข้อมูลใหม่
document.getElementById('add-product-form').reset();
renderShopProducts();
renderAdminProducts();
alert('เพิ่มสินค้าสำเร็จแล้ว!');
}
function deleteProduct(id) {
if(confirm('คุณแน่ใจหรือไม่ว่าต้องการลบสินค้านี้ออกจากระบบ?')) {
products = products.filter(p => p.id !== id);
localStorage.setItem('shop_products', JSON.stringify(products));
// หากสินค้านั้นถูกติ๊กเลือกในตะกร้าอยู่ ให้ลบออกด้วย
if(cart[id]) {
delete cart[id];
updateCartCount();
}
renderShopProducts();
renderAdminProducts();
}
}
</script>
่่
body {
font-family: 'Segoe UI', 'Arabic Typesetting', sans-serif;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
min-height: 100vh;
padding: 20px;
}
.container {
display: flex;
max-width: 1400px;
margin: 0 auto;
gap: 20px;
}
/* الشريط الجانبي */
.sidebar {
width: 280px;
background: white;
border-radius: 12px;
padding: 25px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
height: fit-content;
position: sticky;
top: 20px;
}
.sidebar h2 {
color: #2c3e50;
margin-bottom: 20px;
font-size: 1.3em;
border-bottom: 3px solid #3498db;
padding-bottom: 10px;
}
.sidebar ul {
list-style: none;
}
.sidebar li {
margin-bottom: 12px;
}
.sidebar a {
color: #34495e;
text-decoration: none;
display: block;
padding: 10px 15px;
border-radius: 6px;
transition: all 0.3s ease;
cursor: pointer;
}
.sidebar a:hover {
background: #ecf0f1;
color: #3498db;
transform: translateX(-5px);
}
.sidebar a.active {
background: #3498db;
color: white;
font-weight: bold;
}
/* المحتوى الرئيسي */
.main-content {
flex: 1;
}
.header {
background: white;
padding: 30px;
border-radius: 12px;
margin-bottom: 25px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
text-align: center;
}
.header h1 {
color: #2c3e50;
font-size: 2.2em;
margin-bottom: 10px;
}
.header p {
color: #7f8c8d;
font-size: 1.1em;
}
/* مربع البحث */
.search-box {
margin-bottom: 25px;
background: white;
padding: 20px;
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.search-box input {
width: 100%;
padding: 12px 15px;
border: 2px solid #ecf0f1;
border-radius: 8px;
font-size: 1em;
transition: all 0.3s ease;
font-family: 'Arabic Typesetting', sans-serif;
}
.search-box input:focus {
outline: none;
border-color: #3498db;
box-shadow: 0 0 10px rgba(52, 152, 219, 0.2);
}
/* البطاقات */
.section {
background: white;
border-radius: 12px;
padding: 25px;
margin-bottom: 25px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
display: none;
}
.section.active {
display: block;
animation: fadeIn 0.5s ease;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.section-title {
color: #2c3e50;
font-size: 1.8em;
margin-bottom: 25px;
border-bottom: 3px solid #3498db;
padding-bottom: 15px;
}
/* بطاقة السؤال والجواب */
.qa-card {
background: #f8f9fa;
border-right: 5px solid #3498db;
padding: 20px;
margin-bottom: 20px;
border-radius: 8px;
transition: all 0.3s ease;
}
.qa-card:hover {
box-shadow: 0 6px 20px rgba(52, 152, 219, 0.15);
transform: translateX(-5px);
}
.question {
color: #2c3e50;
font-weight: bold;
font-size: 1.1em;
margin-bottom: 15px;
cursor: pointer;
display: flex;
align-items: center;
gap: 10px;
user-select: none;
}
.question:hover {
color: #3498db;
}
.toggle-btn {
width: 24px;
height: 24px;
background: #3498db;
color: white;
border: none;
border-radius: 50%;
cursor: pointer;
font-size: 0.9em;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
flex-shrink: 0;
}
.toggle-btn:hover {
background: #2980b9;
transform: scale(1.1);
}
.answer {
color: #555;
line-height: 1.8;
display: none;
padding: 15px;
background: white;
border-radius: 6px;
margin-top: 10px;
border-left: 3px solid #27ae60;
}
.answer.show {
display: block;
animation: slideDown 0.3s ease;
}
@keyframes slideDown {
from { opacity: 0; max-height: 0; }
to { opacity: 1; max-height: 1000px; }
}
/* أزرار التحكم */
.controls {
background: white;
padding: 20px;
border-radius: 12px;
margin-bottom: 25px;
display: flex;
gap: 10px;
flex-wrap: wrap;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.controls button {
padding: 10px 20px;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 1em;
font-weight: bold;
transition: all 0.3s ease;
font-family: 'Arabic Typesetting', sans-serif;
}
.btn-show-all {
background: #27ae60;
color: white;
}
.btn-show-all:hover {
background: #229954;
}
.btn-hide-all {
background: #e74c3c;
color: white;
}
.btn-hide-all:hover {
background: #c0392b;
}
.btn-print {
background: #9b59b6;
color: white;
}
.btn-print:hover {
background: #8e44ad;
}
/* الفهرس في الصفحة */
.toc {
background: #ecf0f1;
padding: 20px;
border-radius: 8px;
margin-bottom: 25px;
}
.toc h3 {
color: #2c3e50;
margin-bottom: 15px;
}
.toc ol {
margin-right: 20px;
color: #555;
}
.toc li {
margin-bottom: 8px;
cursor: pointer;
transition: all 0.3s ease;
}
.toc li:hover {
color: #3498db;
transform: translateX(-5px);
}
/* الاستجابة للهاتف */
@media (max-width: 768px) {
.container {
flex-direction: column;
}
.sidebar {
width: 100%;
position: relative;
top: 0;
}
.header h1 {
font-size: 1.6em;
}
.section-title {
font-size: 1.4em;
}
}
/* زر العودة للأعلى */
.scroll-to-top {
position: fixed;
bottom: 30px;
left: 30px;
width: 50px;
height: 50px;
background: #3498db;
color: white;
border: none;
border-radius: 50%;
cursor: pointer;
display: none;
align-items: center;
justify-content: center;
font-size: 1.5em;
box-shadow: 0 4px 12px rgba(52, 152, 219, 0.4);
transition: all 0.3s ease;
z-index: 1000;
}
.scroll-to-top:hover {
background: #2980b9;
transform: scale(1.1);
}
.scroll-to-top.show {
display: flex;
}
</style>
📚 الفهرس
<!-- المحتوى الرئيسي -->
<main class="main-content">
<!-- رأس الصفحة -->
<div class="header">
<h1>📖 مذاكرة الملكية والتأمينات</h1>
<p>نسخة تفاعلية محسّنة للمراجعة السريعة والمذاكرة الفعّالة</p>
</div>
<!-- مربع البحث -->
<div class="search-box">
<input
type="text"
id="searchInput"
placeholder="🔍 ابحث عن سؤال أو موضوع..."
onkeyup="searchQuestions()"
>
</div>
<!-- أزرار التحكم -->
<div class="controls">
<button class="btn-show-all" onclick="showAllAnswers()">✓ اظهار كل الإجابات</button>
<button class="btn-hide-all" onclick="hideAllAnswers()">✕ اخفاء كل الإجابات</button>
<button class="btn-print" onclick="window.print()">🖨️ طباعة الصفحة</button>
</div>
<!-- قسم المقدمة -->
<div class="section active" id="intro">
<div class="section-title">مرحباً بك في مذكرة الملكية والتأمينات</div>
<div class="qa-card">
<div class="question">
<span class="toggle-btn">?</span>
<span>كيف تستخدم هذا الموقع؟</span>
</div>
<div class="answer">
<strong>خطوات الاستخدام:</strong>
<ul style="margin-right: 20px; margin-top: 10px; line-height: 1.8;">
<li><strong>اختر فصل:</strong> من الشريط الجانبي على اليمين</li>
<li><strong>اقرأ السؤال:</strong> يظهر بوضوح في كل بطاقة</li>
<li><strong>اضغط على زر الإظهار:</strong> لرؤية الإجابة</li>
<li><strong>استخدم البحث:</strong> للبحث السريع عن موضوع محدد</li>
<li><strong>اطبع الصفحة:</strong> للمذاكرة دون انترنت</li>
</ul>
</div>
</div>
</div>
<!-- الفصل الأول -->
<div class="section" id="section1">
<div class="section-title">الفصل الأول: الاستعمال والاستغلال</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>اشرح عنصري الاستعمال والاستغلال باعتبارهما من عناصر الملكية، وضح الفرق بين الصمار والمنتجات؟</span>
</div>
<div class="answer">
<strong>عنصر الاستعمال:</strong>
<p>هو استخدام الشيء في غرضه المعد له للحصول على منفعته، دون المساس بجوهره (مثل: سكن الدار، زراعة الأرض، قيام المالك بأعمال الصيانة للمك).</p>
<strong>الفرق بين الاستعمال والاستغلال:</strong>
<p>الاستعمال لا ينتج عنه "عمال" تُباع أو تُؤجر، بينما الاستغلال مخصوص للحصول على عمال الشيء (مثل تأجير الدار للغير).</p>
<strong>تداخل الاستعمال مع التصرف:</strong>
<p>قد يختلط الاستعمال بالتصرف في الأشياء القابلة للاستهلاك بمجرد استعمالها (كالوقود والطعام)، أو عند استعمال النقود، لأن استعمالهما يُعد تصرفاً قانوناً (إعادة تحرير رسمية).</p>
<strong>القيود:</strong>
<p>المالك حر في طريقة استعمال ملكه بشرط ألا يتعارض ذلك مع القيود القانونية ولا يترتب عليه ضرر غير مألوف للجوار.</p>
</div>
</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف الاستغلال:</span>
</div>
<div class="answer">
<p>هو القيام بالأعمال اللازمة للحصول على عمال الشيء (ما يغله الشيء من عوائد)، ويكون الاستغلال إما:</p>
<ul style="margin-right: 20px; margin-top: 10px;">
<li><strong>مباشر:</strong> كأن يزرع المالك أرضه ويجني محصوليها بنفسه</li>
<li><strong>غير مباشر:</strong> كأن يؤجر المالك لمين أو أرضه أو سياته للغير مقابل أجرة (يلغ)</li>
</ul>
</div>
</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف الثمار:</span>
</div>
<div class="answer">
<p>هي كل ما ينتجه الشيء في مواعيد دورية ومنتظمة دون أن يترتب على أخذه انتقاص أو مساس بجرم الشيء الأصلي، وتنقسم إلى ثلاثة أنواع:</p>
<ul style="margin-right: 20px; margin-top: 10px;">
<li><strong>ثمار طبيعية:</strong> التي تتولد بفعل الطبيعة وحدها دون تدخل الإنسان (كالدلاء وعسل النحل وصوف الأغنام)</li>
<li><strong>ثمار مستحدثة أو صناعية:</strong> التي تتولد بفعل وعمل الإنسان (كالمحاصيل الزراعية من حبوب وخضر وفاكهة)</li>
<li><strong>ثمار مدنية:</strong> العائد النقدي الدوري الذي يرتبط به الغير مقابل استغلاله للشيء بموجب عقد (كأجرة المباني والأراضي، وأرباح السفن والسندات)</li>
</ul>
</div>
</div>
</div>
<!-- الفصل الثاني -->
<div class="section" id="section2">
<div class="section-title">الفصل الثاني: تعريف المنتجات والتمييز بينها وبين الثمار</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف المنتجات:</span>
</div>
<div class="answer">
<p>هي العوائد غير الدورية التي يغلها الشيء ويترتب على تحصيلها انتقاص واقتطاع من أصل الشيء وجرمه (مثل: المعادن من المنجم، والأحجار من المحجر، والأشجار من غابات غير معدة للقطع الدوري)، وهي تنتهي وتنفد بعد وقت طويل أو قصير.</p>
<strong>دور الإرادة والتخصيص:</strong>
<p>يمكن لإرادة المالك أن تحول "المنتجات" إلى "عمال" إذاريه بجعل اقتطاعها دورياً ومنتظماً (مثل: تنظيم المالك للمنجم أو إعادة الشيء إعداداً خاصاً ليستخرج منه كميات برسبة دورية ومنتظمة، دون فناء يرسع للأصول).</p>
<strong>التمييز بين الثمار والمنتجات:</strong>
<ul style="margin-right: 20px; margin-top: 10px;">
<li>الثمار: عوائد دورية منتظمة، لا تترتب على أخذها انتقاص أو مساس بجرم الشيء الأصلي</li>
<li>المنتجات: عوائد غير دورية، يترتب على تحصيلها انتقاص واقتطاع من أصل الشيء</li>
</ul>
</div>
</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>ما المقصود بالرقبة والمنتفع في حالة الانتفاع؟</span>
</div>
<div class="answer">
<p><strong>الرقبة:</strong> هي الملكية الباقية بعد انتهاء حق الانتفاع</p>
<p><strong>المنتفع:</strong> هو من له حق الانتفاع بالعقار</p>
<strong>الحالة الأولى (رد الشيء بالحياة):</strong>
<p>إذا انتقل الشيء إلى يد حائز ثم استرد المالك ملكه: ينتقل حك الرقبة إليه. الحائز حسن النية لا يرجع ما قضاه، بينما حسن النية سيء يرجع جميع الثمار والمنتجات التي قبضها أو قرصها قبل رد الحياة.</p>
<p><strong>الحالة الثانية (حك الانتفاع):</strong>
<p>إذا تقرر حك انتفاع على العقار:</p>
<ul style="margin-right: 20px; margin-top: 10px;">
<li><strong>المنتفع:</strong> يملك الحق في الحصول على الثمار فقط لاستغلاليها</li>
<li><strong>مالك الرقبة:</strong> تظل المنتجات من حقه وحده لأنها تقتطع من أصل الشيء الذي يعود إليه بعد انتهاء مدة الانتفاع</li>
</ul>
</div>
</div>
</div>
<!-- الفصل الثالث: الشفيع -->
<div class="section" id="section3">
<div class="section-title">الفصل الثالث: الشفيع</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>بين الشروط الواجب توافرها في الشيء المشفوع لألأخذ بالشفعة بالتفصيل المناسب؟</span>
</div>
<div class="answer">
<strong>الشرط الأول: أن يكون الشيء المرهون عقاراً:</strong>
<p>يقتصر الرهن الرسمي على العقارات فقط دون المنقولات (إلا إذا وجد نص يقضي بغير ذلك). والعقار هو كل شيء ثابت بحرمه مستقر فيه لا يمكن نقله دون تلف أو تغيير في هيئته.</p>
<strong>الشرط الثاني: أن يكون العقار المرهون مما يصح التعامل فيه بالمزاد العلني:</strong>
<p>يجب أن يكون العقار قابلاً للبيع. اسثناء: الدولة حسب قوانينها، والعقارات المملوكة للدولة (سواء عامة أو خاصة)، ومنع الممارسة والخبراء وقضاة الدوائر من شراء الأموال المعهود إليهم بإدارتها.</p>
<strong>الشرط الثالث: أن يكون الشيء المرهون موجوداً وقت الرهن:</strong>
<p>ممكن أن يرهن ملك معين موجود فعلاً (وليس مستقبلاً). يشمل هذا:</p>
<ul style="margin-right: 20px; margin-top: 10px;">
<li>العقار يجب أن يكون موجوداً فعلاً وقت البيع المشفوع</li>
<li>إذا زالت الملكية بالتقادم، يجب أن تكون مدة التقادم قد اكتملت قبل البيع</li>
<li>إذا آلت الملكية بتصرف قانوني (كالشراء الوديع للمثل)، يجب أن يكون هذا التصرف قد تم قبل انعقاد البيع الصادر للأجنبي</li>
</ul>
</div>
</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف الشفيع:</span>
</div>
<div class="answer">
<p>الشفيع هو الشخص الذي يطلب تملك العقار المباع بدلاً من المشتري (الخارج عن الشركاء).</p>
<strong>الحكم القانوني:</strong>
<p>لكل شريك على الشيء المباع الحق في طلب إحلاله محل المشتري الأجنبي في الصفقة ذاتها، ويشترط في ذلك عدم تعارضه مع القيود القانونية ولا يترتب عليه ضرر غير مألوف للجوار.</p>
</div>
</div>
</div>
<!-- الفصل الرابع: حق المرور -->
<div class="section" id="section4">
<div class="section-title">الفصل الرابع: حق المرور الشرعي بصفته حقاً عينياً</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف حق المرور القانوني:</span>
</div>
<div class="answer">
<p>هو الحق الممنوح لمالك الأراضي المحبوسة (التي لا تتصل بالطريق العام بطريق مباشر أو لا تتصل إليها إلا بنفقة كبيرة أو بشقة كبيرة) في أن يحصل على مرور كاف في الأراضي المجاورة للوصول إلى الطريق العام، ذلك نظراً لتعويض عادل لمالك الأراضي المجاورة.</p>
<strong>التمييز بين حق المرور القانوني وحق الارتفاق بالمرور:</strong>
<p>من حيث المصدر: حق المرور القانوني ينشأ بقوة القانون بمجرد توافر شروطه، أما حق الارتفاق بالمرور ينشأ بالتصرف القانوني (كالعقد، أو البيع، أو الاتفاقية).</p>
<p>من حيث السقوط: حق المرور القانوني لا ينقضي بعدم الاستعمال (عدم الاستعمال)، بينما حق الارتفاق بالمرور ينقضي إذا لم ُسنستعمل لمدة 15 سنة.</p>
</div>
</div>
</div>
<!-- ستتابع الأقسام الأخرى بنفس الطريقة -->
<!-- نموذج للأقسام المتبقية -->
<div class="section" id="section5">
<div class="section-title">الفصل الخامس: حق الاستيلاء</div>
<p style="text-align: center; color: #7f8c8d; padding: 30px;">
🔄 جاري تحميل المحتوى...
</p>
</div>
<div class="section" id="section6">
<div class="section-title">الفصل السادس: الترصد</div>
<p style="text-align: center; color: #7f8c8d; padding: 30px;">
🔄 جاري تحميل المحتوى...
</p>
</div>
<!-- بقية الأقسام تتبع نفس النمط -->
</main>
↑
<script> // إظهار/إخفاء الإجابات function toggleAnswer(button) { const answer = button.nextElementSibling; answer.classList.toggle('show'); button.textContent = answer.classList.contains('show') ? '−' : '+'; } // إظهار كل الإجابات function showAllAnswers() { document.querySelectorAll('.answer').forEach(answer => { answer.classList.add('show'); answer.previousElementSibling.querySelector('.toggle-btn').textContent = '−'; }); } // إخفاء كل الإجابات function hideAllAnswers() { document.querySelectorAll('.answer').forEach(answer => { answer.classList.remove('show'); answer.previousElementSibling.querySelector('.toggle-btn').textContent = '+'; }); } // عرض قسم معين function showSection(sectionId) { // إخفاء جميع الأقسام document.querySelectorAll('.section').forEach(section => { section.classList.remove('active'); }); // عرض القسم المختار document.getElementById(sectionId).classList.add('active'); // تحديث الشريط الجانبي document.querySelectorAll('.sidebar a').forEach(link => { link.classList.remove('active'); }); event.target.classList.add('active'); // التمرير للأعلى window.scrollTo({ top: 0, behavior: 'smooth' }); // إخفاء جميع الإجابات عند التنقل hideAllAnswers(); } // البحث عن الأسئلة function searchQuestions() { const searchText = document.getElementById('searchInput').value.toLowerCase(); const qaCards = document.querySelectorAll('.qa-card'); qaCards.forEach(card => { const questionText = card.querySelector('.question span:last-child').textContent.toLowerCase(); const answerText = card.querySelector('.answer').textContent.toLowerCase(); if (questionText.includes(searchText) || answerText.includes(searchText)) { card.style.display = 'block'; if (searchText) { card.style.borderRightColor = '#f39c12'; } } else { card.style.display = 'none'; } }); // إظهار/إخفاء عدد النتائج const visibleCards = document.querySelectorAll('.qa-card[style="display: block"]').length; if (searchText && visibleCards === 0) { console.log('لم يتم العثور على نتائج'); } } // زر العودة للأعلى window.addEventListener('scroll', () => { const scrollBtn = document.getElementById('scrollTopBtn'); if (window.pageYOffset > 300) { scrollBtn.classList.add('show'); } else { scrollBtn.classList.remove('show'); } }); function scrollToTop() { window.scrollTo({ top: 0, behavior: 'smooth' }); } // جعل بطاقات الأسئلة قابلة للنقر document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('.question').forEach(question => { question.addEventListener('click', function() { this.nextElementSibling.classList.toggle('show'); const btn = this.querySelector('.toggle-btn'); btn.textContent = this.nextElementSibling.classList.contains('show') ? '−' : '+'; }); }); }); </script> body {
font-family: 'Segoe UI', 'Arabic Typesetting', sans-serif;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
min-height: 100vh;
padding: 20px;
}
.container {
display: flex;
max-width: 1400px;
margin: 0 auto;
gap: 20px;
}
/* الشريط الجانبي */
.sidebar {
width: 280px;
background: white;
border-radius: 12px;
padding: 25px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
height: fit-content;
position: sticky;
top: 20px;
}
.sidebar h2 {
color: #2c3e50;
margin-bottom: 20px;
font-size: 1.3em;
border-bottom: 3px solid #3498db;
padding-bottom: 10px;
}
.sidebar ul {
list-style: none;
}
.sidebar li {
margin-bottom: 12px;
}
.sidebar a {
color: #34495e;
text-decoration: none;
display: block;
padding: 10px 15px;
border-radius: 6px;
transition: all 0.3s ease;
cursor: pointer;
}
.sidebar a:hover {
background: #ecf0f1;
color: #3498db;
transform: translateX(-5px);
}
.sidebar a.active {
background: #3498db;
color: white;
font-weight: bold;
}
/* المحتوى الرئيسي */
.main-content {
flex: 1;
}
.header {
background: white;
padding: 30px;
border-radius: 12px;
margin-bottom: 25px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
text-align: center;
}
.header h1 {
color: #2c3e50;
font-size: 2.2em;
margin-bottom: 10px;
}
.header p {
color: #7f8c8d;
font-size: 1.1em;
}
/* مربع البحث */
.search-box {
margin-bottom: 25px;
background: white;
padding: 20px;
border-radius: 12px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.search-box input {
width: 100%;
padding: 12px 15px;
border: 2px solid #ecf0f1;
border-radius: 8px;
font-size: 1em;
transition: all 0.3s ease;
font-family: 'Arabic Typesetting', sans-serif;
}
.search-box input:focus {
outline: none;
border-color: #3498db;
box-shadow: 0 0 10px rgba(52, 152, 219, 0.2);
}
/* البطاقات */
.section {
background: white;
border-radius: 12px;
padding: 25px;
margin-bottom: 25px;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
display: none;
}
.section.active {
display: block;
animation: fadeIn 0.5s ease;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.section-title {
color: #2c3e50;
font-size: 1.8em;
margin-bottom: 25px;
border-bottom: 3px solid #3498db;
padding-bottom: 15px;
}
/* بطاقة السؤال والجواب */
.qa-card {
background: #f8f9fa;
border-right: 5px solid #3498db;
padding: 20px;
margin-bottom: 20px;
border-radius: 8px;
transition: all 0.3s ease;
}
.qa-card:hover {
box-shadow: 0 6px 20px rgba(52, 152, 219, 0.15);
transform: translateX(-5px);
}
.question {
color: #2c3e50;
font-weight: bold;
font-size: 1.1em;
margin-bottom: 15px;
cursor: pointer;
display: flex;
align-items: center;
gap: 10px;
user-select: none;
}
.question:hover {
color: #3498db;
}
.toggle-btn {
width: 24px;
height: 24px;
background: #3498db;
color: white;
border: none;
border-radius: 50%;
cursor: pointer;
font-size: 0.9em;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
flex-shrink: 0;
}
.toggle-btn:hover {
background: #2980b9;
transform: scale(1.1);
}
.answer {
color: #555;
line-height: 1.8;
display: none;
padding: 15px;
background: white;
border-radius: 6px;
margin-top: 10px;
border-left: 3px solid #27ae60;
}
.answer.show {
display: block;
animation: slideDown 0.3s ease;
}
@keyframes slideDown {
from { opacity: 0; max-height: 0; }
to { opacity: 1; max-height: 1000px; }
}
/* أزرار التحكم */
.controls {
background: white;
padding: 20px;
border-radius: 12px;
margin-bottom: 25px;
display: flex;
gap: 10px;
flex-wrap: wrap;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.controls button {
padding: 10px 20px;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 1em;
font-weight: bold;
transition: all 0.3s ease;
font-family: 'Arabic Typesetting', sans-serif;
}
.btn-show-all {
background: #27ae60;
color: white;
}
.btn-show-all:hover {
background: #229954;
}
.btn-hide-all {
background: #e74c3c;
color: white;
}
.btn-hide-all:hover {
background: #c0392b;
}
.btn-print {
background: #9b59b6;
color: white;
}
.btn-print:hover {
background: #8e44ad;
}
/* الفهرس في الصفحة */
.toc {
background: #ecf0f1;
padding: 20px;
border-radius: 8px;
margin-bottom: 25px;
}
.toc h3 {
color: #2c3e50;
margin-bottom: 15px;
}
.toc ol {
margin-right: 20px;
color: #555;
}
.toc li {
margin-bottom: 8px;
cursor: pointer;
transition: all 0.3s ease;
}
.toc li:hover {
color: #3498db;
transform: translateX(-5px);
}
/* الاستجابة للهاتف */
@media (max-width: 768px) {
.container {
flex-direction: column;
}
.sidebar {
width: 100%;
position: relative;
top: 0;
}
.header h1 {
font-size: 1.6em;
}
.section-title {
font-size: 1.4em;
}
}
/* زر العودة للأعلى */
.scroll-to-top {
position: fixed;
bottom: 30px;
left: 30px;
width: 50px;
height: 50px;
background: #3498db;
color: white;
border: none;
border-radius: 50%;
cursor: pointer;
display: none;
align-items: center;
justify-content: center;
font-size: 1.5em;
box-shadow: 0 4px 12px rgba(52, 152, 219, 0.4);
transition: all 0.3s ease;
z-index: 1000;
}
.scroll-to-top:hover {
background: #2980b9;
transform: scale(1.1);
}
.scroll-to-top.show {
display: flex;
}
</style>
📚 الفهرس
<!-- المحتوى الرئيسي -->
<main class="main-content">
<!-- رأس الصفحة -->
<div class="header">
<h1>📖 مذاكرة الملكية والتأمينات</h1>
<p>نسخة تفاعلية محسّنة للمراجعة السريعة والمذاكرة الفعّالة</p>
</div>
<!-- مربع البحث -->
<div class="search-box">
<input
type="text"
id="searchInput"
placeholder="🔍 ابحث عن سؤال أو موضوع..."
onkeyup="searchQuestions()"
>
</div>
<!-- أزرار التحكم -->
<div class="controls">
<button class="btn-show-all" onclick="showAllAnswers()">✓ اظهار كل الإجابات</button>
<button class="btn-hide-all" onclick="hideAllAnswers()">✕ اخفاء كل الإجابات</button>
<button class="btn-print" onclick="window.print()">🖨️ طباعة الصفحة</button>
</div>
<!-- قسم المقدمة -->
<div class="section active" id="intro">
<div class="section-title">مرحباً بك في مذكرة الملكية والتأمينات</div>
<div class="qa-card">
<div class="question">
<span class="toggle-btn">?</span>
<span>كيف تستخدم هذا الموقع؟</span>
</div>
<div class="answer">
<strong>خطوات الاستخدام:</strong>
<ul style="margin-right: 20px; margin-top: 10px; line-height: 1.8;">
<li><strong>اختر فصل:</strong> من الشريط الجانبي على اليمين</li>
<li><strong>اقرأ السؤال:</strong> يظهر بوضوح في كل بطاقة</li>
<li><strong>اضغط على زر الإظهار:</strong> لرؤية الإجابة</li>
<li><strong>استخدم البحث:</strong> للبحث السريع عن موضوع محدد</li>
<li><strong>اطبع الصفحة:</strong> للمذاكرة دون انترنت</li>
</ul>
</div>
</div>
</div>
<!-- الفصل الأول -->
<div class="section" id="section1">
<div class="section-title">الفصل الأول: الاستعمال والاستغلال</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>اشرح عنصري الاستعمال والاستغلال باعتبارهما من عناصر الملكية، وضح الفرق بين الصمار والمنتجات؟</span>
</div>
<div class="answer">
<strong>عنصر الاستعمال:</strong>
<p>هو استخدام الشيء في غرضه المعد له للحصول على منفعته، دون المساس بجوهره (مثل: سكن الدار، زراعة الأرض، قيام المالك بأعمال الصيانة للمك).</p>
<strong>الفرق بين الاستعمال والاستغلال:</strong>
<p>الاستعمال لا ينتج عنه "عمال" تُباع أو تُؤجر، بينما الاستغلال مخصوص للحصول على عمال الشيء (مثل تأجير الدار للغير).</p>
<strong>تداخل الاستعمال مع التصرف:</strong>
<p>قد يختلط الاستعمال بالتصرف في الأشياء القابلة للاستهلاك بمجرد استعمالها (كالوقود والطعام)، أو عند استعمال النقود، لأن استعمالهما يُعد تصرفاً قانوناً (إعادة تحرير رسمية).</p>
<strong>القيود:</strong>
<p>المالك حر في طريقة استعمال ملكه بشرط ألا يتعارض ذلك مع القيود القانونية ولا يترتب عليه ضرر غير مألوف للجوار.</p>
</div>
</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف الاستغلال:</span>
</div>
<div class="answer">
<p>هو القيام بالأعمال اللازمة للحصول على عمال الشيء (ما يغله الشيء من عوائد)، ويكون الاستغلال إما:</p>
<ul style="margin-right: 20px; margin-top: 10px;">
<li><strong>مباشر:</strong> كأن يزرع المالك أرضه ويجني محصوليها بنفسه</li>
<li><strong>غير مباشر:</strong> كأن يؤجر المالك لمين أو أرضه أو سياته للغير مقابل أجرة (يلغ)</li>
</ul>
</div>
</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف الثمار:</span>
</div>
<div class="answer">
<p>هي كل ما ينتجه الشيء في مواعيد دورية ومنتظمة دون أن يترتب على أخذه انتقاص أو مساس بجرم الشيء الأصلي، وتنقسم إلى ثلاثة أنواع:</p>
<ul style="margin-right: 20px; margin-top: 10px;">
<li><strong>ثمار طبيعية:</strong> التي تتولد بفعل الطبيعة وحدها دون تدخل الإنسان (كالدلاء وعسل النحل وصوف الأغنام)</li>
<li><strong>ثمار مستحدثة أو صناعية:</strong> التي تتولد بفعل وعمل الإنسان (كالمحاصيل الزراعية من حبوب وخضر وفاكهة)</li>
<li><strong>ثمار مدنية:</strong> العائد النقدي الدوري الذي يرتبط به الغير مقابل استغلاله للشيء بموجب عقد (كأجرة المباني والأراضي، وأرباح السفن والسندات)</li>
</ul>
</div>
</div>
</div>
<!-- الفصل الثاني -->
<div class="section" id="section2">
<div class="section-title">الفصل الثاني: تعريف المنتجات والتمييز بينها وبين الثمار</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف المنتجات:</span>
</div>
<div class="answer">
<p>هي العوائد غير الدورية التي يغلها الشيء ويترتب على تحصيلها انتقاص واقتطاع من أصل الشيء وجرمه (مثل: المعادن من المنجم، والأحجار من المحجر، والأشجار من غابات غير معدة للقطع الدوري)، وهي تنتهي وتنفد بعد وقت طويل أو قصير.</p>
<strong>دور الإرادة والتخصيص:</strong>
<p>يمكن لإرادة المالك أن تحول "المنتجات" إلى "عمال" إذاريه بجعل اقتطاعها دورياً ومنتظماً (مثل: تنظيم المالك للمنجم أو إعادة الشيء إعداداً خاصاً ليستخرج منه كميات برسبة دورية ومنتظمة، دون فناء يرسع للأصول).</p>
<strong>التمييز بين الثمار والمنتجات:</strong>
<ul style="margin-right: 20px; margin-top: 10px;">
<li>الثمار: عوائد دورية منتظمة، لا تترتب على أخذها انتقاص أو مساس بجرم الشيء الأصلي</li>
<li>المنتجات: عوائد غير دورية، يترتب على تحصيلها انتقاص واقتطاع من أصل الشيء</li>
</ul>
</div>
</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>ما المقصود بالرقبة والمنتفع في حالة الانتفاع؟</span>
</div>
<div class="answer">
<p><strong>الرقبة:</strong> هي الملكية الباقية بعد انتهاء حق الانتفاع</p>
<p><strong>المنتفع:</strong> هو من له حق الانتفاع بالعقار</p>
<strong>الحالة الأولى (رد الشيء بالحياة):</strong>
<p>إذا انتقل الشيء إلى يد حائز ثم استرد المالك ملكه: ينتقل حك الرقبة إليه. الحائز حسن النية لا يرجع ما قضاه، بينما حسن النية سيء يرجع جميع الثمار والمنتجات التي قبضها أو قرصها قبل رد الحياة.</p>
<p><strong>الحالة الثانية (حك الانتفاع):</strong>
<p>إذا تقرر حك انتفاع على العقار:</p>
<ul style="margin-right: 20px; margin-top: 10px;">
<li><strong>المنتفع:</strong> يملك الحق في الحصول على الثمار فقط لاستغلاليها</li>
<li><strong>مالك الرقبة:</strong> تظل المنتجات من حقه وحده لأنها تقتطع من أصل الشيء الذي يعود إليه بعد انتهاء مدة الانتفاع</li>
</ul>
</div>
</div>
</div>
<!-- الفصل الثالث: الشفيع -->
<div class="section" id="section3">
<div class="section-title">الفصل الثالث: الشفيع</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>بين الشروط الواجب توافرها في الشيء المشفوع لألأخذ بالشفعة بالتفصيل المناسب؟</span>
</div>
<div class="answer">
<strong>الشرط الأول: أن يكون الشيء المرهون عقاراً:</strong>
<p>يقتصر الرهن الرسمي على العقارات فقط دون المنقولات (إلا إذا وجد نص يقضي بغير ذلك). والعقار هو كل شيء ثابت بحرمه مستقر فيه لا يمكن نقله دون تلف أو تغيير في هيئته.</p>
<strong>الشرط الثاني: أن يكون العقار المرهون مما يصح التعامل فيه بالمزاد العلني:</strong>
<p>يجب أن يكون العقار قابلاً للبيع. اسثناء: الدولة حسب قوانينها، والعقارات المملوكة للدولة (سواء عامة أو خاصة)، ومنع الممارسة والخبراء وقضاة الدوائر من شراء الأموال المعهود إليهم بإدارتها.</p>
<strong>الشرط الثالث: أن يكون الشيء المرهون موجوداً وقت الرهن:</strong>
<p>ممكن أن يرهن ملك معين موجود فعلاً (وليس مستقبلاً). يشمل هذا:</p>
<ul style="margin-right: 20px; margin-top: 10px;">
<li>العقار يجب أن يكون موجوداً فعلاً وقت البيع المشفوع</li>
<li>إذا زالت الملكية بالتقادم، يجب أن تكون مدة التقادم قد اكتملت قبل البيع</li>
<li>إذا آلت الملكية بتصرف قانوني (كالشراء الوديع للمثل)، يجب أن يكون هذا التصرف قد تم قبل انعقاد البيع الصادر للأجنبي</li>
</ul>
</div>
</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف الشفيع:</span>
</div>
<div class="answer">
<p>الشفيع هو الشخص الذي يطلب تملك العقار المباع بدلاً من المشتري (الخارج عن الشركاء).</p>
<strong>الحكم القانوني:</strong>
<p>لكل شريك على الشيء المباع الحق في طلب إحلاله محل المشتري الأجنبي في الصفقة ذاتها، ويشترط في ذلك عدم تعارضه مع القيود القانونية ولا يترتب عليه ضرر غير مألوف للجوار.</p>
</div>
</div>
</div>
<!-- الفصل الرابع: حق المرور -->
<div class="section" id="section4">
<div class="section-title">الفصل الرابع: حق المرور الشرعي بصفته حقاً عينياً</div>
<div class="qa-card">
<div class="question" onclick="this.nextElementSibling.classList.toggle('show')">
<span class="toggle-btn">+</span>
<span>عرّف حق المرور القانوني:</span>
</div>
<div class="answer">
<p>هو الحق الممنوح لمالك الأراضي المحبوسة (التي لا تتصل بالطريق العام بطريق مباشر أو لا تتصل إليها إلا بنفقة كبيرة أو بشقة كبيرة) في أن يحصل على مرور كاف في الأراضي المجاورة للوصول إلى الطريق العام، ذلك نظراً لتعويض عادل لمالك الأراضي المجاورة.</p>
<strong>التمييز بين حق المرور القانوني وحق الارتفاق بالمرور:</strong>
<p>من حيث المصدر: حق المرور القانوني ينشأ بقوة القانون بمجرد توافر شروطه، أما حق الارتفاق بالمرور ينشأ بالتصرف القانوني (كالعقد، أو البيع، أو الاتفاقية).</p>
<p>من حيث السقوط: حق المرور القانوني لا ينقضي بعدم الاستعمال (عدم الاستعمال)، بينما حق الارتفاق بالمرور ينقضي إذا لم ُسنستعمل لمدة 15 سنة.</p>
</div>
</div>
</div>
<!-- ستتابع الأقسام الأخرى بنفس الطريقة -->
<!-- نموذج للأقسام المتبقية -->
<div class="section" id="section5">
<div class="section-title">الفصل الخامس: حق الاستيلاء</div>
<p style="text-align: center; color: #7f8c8d; padding: 30px;">
🔄 جاري تحميل المحتوى...
</p>
</div>
<div class="section" id="section6">
<div class="section-title">الفصل السادس: الترصد</div>
<p style="text-align: center; color: #7f8c8d; padding: 30px;">
🔄 جاري تحميل المحتوى...
</p>
</div>
<!-- بقية الأقسام تتبع نفس النمط -->
</main>
↑
<script> // إظهار/إخفاء الإجابات function toggleAnswer(button) { const answer = button.nextElementSibling; answer.classList.toggle('show'); button.textContent = answer.classList.contains('show') ? '−' : '+'; } // إظهار كل الإجابات function showAllAnswers() { document.querySelectorAll('.answer').forEach(answer => { answer.classList.add('show'); answer.previousElementSibling.querySelector('.toggle-btn').textContent = '−'; }); } // إخفاء كل الإجابات function hideAllAnswers() { document.querySelectorAll('.answer').forEach(answer => { answer.classList.remove('show'); answer.previousElementSibling.querySelector('.toggle-btn').textContent = '+'; }); } // عرض قسم معين function showSection(sectionId) { // إخفاء جميع الأقسام document.querySelectorAll('.section').forEach(section => { section.classList.remove('active'); }); // عرض القسم المختار document.getElementById(sectionId).classList.add('active'); // تحديث الشريط الجانبي document.querySelectorAll('.sidebar a').forEach(link => { link.classList.remove('active'); }); event.target.classList.add('active'); // التمرير للأعلى window.scrollTo({ top: 0, behavior: 'smooth' }); // إخفاء جميع الإجابات عند التنقل hideAllAnswers(); } // البحث عن الأسئلة function searchQuestions() { const searchText = document.getElementById('searchInput').value.toLowerCase(); const qaCards = document.querySelectorAll('.qa-card'); qaCards.forEach(card => { const questionText = card.querySelector('.question span:last-child').textContent.toLowerCase(); const answerText = card.querySelector('.answer').textContent.toLowerCase(); if (questionText.includes(searchText) || answerText.includes(searchText)) { card.style.display = 'block'; if (searchText) { card.style.borderRightColor = '#f39c12'; } } else { card.style.display = 'none'; } }); // إظهار/إخفاء عدد النتائج const visibleCards = document.querySelectorAll('.qa-card[style="display: block"]').length; if (searchText && visibleCards === 0) { console.log('لم يتم العثور على نتائج'); } } // زر العودة للأعلى window.addEventListener('scroll', () => { const scrollBtn = document.getElementById('scrollTopBtn'); if (window.pageYOffset > 300) { scrollBtn.classList.add('show'); } else { scrollBtn.classList.remove('show'); } }); function scrollToTop() { window.scrollTo({ top: 0, behavior: 'smooth' }); } // جعل بطاقات الأسئلة قابلة للنقر document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('.question').forEach(question => { question.addEventListener('click', function() { this.nextElementSibling.classList.toggle('show'); const btn = this.querySelector('.toggle-btn'); btn.textContent = this.nextElementSibling.classList.contains('show') ? '−' : '+'; }); }); }); </script><div class="container">
<h1>سمحي لي.. ❤️</h1>
<div class="heart">❤️</div>
<p>ما بغيتش هاد الخلاف يفرق بينا، حيت بلاصتك فقلبي كبيرة بزاف وغالية عليا.</p>
<div class="message">
"كنبغيك وما بغيتش نشوفك زعلانة مني. صافي ياك مسامحاني؟"
</div>
<button class="btn" onclick="sayYes()">اضغطي هنا إذا سامحتيني</button>
</div>
<script>
function sayYes() {
alert("شكراً ليك بزاف! ❤️ ربي يخليك ليا وما يحرمنيش منك.");
}
</script>
[
salom
](`
-
### ** @ #url**
`)
بكل تأكيد! يمكنك نسخ الكود اللي أعطيتك إياه ولصقه في ملف جديد على جهازك باسم مثلاً index.html، ثم تفتحه في المتصفح لتشوف الموقع يعمل مباشرة. إليك خطوات بسيطة:
- افتح محرر النصوص اللي تفضله، مثل Notepad على Windows أو TextEdit على Mac، أو أي محرر كود مثل Visual Studio Code.
- الصق الكود التالي:
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8" />
<title>اختبار بسيط</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
padding: 20px;
direction: rtl;
}
.question {
margin-bottom: 15px;
font-size: 1.2em;
}
.options {
margin-bottom: 20px;
}
button {
padding: 10px 20px;
font-size: 1em;
}
#result {
margin-top: 20px;
font-weight: bold;
}
</style>
</head>
<body>
<h1>اختبار لتقييم المعرفة</h1>
<div id="quiz-container">
<div class="question" id="question"></div>
<div class="options" id="options"></div>
<button onclick="nextQuestion()">التالي</button>
<div id="result"></div>
</div>
<script>
const questions = [
{
question: "ما هو عاصمه فرنسا؟",
options: ["باريس", "مدريد", "روما", "برلين"],
answer: "باريس"
},
{
question: "كم عدد ألوان قوس قزح؟",
options: ["5", "6", "7", "8"],
answer: "7"
}
];
let currentQuestionIndex = 0;
let score = 0;
function loadQuestion() {
const q = questions[currentQuestionIndex];
document.getElementById('question').innerText = q.question;
const optionsDiv = document.getElementById('options');
optionsDiv.innerHTML = '';
q.options.forEach(option => {
const radio = document.createElement('input');
radio.type = 'radio';
radio.name = 'answer';
radio.value = option;
const label = document.createElement('label');
label.innerText = option;
optionsDiv.appendChild(radio);
optionsDiv.appendChild(label);
optionsDiv.appendChild(document.createElement('br'));
});
}
function nextQuestion() {
const selected = document.querySelector('input[name="answer"]:checked');
if (!selected) {
alert('اختر إجابة من الخيارات');
return;
}
if (selected.value === questions[currentQuestionIndex].answer) {
score++;
}
currentQuestionIndex++;
if (currentQuestionIndex < questions.length) {
loadQuestion();
} else {
showResult();
}
}
function showResult() {
document.getElementById('quiz-container').innerHTML = `<h2>نتيجتك: ${score} من ${questions.length}</h2>`;
}
// بداية الاختبار
loadQuestion();
</script>
</body>
</html>- احفظ الملف باسم
index.html. - افتح الملف باستخدام أي متصفح مثل Chrome أو Firefox.
- ستظهر لك الصفحة مباشرة وتقدر تلعب الاختبار.
أما إذا ترغب في استضافة الموقع على الإنترنت بحيث يكون متاح للجميع، تقدر تستخدم خدمات مجانية مثل GitHub Pages، أو Firebase Hosting، أو Netlify.
هل تريد أن أساعدك في خطوة استضافة الموقع على الإنترنت أيضًا؟




ئامێز گیان ✨
داوای لێبووردن دەکەم بۆ هەر کێشەیەک کە لە نێوانماندا ڕوویداوە و بووەتە هۆی دڵگرانی. زۆر دڵگرانم، چونکە تۆ هەمیشە وەک هاوڕێیەکی بەوەفا چاتم بۆ دەکەیت و لێم دەپرسیت، بۆیە ویستم ئەمڕۆ من یەکەم بم و ئەم پەیامەت بۆ بنێرم. هیوادارم بتوانم ببمە دڵخۆشی ڕۆژەکەت و جارێکی تر پەیوەندییە هاوڕێیەتییەکەمان وەک جاران بە دڵخۆشی بەردەوام بێت. 💖