enhanced-styles.css 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731
  1. /* 增强样式 - 现代化界面、专业数据表格、公式显示和虚拟键盘 */
  2. /* 全局样式增强 */
  3. :root {
  4. --primary-color: #4a6cf7;
  5. --primary-hover: #3a5ce4;
  6. --secondary-color: #6c757d;
  7. --success-color: #28a745;
  8. --danger-color: #dc3545;
  9. --warning-color: #ffc107;
  10. --info-color: #17a2b8;
  11. --light-color: #f8f9fa;
  12. --dark-color: #343a40;
  13. --border-color: #e0e0e0;
  14. --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.05);
  15. --shadow-md: 0 4px 8px rgba(0, 0, 0, 0.1);
  16. --shadow-lg: 0 8px 16px rgba(0, 0, 0, 0.15);
  17. --transition: all 0.3s ease;
  18. --border-radius: 6px;
  19. }
  20. body {
  21. background-color: #f8f9fc;
  22. color: #333;
  23. line-height: 1.6;
  24. font-family: 'Microsoft YaHei', 'PingFang SC', 'Segoe UI', Arial, sans-serif;
  25. }
  26. .container {
  27. max-width: 1200px;
  28. margin: 30px auto;
  29. padding: 25px;
  30. background-color: #fff;
  31. border-radius: var(--border-radius);
  32. box-shadow: var(--shadow-md);
  33. transition: var(--transition);
  34. }
  35. h1 {
  36. text-align: center;
  37. margin-bottom: 25px;
  38. color: #2c3e50;
  39. font-weight: 600;
  40. position: relative;
  41. padding-bottom: 10px;
  42. }
  43. h1:after {
  44. content: '';
  45. position: absolute;
  46. bottom: 0;
  47. left: 50%;
  48. transform: translateX(-50%);
  49. width: 80px;
  50. height: 3px;
  51. background: var(--primary-color);
  52. border-radius: 3px;
  53. }
  54. /* 标签页样式增强 */
  55. .tabs {
  56. display: flex;
  57. margin-bottom: 25px;
  58. border-bottom: 1px solid var(--border-color);
  59. overflow-x: auto;
  60. scrollbar-width: thin;
  61. position: relative;
  62. }
  63. .tabs::-webkit-scrollbar {
  64. height: 4px;
  65. }
  66. .tabs::-webkit-scrollbar-thumb {
  67. background-color: var(--secondary-color);
  68. border-radius: 4px;
  69. }
  70. .tab-btn {
  71. padding: 12px 24px;
  72. background: none;
  73. border: none;
  74. cursor: pointer;
  75. font-size: 16px;
  76. font-weight: 500;
  77. color: var(--secondary-color);
  78. transition: var(--transition);
  79. position: relative;
  80. white-space: nowrap;
  81. }
  82. .tab-btn:hover {
  83. color: var(--primary-color);
  84. }
  85. .tab-btn.active {
  86. color: var(--primary-color);
  87. font-weight: 600;
  88. }
  89. .tab-btn.active:after {
  90. content: '';
  91. position: absolute;
  92. bottom: -1px;
  93. left: 0;
  94. width: 100%;
  95. height: 3px;
  96. background: var(--primary-color);
  97. border-radius: 3px 3px 0 0;
  98. transition: var(--transition);
  99. }
  100. .tab-pane {
  101. display: none;
  102. padding: 20px 0;
  103. animation: fadeIn 0.3s ease-in-out;
  104. }
  105. .tab-pane.active {
  106. display: block;
  107. }
  108. @keyframes fadeIn {
  109. from { opacity: 0; transform: translateY(10px); }
  110. to { opacity: 1; transform: translateY(0); }
  111. }
  112. /* 输入组样式增强 */
  113. .input-group {
  114. margin-bottom: 20px;
  115. display: flex;
  116. flex-wrap: wrap;
  117. align-items: center;
  118. gap: 10px;
  119. }
  120. label {
  121. font-weight: 500;
  122. color: #444;
  123. margin-right: 10px;
  124. }
  125. input[type="text"],
  126. input[type="number"],
  127. select,
  128. textarea {
  129. padding: 10px 14px;
  130. border: 1px solid var(--border-color);
  131. border-radius: var(--border-radius);
  132. font-size: 14px;
  133. transition: var(--transition);
  134. box-shadow: var(--shadow-sm);
  135. width: 220px;
  136. }
  137. input[type="text"]:focus,
  138. input[type="number"]:focus,
  139. select:focus,
  140. textarea:focus {
  141. border-color: var(--primary-color);
  142. outline: none;
  143. box-shadow: 0 0 0 3px rgba(74, 108, 247, 0.15);
  144. }
  145. textarea {
  146. width: 100%;
  147. resize: vertical;
  148. min-height: 120px;
  149. }
  150. button {
  151. padding: 10px 18px;
  152. background-color: var(--primary-color);
  153. color: white;
  154. border: none;
  155. border-radius: var(--border-radius);
  156. cursor: pointer;
  157. font-size: 14px;
  158. font-weight: 500;
  159. transition: var(--transition);
  160. box-shadow: var(--shadow-sm);
  161. display: inline-flex;
  162. align-items: center;
  163. justify-content: center;
  164. }
  165. button:hover {
  166. background-color: var(--primary-hover);
  167. box-shadow: var(--shadow-md);
  168. transform: translateY(-1px);
  169. }
  170. button:active {
  171. transform: translateY(0);
  172. box-shadow: var(--shadow-sm);
  173. }
  174. .primary-btn {
  175. background-color: var(--primary-color);
  176. padding: 12px 24px;
  177. font-size: 16px;
  178. font-weight: 500;
  179. letter-spacing: 0.5px;
  180. }
  181. /* 专业数据表格样式 */
  182. .table-container {
  183. max-height: 350px;
  184. overflow-y: auto;
  185. margin-bottom: 20px;
  186. border: 1px solid var(--border-color);
  187. border-radius: var(--border-radius);
  188. box-shadow: var(--shadow-sm);
  189. scrollbar-width: thin;
  190. }
  191. /* 数据输入切换样式 */
  192. .input-mode-toggle {
  193. display: flex;
  194. margin-bottom: 15px;
  195. background-color: #f0f0f0;
  196. border-radius: var(--border-radius);
  197. padding: 3px;
  198. width: fit-content;
  199. }
  200. .input-mode-toggle button {
  201. background: none;
  202. border: none;
  203. padding: 8px 16px;
  204. border-radius: var(--border-radius);
  205. cursor: pointer;
  206. font-size: 14px;
  207. color: var(--secondary-color);
  208. transition: var(--transition);
  209. box-shadow: none;
  210. }
  211. .input-mode-toggle button.active {
  212. background-color: white;
  213. color: var(--primary-color);
  214. box-shadow: var(--shadow-sm);
  215. }
  216. .input-mode-toggle button:hover:not(.active) {
  217. background-color: rgba(255, 255, 255, 0.5);
  218. }
  219. .input-mode {
  220. display: none;
  221. }
  222. .input-mode.active {
  223. display: block;
  224. animation: fadeIn 0.3s ease-in-out;
  225. }
  226. .csv-input-container {
  227. margin-bottom: 15px;
  228. }
  229. .table-container::-webkit-scrollbar {
  230. width: 6px;
  231. }
  232. .table-container::-webkit-scrollbar-thumb {
  233. background-color: var(--secondary-color);
  234. border-radius: 3px;
  235. }
  236. .professional-table {
  237. width: 100%;
  238. border-collapse: collapse;
  239. font-size: 14px;
  240. box-shadow: none;
  241. }
  242. .professional-table thead th {
  243. background-color: #f8f9fa;
  244. color: #444;
  245. font-weight: 600;
  246. text-align: center;
  247. padding: 12px;
  248. border: 1px solid var(--border-color);
  249. position: sticky;
  250. top: 0;
  251. z-index: 10;
  252. box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  253. }
  254. .professional-table th.sortable {
  255. cursor: pointer;
  256. user-select: none;
  257. }
  258. .professional-table th.sortable:hover {
  259. background-color: #eef1f6;
  260. }
  261. .professional-table th.sortable::after {
  262. content: '⇅';
  263. margin-left: 5px;
  264. font-size: 12px;
  265. opacity: 0.5;
  266. transition: var(--transition);
  267. }
  268. .professional-table th.sorted-asc::after {
  269. content: '↑';
  270. opacity: 1;
  271. color: var(--primary-color);
  272. }
  273. .professional-table th.sorted-desc::after {
  274. content: '↓';
  275. opacity: 1;
  276. color: var(--primary-color);
  277. }
  278. .professional-table tbody tr {
  279. transition: var(--transition);
  280. }
  281. .professional-table tbody tr:nth-child(even) {
  282. background-color: #f9fafc;
  283. }
  284. .professional-table tbody tr:hover {
  285. background-color: #f0f7ff;
  286. }
  287. .professional-table td {
  288. padding: 10px 12px;
  289. border: 1px solid var(--border-color);
  290. text-align: right;
  291. transition: var(--transition);
  292. }
  293. .professional-table input {
  294. width: 100%;
  295. padding: 8px 10px;
  296. border: 1px solid #ddd;
  297. border-radius: 4px;
  298. text-align: right;
  299. transition: var(--transition);
  300. }
  301. .professional-table input:focus {
  302. border-color: var(--primary-color);
  303. outline: none;
  304. box-shadow: 0 0 0 3px rgba(74, 108, 247, 0.15);
  305. }
  306. .table-actions {
  307. display: flex;
  308. justify-content: space-between;
  309. align-items: center;
  310. margin: 15px 0;
  311. flex-wrap: wrap;
  312. gap: 10px;
  313. }
  314. .table-actions button {
  315. margin-right: 8px;
  316. }
  317. .table-pagination {
  318. display: flex;
  319. align-items: center;
  320. }
  321. .table-pagination button {
  322. padding: 6px 10px;
  323. margin: 0 3px;
  324. background-color: #f0f0f0;
  325. border: 1px solid #ddd;
  326. border-radius: 4px;
  327. cursor: pointer;
  328. box-shadow: none;
  329. }
  330. .table-pagination button:hover {
  331. background-color: #e0e0e0;
  332. box-shadow: var(--shadow-sm);
  333. }
  334. .table-pagination button.active {
  335. background-color: var(--primary-color);
  336. color: white;
  337. border-color: var(--primary-color);
  338. }
  339. .remove-row {
  340. background-color: var(--danger-color);
  341. padding: 6px 12px;
  342. font-size: 13px;
  343. }
  344. .remove-row:hover {
  345. background-color: #c82333;
  346. }
  347. /* 结果区域样式增强 */
  348. .results-container {
  349. margin-top: 35px;
  350. display: flex;
  351. flex-wrap: wrap;
  352. gap: 25px;
  353. }
  354. .plot-container {
  355. flex: 1;
  356. min-width: 300px;
  357. border: 1px solid var(--border-color);
  358. border-radius: var(--border-radius);
  359. padding: 15px;
  360. background-color: #fff;
  361. box-shadow: var(--shadow-sm);
  362. transition: var(--transition);
  363. }
  364. .plot-container:hover {
  365. box-shadow: var(--shadow-md);
  366. }
  367. #plot-area {
  368. width: 100%;
  369. height: 400px;
  370. border-radius: 4px;
  371. overflow: hidden;
  372. }
  373. .equation-container {
  374. flex: 1;
  375. min-width: 300px;
  376. border: 1px solid var(--border-color);
  377. border-radius: var(--border-radius);
  378. padding: 20px;
  379. background-color: #fff;
  380. box-shadow: var(--shadow-sm);
  381. transition: var(--transition);
  382. }
  383. .equation-container:hover {
  384. box-shadow: var(--shadow-md);
  385. }
  386. .equation-container h3 {
  387. margin-bottom: 20px;
  388. color: #2c3e50;
  389. font-weight: 600;
  390. position: relative;
  391. padding-bottom: 8px;
  392. border-bottom: 1px solid var(--border-color);
  393. }
  394. /* 数学公式显示样式 */
  395. .math-container {
  396. padding: 20px;
  397. background-color: #f9fafc;
  398. border-radius: var(--border-radius);
  399. margin: 15px 0;
  400. overflow-x: auto;
  401. border: 1px solid var(--border-color);
  402. box-shadow: var(--shadow-sm);
  403. }
  404. .equation-display {
  405. font-size: 18px;
  406. line-height: 1.6;
  407. text-align: center;
  408. padding: 15px;
  409. min-height: 60px;
  410. }
  411. .stats-display {
  412. margin-top: 25px;
  413. padding: 18px;
  414. background-color: #f8f9fc;
  415. border-radius: var(--border-radius);
  416. border-left: 4px solid var(--primary-color);
  417. box-shadow: var(--shadow-sm);
  418. }
  419. .stats-display h4 {
  420. margin-bottom: 12px;
  421. color: #2c3e50;
  422. font-weight: 600;
  423. }
  424. .stats-display table {
  425. width: 100%;
  426. border-collapse: collapse;
  427. }
  428. .stats-display table th,
  429. .stats-display table td {
  430. padding: 10px;
  431. text-align: left;
  432. border-bottom: 1px solid var(--border-color);
  433. }
  434. .stats-display table th {
  435. font-weight: 600;
  436. color: #444;
  437. }
  438. /* 响应式设计 */
  439. @media (max-width: 768px) {
  440. .container {
  441. padding: 15px;
  442. margin: 15px auto;
  443. }
  444. .input-group {
  445. flex-direction: column;
  446. align-items: flex-start;
  447. }
  448. input[type="text"],
  449. input[type="number"],
  450. select {
  451. width: 100%;
  452. }
  453. .results-container {
  454. flex-direction: column;
  455. }
  456. .plot-container,
  457. .equation-container {
  458. min-width: 100%;
  459. }
  460. .tab-btn {
  461. padding: 10px 15px;
  462. font-size: 14px;
  463. }
  464. }
  465. /* 虚拟键盘样式 */
  466. .math-keyboard {
  467. position: fixed;
  468. bottom: 0;
  469. left: 0;
  470. width: 100%;
  471. background-color: #f8f9fa;
  472. border-top: 1px solid var(--border-color);
  473. padding: 15px;
  474. display: none;
  475. z-index: 1000;
  476. box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.1);
  477. transition: transform 0.3s ease;
  478. max-height: 50vh;
  479. overflow-y: auto;
  480. transform: translateY(100%);
  481. }
  482. .math-keyboard.active {
  483. display: block;
  484. transform: translateY(0);
  485. }
  486. @keyframes slideUp {
  487. from { transform: translateY(100%); }
  488. to { transform: translateY(0); }
  489. }
  490. .keyboard-container {
  491. display: flex;
  492. flex-wrap: wrap;
  493. justify-content: center;
  494. max-width: 800px;
  495. margin: 0 auto;
  496. }
  497. .keyboard-row {
  498. display: flex;
  499. width: 100%;
  500. margin-bottom: 8px;
  501. }
  502. .keyboard-key {
  503. flex: 1;
  504. min-width: 40px;
  505. height: 45px;
  506. margin: 3px;
  507. background-color: white;
  508. border: 1px solid var(--border-color);
  509. border-radius: 6px;
  510. display: flex;
  511. align-items: center;
  512. justify-content: center;
  513. cursor: pointer;
  514. font-size: 16px;
  515. user-select: none;
  516. transition: var(--transition);
  517. box-shadow: var(--shadow-sm);
  518. }
  519. .keyboard-key:hover {
  520. background-color: #f0f7ff;
  521. border-color: var(--primary-color);
  522. box-shadow: var(--shadow-md);
  523. transform: translateY(-2px);
  524. }
  525. .keyboard-key:active {
  526. transform: translateY(0);
  527. box-shadow: var(--shadow-sm);
  528. }
  529. .keyboard-key.function {
  530. background-color: #eef1f6;
  531. font-weight: 500;
  532. }
  533. .keyboard-key.wide {
  534. flex: 2;
  535. }
  536. .keyboard-key.special {
  537. background-color: #e8f0fe;
  538. color: var(--primary-color);
  539. font-weight: 500;
  540. }
  541. .keyboard-close {
  542. position: absolute;
  543. top: 10px;
  544. right: 10px;
  545. background-color: var(--danger-color);
  546. color: white;
  547. border: none;
  548. border-radius: 50%;
  549. font-size: 18px;
  550. cursor: pointer;
  551. padding: 5px 10px;
  552. box-shadow: var(--shadow-sm);
  553. z-index: 1010;
  554. display: flex;
  555. align-items: center;
  556. justify-content: center;
  557. }
  558. .keyboard-close:hover {
  559. background-color: #c82333;
  560. box-shadow: var(--shadow-md);
  561. }
  562. .keyboard-toggle {
  563. position: fixed;
  564. bottom: 20px;
  565. right: 20px;
  566. background-color: var(--primary-color);
  567. color: white;
  568. border: none;
  569. border-radius: 50%;
  570. font-size: 24px;
  571. cursor: pointer;
  572. width: 50px;
  573. height: 50px;
  574. display: flex;
  575. align-items: center;
  576. justify-content: center;
  577. box-shadow: var(--shadow-md);
  578. z-index: 999;
  579. transition: var(--transition);
  580. }
  581. .keyboard-toggle.active {
  582. background-color: var(--success-color);
  583. transform: translateY(-3px);
  584. box-shadow: var(--shadow-lg);
  585. }
  586. .keyboard-toggle:hover {
  587. background-color: var(--primary-hover);
  588. transform: translateY(-3px);
  589. box-shadow: var(--shadow-lg);
  590. }
  591. .keyboard-panel {
  592. display: none;
  593. }
  594. .keyboard-panel.active {
  595. display: block;
  596. }
  597. @media (max-width: 768px) {
  598. .math-keyboard {
  599. max-height: 70vh;
  600. }
  601. .keyboard-container {
  602. max-width: 100%;
  603. }
  604. .keyboard-key {
  605. min-width: 30px;
  606. height: 40px;
  607. font-size: 14px;
  608. }
  609. }
  610. .keyboard-tabs {
  611. display: flex;
  612. border-bottom: 1px solid var(--border-color);
  613. margin-bottom: 10px;
  614. padding-bottom: 5px;
  615. overflow-x: auto;
  616. }
  617. .keyboard-tab {
  618. padding: 8px 15px;
  619. margin-right: 5px;
  620. cursor: pointer;
  621. border-radius: 4px 4px 0 0;
  622. background-color: #f0f0f0;
  623. transition: var(--transition);
  624. }
  625. .keyboard-tab:hover {
  626. background-color: #e0e0e0;
  627. }
  628. .keyboard-tab.active {
  629. background-color: var(--primary-color);
  630. color: white;
  631. }