|
7 | 7 | <title>PythonIDE - 掌上的 Python & JavaScript 开发环境</title> |
8 | 8 | <link rel="icon" type="image/png" href="icon.png" /> |
9 | 9 | <style> |
10 | | - @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&family=Noto+Sans+SC:wght@400;500;600;700&display=swap'); |
11 | | - |
12 | 10 | :root { |
13 | 11 | --bg: #050508; |
14 | 12 | --card: rgba(22, 27, 34, 0.7); |
|
49 | 47 | html { scroll-behavior: smooth; } |
50 | 48 |
|
51 | 49 | body { |
52 | | - font-family: 'Noto Sans SC', -apple-system, sans-serif; |
| 50 | + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; |
53 | 51 | background: var(--bg); |
54 | 52 | color: var(--text); |
55 | 53 | line-height: 1.7; |
|
300 | 298 | background: linear-gradient(90deg, var(--border), transparent); |
301 | 299 | } |
302 | 300 |
|
303 | | - /* Bento Grid - 特色布局 */ |
| 301 | + /* Bento Grid - 为什么选择 */ |
304 | 302 | .bento { |
305 | 303 | display: grid; |
306 | 304 | grid-template-columns: repeat(3, 1fr); |
307 | | - grid-template-rows: auto auto; |
308 | | - gap: 1.5rem; |
309 | | - margin-bottom: 4rem; |
| 305 | + gap: 1.25rem; |
| 306 | + margin-bottom: 2rem; |
310 | 307 | } |
311 | 308 | .bento-card { |
312 | 309 | background: var(--card); |
|
334 | 331 | box-shadow: 0 20px 60px rgba(0,0,0,0.4), 0 0 40px rgba(255, 255, 255, 0.06); |
335 | 332 | } |
336 | 333 | .bento-card:hover::before { opacity: 1; } |
337 | | - .bento-card.featured { grid-column: span 2; } |
338 | | - .bento-card .icon { font-size: 2rem; margin-bottom: 1rem; } |
| 334 | + .bento-card .icon { font-size: 1.5rem; margin-bottom: 0.75rem; } |
339 | 335 | .bento-card h3 { font-size: 1.2rem; margin-bottom: 0.5rem; color: var(--text); } |
340 | 336 | .bento-card p { color: var(--text-muted); font-size: 0.95rem; } |
341 | 337 |
|
342 | 338 | .why-grid { |
343 | 339 | display: grid; |
344 | | - grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); |
| 340 | + grid-template-columns: repeat(3, 1fr); |
345 | 341 | gap: 1rem; |
346 | | - margin: 2rem 0; |
| 342 | + margin-top: 0; |
347 | 343 | } |
348 | 344 | .why-item { |
349 | 345 | display: flex; |
350 | | - align-items: flex-start; |
| 346 | + align-items: center; |
351 | 347 | gap: 1rem; |
352 | | - padding: 1.25rem; |
| 348 | + padding: 1rem 1.25rem; |
353 | 349 | background: var(--card); |
354 | 350 | border-radius: 16px; |
355 | 351 | border: 1px solid var(--border); |
|
358 | 354 | .why-item:hover { |
359 | 355 | border-color: var(--hover-border); |
360 | 356 | background: var(--card-hover); |
361 | | - transform: translateX(6px); |
362 | | - box-shadow: 0 10px 40px rgba(0,0,0,0.3); |
| 357 | + transform: translateY(-2px); |
| 358 | + box-shadow: 0 8px 24px rgba(0,0,0,0.2); |
363 | 359 | } |
364 | 360 | .why-item .check { |
365 | 361 | width: 28px; |
|
439 | 435 | transition: all 0.3s; |
440 | 436 | } |
441 | 437 | .tab-btn:hover { |
442 | | - color: #fff; |
| 438 | + color: var(--text); |
443 | 439 | border-color: var(--hover-border); |
444 | | - background: rgba(255, 255, 255, 0.06); |
| 440 | + background: var(--card-hover); |
445 | 441 | } |
446 | 442 | .tab-btn.active { |
447 | | - background: linear-gradient(135deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.05)); |
448 | | - color: #fff; |
| 443 | + background: var(--card-hover); |
| 444 | + color: var(--text); |
449 | 445 | border-color: var(--hover-border); |
450 | | - box-shadow: 0 0 30px rgba(255, 255, 255, 0.1); |
| 446 | + box-shadow: 0 0 20px var(--hover-glow); |
451 | 447 | } |
452 | 448 | .tab-content { display: none; } |
453 | 449 | .tab-content.active { |
|
462 | 458 | gap: 1rem; |
463 | 459 | } |
464 | 460 | .feature-chip { |
465 | | - padding: 1rem; |
| 461 | + padding: 1rem 1.25rem; |
466 | 462 | background: var(--card); |
467 | 463 | border-radius: 12px; |
468 | 464 | border: 1px solid var(--border); |
469 | 465 | transition: all 0.3s; |
| 466 | + text-align: center; |
| 467 | + color: var(--text); |
470 | 468 | } |
471 | 469 | .feature-chip:hover { |
472 | 470 | border-color: var(--hover-border); |
|
494 | 492 | gap: 1rem; |
495 | 493 | } |
496 | 494 | .link-card { |
497 | | - display: block; |
| 495 | + display: flex; |
| 496 | + flex-direction: column; |
| 497 | + align-items: center; |
| 498 | + justify-content: center; |
| 499 | + text-align: center; |
498 | 500 | padding: 1.25rem; |
499 | 501 | background: var(--card); |
500 | 502 | border-radius: 16px; |
|
509 | 511 | transform: translateY(-4px); |
510 | 512 | box-shadow: 0 10px 40px rgba(255, 255, 255, 0.08); |
511 | 513 | } |
512 | | - .link-card span { color: #e6edf3; font-weight: 600; } |
| 514 | + .link-card span { color: var(--text); font-weight: 600; display: block; margin-bottom: 0.25rem; } |
513 | 515 |
|
514 | 516 | /* Donate */ |
515 | 517 | .donate-section { |
|
540 | 542 | } |
541 | 543 | .footer a { color: var(--accent); text-decoration: none; } |
542 | 544 | .footer a:hover { text-shadow: 0 0 20px var(--accent-glow); } |
543 | | - .link-card span { color: var(--text); } |
544 | 545 |
|
545 | 546 | @media (prefers-color-scheme: light) { |
546 | 547 | .btn-appstore { border-color: rgba(0,0,0,0.15); } |
|
553 | 554 | } |
554 | 555 |
|
555 | 556 | @media (max-width: 768px) { |
556 | | - .bento-card.featured { grid-column: span 1; } |
557 | 557 | .bento { grid-template-columns: 1fr; } |
| 558 | + .why-grid { grid-template-columns: 1fr; } |
558 | 559 | .nav-links { display: none; } |
| 560 | + .feature-grid { grid-template-columns: 1fr; } |
559 | 561 | } |
560 | 562 | </style> |
561 | 563 | </head> |
@@ -605,30 +607,35 @@ <h2 class="section-title">🌟 为什么选择 PythonIDE?</h2> |
605 | 607 | <p style="margin-bottom: 1.5rem; color: var(--text-muted); font-style: italic;">不是把电脑版塞进手机,而是专为触摸屏和移动场景重新设计的编程环境。</p> |
606 | 608 |
|
607 | 609 | <div class="bento"> |
608 | | - <div class="bento-card featured"> |
| 610 | + <div class="bento-card"> |
609 | 611 | <div class="icon">🚀</div> |
610 | 612 | <h3>完全本地运行</h3> |
611 | | - <p>代码执行不依赖任何服务器,无网络也能用。Python 3.13 完整标准库,asyncio、threading、socket 全都有。</p> |
| 613 | + <p>代码执行不依赖任何服务器,无网络也能用。</p> |
612 | 614 | </div> |
613 | 615 | <div class="bento-card"> |
614 | 616 | <div class="icon">⚡</div> |
615 | 617 | <h3>12 个 C 扩展</h3> |
616 | | - <p>NumPy、Pillow、cryptography 等,速度是纯 Python 的 10–100 倍。</p> |
| 618 | + <p>NumPy、Pillow、cryptography 等,10–100 倍加速。</p> |
617 | 619 | </div> |
618 | 620 | <div class="bento-card"> |
619 | 621 | <div class="icon">📦</div> |
620 | 622 | <h3>150+ 预装库</h3> |
621 | | - <p>常用库开箱即用,搜索 PyPI 在线安装更多。</p> |
| 623 | + <p>常用库开箱即用,搜索 PyPI 在线安装。</p> |
622 | 624 | </div> |
623 | 625 | <div class="bento-card"> |
624 | 626 | <div class="icon">🤖</div> |
625 | 627 | <h3>AI 助手</h3> |
626 | | - <p>免费额度直接用,支持 BYOK 无限使用。</p> |
| 628 | + <p>免费额度 + BYOK 无限使用。</p> |
627 | 629 | </div> |
628 | | - <div class="bento-card featured"> |
| 630 | + <div class="bento-card"> |
629 | 631 | <div class="icon">📱</div> |
630 | 632 | <h3>iOS 深度集成</h3> |
631 | | - <p>灵动岛、Siri 快捷指令、x-callback-url、相册/相机 API 一应俱全。</p> |
| 633 | + <p>灵动岛、Siri 快捷指令、x-callback-url。</p> |
| 634 | + </div> |
| 635 | + <div class="bento-card"> |
| 636 | + <div class="icon">🔒</div> |
| 637 | + <h3>隐私安全</h3> |
| 638 | + <p>Face ID 锁定,本地运行,代码不外传。</p> |
632 | 639 | </div> |
633 | 640 | </div> |
634 | 641 |
|
@@ -754,8 +761,8 @@ <h2 class="section-title">☕ 支持开发</h2> |
754 | 761 | constructor() { |
755 | 762 | this.x = Math.random() * w; |
756 | 763 | this.y = Math.random() * h; |
757 | | - this.vx = (Math.random() - 0.5) * 0.8; |
758 | | - this.vy = (Math.random() - 0.5) * 0.8; |
| 764 | + this.vx = (Math.random() - 0.5) * 0.15; |
| 765 | + this.vy = (Math.random() - 0.5) * 0.15; |
759 | 766 | this.r = Math.random() * 2 + 1; |
760 | 767 | this.opacity = Math.random() * 0.5 + 0.2; |
761 | 768 | } |
|
0 commit comments