style.css 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896
  1. /* Web Publication System Styles */
  2. /* Reset and Base Styles */
  3. * {
  4. margin: 0;
  5. padding: 0;
  6. box-sizing: border-box;
  7. }
  8. body {
  9. font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
  10. line-height: 1.6;
  11. color: #333;
  12. background-color: #f8f9fa;
  13. }
  14. .container {
  15. max-width: 1200px;
  16. margin: 0 auto;
  17. padding: 0 20px;
  18. }
  19. /* Typography */
  20. h1, h2, h3, h4, h5, h6 {
  21. margin-bottom: 1rem;
  22. font-weight: 600;
  23. line-height: 1.2;
  24. }
  25. h1 { font-size: 2.5rem; }
  26. h2 { font-size: 2rem; }
  27. h3 { font-size: 1.5rem; }
  28. h4 { font-size: 1.25rem; }
  29. p {
  30. margin-bottom: 1rem;
  31. }
  32. a {
  33. color: #007bff;
  34. text-decoration: none;
  35. transition: color 0.2s ease;
  36. }
  37. a:hover {
  38. color: #0056b3;
  39. text-decoration: underline;
  40. }
  41. /* Buttons */
  42. .btn {
  43. display: inline-block;
  44. padding: 0.5rem 1rem;
  45. font-size: 0.875rem;
  46. font-weight: 500;
  47. text-align: center;
  48. text-decoration: none;
  49. border: 1px solid transparent;
  50. border-radius: 0.375rem;
  51. cursor: pointer;
  52. transition: all 0.2s ease;
  53. }
  54. .btn-primary {
  55. color: white;
  56. background-color: #007bff;
  57. border-color: #007bff;
  58. }
  59. .btn-primary:hover {
  60. background-color: #0056b3;
  61. border-color: #0056b3;
  62. color: white;
  63. text-decoration: none;
  64. }
  65. .btn-secondary {
  66. color: #6c757d;
  67. background-color: #fff;
  68. border-color: #6c757d;
  69. }
  70. .btn-secondary:hover {
  71. background-color: #6c757d;
  72. color: white;
  73. text-decoration: none;
  74. }
  75. .btn-danger {
  76. color: white;
  77. background-color: #dc3545;
  78. border-color: #dc3545;
  79. }
  80. .btn-danger:hover {
  81. background-color: #c82333;
  82. border-color: #c82333;
  83. color: white;
  84. text-decoration: none;
  85. }
  86. .btn-sm {
  87. padding: 0.25rem 0.5rem;
  88. font-size: 0.75rem;
  89. }
  90. /* Forms */
  91. .form-group {
  92. margin-bottom: 1.5rem;
  93. }
  94. .form-group label {
  95. display: block;
  96. margin-bottom: 0.5rem;
  97. font-weight: 500;
  98. }
  99. input[type="text"],
  100. input[type="email"],
  101. input[type="password"],
  102. textarea,
  103. select {
  104. width: 100%;
  105. padding: 0.75rem;
  106. border: 1px solid #ddd;
  107. border-radius: 0.375rem;
  108. font-size: 1rem;
  109. transition: border-color 0.2s ease;
  110. }
  111. input:focus,
  112. textarea:focus,
  113. select:focus {
  114. outline: none;
  115. border-color: #007bff;
  116. box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.1);
  117. }
  118. textarea {
  119. resize: vertical;
  120. min-height: 100px;
  121. }
  122. /* Alerts */
  123. .alert {
  124. padding: 1rem;
  125. margin-bottom: 1.5rem;
  126. border: 1px solid transparent;
  127. border-radius: 0.375rem;
  128. }
  129. .alert-success {
  130. color: #155724;
  131. background-color: #d4edda;
  132. border-color: #c3e6cb;
  133. }
  134. .alert-error {
  135. color: #721c24;
  136. background-color: #f8d7da;
  137. border-color: #f5c6cb;
  138. }
  139. /* Login Page */
  140. .login-page {
  141. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  142. min-height: 100vh;
  143. display: flex;
  144. align-items: center;
  145. justify-content: center;
  146. }
  147. .login-form {
  148. background: white;
  149. padding: 2rem;
  150. border-radius: 0.5rem;
  151. box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
  152. width: 100%;
  153. max-width: 400px;
  154. }
  155. .login-form h1 {
  156. text-align: center;
  157. margin-bottom: 2rem;
  158. color: #333;
  159. }
  160. /* Admin Layout */
  161. .admin-layout {
  162. min-height: 100vh;
  163. background-color: #f8f9fa;
  164. }
  165. .admin-header {
  166. background: white;
  167. border-bottom: 1px solid #dee2e6;
  168. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  169. }
  170. .header-content {
  171. display: flex;
  172. align-items: center;
  173. justify-content: space-between;
  174. padding: 1rem 2rem;
  175. max-width: 1200px;
  176. margin: 0 auto;
  177. }
  178. .admin-nav {
  179. display: flex;
  180. gap: 2rem;
  181. }
  182. .nav-link {
  183. color: #6c757d;
  184. text-decoration: none;
  185. padding: 0.5rem 0;
  186. border-bottom: 2px solid transparent;
  187. transition: all 0.2s ease;
  188. }
  189. .nav-link:hover,
  190. .nav-link.active {
  191. color: #007bff;
  192. border-bottom-color: #007bff;
  193. }
  194. .user-info {
  195. color: #6c757d;
  196. font-size: 0.875rem;
  197. }
  198. .admin-main {
  199. padding: 2rem;
  200. max-width: 1200px;
  201. margin: 0 auto;
  202. }
  203. /* Dashboard Stats */
  204. .stats-grid {
  205. display: grid;
  206. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  207. gap: 1.5rem;
  208. margin-bottom: 2rem;
  209. }
  210. .stat-card {
  211. background: white;
  212. padding: 1.5rem;
  213. border-radius: 0.5rem;
  214. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  215. text-align: center;
  216. }
  217. .stat-card h3 {
  218. color: #6c757d;
  219. font-size: 0.875rem;
  220. margin-bottom: 0.5rem;
  221. }
  222. .stat-number {
  223. font-size: 2rem;
  224. font-weight: 600;
  225. color: #007bff;
  226. }
  227. /* Tables */
  228. .table-container {
  229. background: white;
  230. border-radius: 0.5rem;
  231. overflow: hidden;
  232. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  233. margin-bottom: 1.5rem;
  234. }
  235. .admin-table {
  236. width: 100%;
  237. border-collapse: collapse;
  238. }
  239. .admin-table th,
  240. .admin-table td {
  241. padding: 1rem;
  242. text-align: left;
  243. border-bottom: 1px solid #dee2e6;
  244. }
  245. .admin-table th {
  246. background-color: #f8f9fa;
  247. font-weight: 600;
  248. color: #495057;
  249. }
  250. .admin-table tr:hover {
  251. background-color: #f8f9fa;
  252. }
  253. .status-badge {
  254. padding: 0.25rem 0.5rem;
  255. border-radius: 0.25rem;
  256. font-size: 0.75rem;
  257. font-weight: 500;
  258. text-transform: uppercase;
  259. }
  260. .status-published {
  261. background-color: #d4edda;
  262. color: #155724;
  263. }
  264. .status-draft {
  265. background-color: #fff3cd;
  266. color: #856404;
  267. }
  268. .status-archived {
  269. background-color: #f8d7da;
  270. color: #721c24;
  271. }
  272. /* Publication Form */
  273. .publication-form {
  274. background: white;
  275. padding: 2rem;
  276. border-radius: 0.5rem;
  277. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  278. }
  279. .category-checkboxes {
  280. display: grid;
  281. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  282. gap: 0.5rem;
  283. }
  284. .checkbox-label {
  285. display: flex;
  286. align-items: center;
  287. gap: 0.5rem;
  288. cursor: pointer;
  289. }
  290. .checkbox-label input[type="checkbox"] {
  291. width: auto;
  292. }
  293. .form-actions {
  294. display: flex;
  295. gap: 1rem;
  296. margin-top: 2rem;
  297. }
  298. /* Public Site Styles */
  299. .site-header {
  300. background: white;
  301. border-bottom: 1px solid #dee2e6;
  302. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  303. }
  304. .site-header .container {
  305. display: flex;
  306. align-items: center;
  307. justify-content: space-between;
  308. padding: 1rem 20px;
  309. }
  310. .site-header h1 {
  311. margin: 0;
  312. }
  313. .site-header h1 a {
  314. color: #333;
  315. text-decoration: none;
  316. }
  317. .main-nav {
  318. display: flex;
  319. gap: 2rem;
  320. }
  321. .main-nav a {
  322. color: #6c757d;
  323. text-decoration: none;
  324. padding: 0.5rem 0;
  325. border-bottom: 2px solid transparent;
  326. transition: all 0.2s ease;
  327. }
  328. .main-nav a:hover {
  329. color: #007bff;
  330. border-bottom-color: #007bff;
  331. }
  332. /* Content Layout */
  333. .content-layout {
  334. display: grid;
  335. grid-template-columns: 300px 1fr;
  336. gap: 2rem;
  337. margin-top: 2rem;
  338. }
  339. /* Sidebar */
  340. .sidebar {
  341. background: white;
  342. padding: 1.5rem;
  343. border-radius: 0.5rem;
  344. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  345. height: fit-content;
  346. }
  347. .sidebar-section {
  348. margin-bottom: 2rem;
  349. }
  350. .sidebar-section:last-child {
  351. margin-bottom: 0;
  352. }
  353. .sidebar-section h3 {
  354. font-size: 1.125rem;
  355. margin-bottom: 1rem;
  356. color: #333;
  357. }
  358. .search-form {
  359. display: flex;
  360. gap: 0.5rem;
  361. }
  362. .search-form input {
  363. flex: 1;
  364. }
  365. .category-list {
  366. list-style: none;
  367. }
  368. .category-list li {
  369. margin-bottom: 0.5rem;
  370. }
  371. .category-list a {
  372. display: flex;
  373. justify-content: space-between;
  374. align-items: center;
  375. padding: 0.5rem;
  376. color: #6c757d;
  377. text-decoration: none;
  378. border-radius: 0.25rem;
  379. transition: all 0.2s ease;
  380. }
  381. .category-list a:hover,
  382. .category-list a.active {
  383. background-color: #f8f9fa;
  384. color: #007bff;
  385. }
  386. .category-list .count {
  387. font-size: 0.875rem;
  388. color: #6c757d;
  389. }
  390. /* Main Content */
  391. .main-content {
  392. min-height: 400px;
  393. }
  394. /* Publication Lists */
  395. .publication-list {
  396. display: flex;
  397. flex-direction: column;
  398. gap: 1.5rem;
  399. }
  400. .publication-summary {
  401. background: white;
  402. padding: 1.5rem;
  403. border-radius: 0.5rem;
  404. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  405. }
  406. .publication-summary h3 {
  407. margin-bottom: 0.5rem;
  408. }
  409. .publication-summary h3 a {
  410. color: #333;
  411. text-decoration: none;
  412. }
  413. .publication-summary h3 a:hover {
  414. color: #007bff;
  415. }
  416. .publication-summary .summary {
  417. color: #6c757d;
  418. margin-bottom: 1rem;
  419. }
  420. .publication-summary .meta {
  421. display: flex;
  422. flex-wrap: wrap;
  423. gap: 1rem;
  424. font-size: 0.875rem;
  425. color: #6c757d;
  426. }
  427. .category-tag {
  428. background-color: #e9ecef;
  429. color: #495057;
  430. padding: 0.25rem 0.5rem;
  431. border-radius: 0.25rem;
  432. font-size: 0.75rem;
  433. text-decoration: none;
  434. }
  435. .category-tag:hover {
  436. background-color: #dee2e6;
  437. color: #495057;
  438. text-decoration: none;
  439. }
  440. /* Full Publication */
  441. .publication-full {
  442. background: white;
  443. padding: 2rem;
  444. border-radius: 0.5rem;
  445. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  446. margin-bottom: 2rem;
  447. }
  448. .publication-header {
  449. margin-bottom: 2rem;
  450. padding-bottom: 1rem;
  451. border-bottom: 1px solid #dee2e6;
  452. }
  453. .publication-header h1 {
  454. margin-bottom: 1rem;
  455. }
  456. .publication-meta {
  457. display: flex;
  458. flex-wrap: wrap;
  459. gap: 1rem;
  460. font-size: 0.875rem;
  461. color: #6c757d;
  462. margin-bottom: 1rem;
  463. }
  464. .publication-categories {
  465. display: flex;
  466. flex-wrap: wrap;
  467. gap: 0.5rem;
  468. }
  469. .publication-summary {
  470. background-color: #f8f9fa;
  471. padding: 1rem;
  472. border-radius: 0.375rem;
  473. margin-bottom: 2rem;
  474. border-left: 4px solid #007bff;
  475. }
  476. .publication-body {
  477. font-size: 1.125rem;
  478. line-height: 1.8;
  479. }
  480. /* Related Publications */
  481. .related-publications {
  482. margin-bottom: 2rem;
  483. }
  484. .publication-grid {
  485. display: grid;
  486. grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  487. gap: 1.5rem;
  488. margin-top: 1.5rem;
  489. }
  490. .publication-card {
  491. background: white;
  492. padding: 1.5rem;
  493. border-radius: 0.5rem;
  494. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  495. }
  496. .publication-card h3 {
  497. margin-bottom: 0.5rem;
  498. }
  499. .publication-card h3 a {
  500. color: #333;
  501. text-decoration: none;
  502. }
  503. .publication-card h3 a:hover {
  504. color: #007bff;
  505. }
  506. .publication-card .summary {
  507. color: #6c757d;
  508. margin-bottom: 1rem;
  509. }
  510. .publication-card .meta {
  511. font-size: 0.875rem;
  512. color: #6c757d;
  513. }
  514. /* Search */
  515. .search-form-large {
  516. background: white;
  517. padding: 2rem;
  518. border-radius: 0.5rem;
  519. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  520. margin-bottom: 2rem;
  521. display: flex;
  522. gap: 1rem;
  523. }
  524. .search-form-large input {
  525. flex: 1;
  526. font-size: 1.125rem;
  527. }
  528. .search-results h3 {
  529. margin-bottom: 1rem;
  530. }
  531. .results-count {
  532. color: #6c757d;
  533. margin-bottom: 1.5rem;
  534. }
  535. /* Pagination */
  536. .pagination {
  537. display: flex;
  538. justify-content: center;
  539. gap: 0.5rem;
  540. margin-top: 2rem;
  541. }
  542. .pagination-link,
  543. .pagination-current {
  544. padding: 0.5rem 0.75rem;
  545. border: 1px solid #dee2e6;
  546. border-radius: 0.375rem;
  547. text-decoration: none;
  548. color: #007bff;
  549. }
  550. .pagination-current {
  551. background-color: #007bff;
  552. color: white;
  553. border-color: #007bff;
  554. }
  555. .pagination-link:hover {
  556. background-color: #e9ecef;
  557. color: #007bff;
  558. }
  559. /* Footer */
  560. .site-footer {
  561. background: white;
  562. border-top: 1px solid #dee2e6;
  563. margin-top: 3rem;
  564. padding: 2rem 0;
  565. text-align: center;
  566. color: #6c757d;
  567. }
  568. /* Actions */
  569. .actions {
  570. margin-top: 1.5rem;
  571. }
  572. .publication-actions {
  573. text-align: center;
  574. margin-top: 2rem;
  575. }
  576. /* LDAP Authentication Styles */
  577. .auth-info {
  578. background-color: #e3f2fd;
  579. border: 1px solid #bbdefb;
  580. border-radius: 0.375rem;
  581. padding: 1rem;
  582. margin-bottom: 1.5rem;
  583. }
  584. .ldap-notice {
  585. color: #1565c0;
  586. font-size: 0.875rem;
  587. margin: 0;
  588. }
  589. .ldap-notice strong {
  590. color: #0d47a1;
  591. }
  592. .help-text {
  593. font-size: 0.75rem;
  594. color: #6c757d;
  595. margin-top: 0.25rem;
  596. font-style: italic;
  597. }
  598. /* LDAP Users Page Styles */
  599. .ldap-search {
  600. background: white;
  601. padding: 1.5rem;
  602. border-radius: 0.5rem;
  603. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  604. margin-bottom: 2rem;
  605. }
  606. .ldap-status {
  607. margin-top: 1rem;
  608. padding: 0.5rem;
  609. border-radius: 0.25rem;
  610. font-weight: 500;
  611. }
  612. .status-ok {
  613. background-color: #d4edda;
  614. color: #155724;
  615. }
  616. .status-error {
  617. background-color: #f8d7da;
  618. color: #721c24;
  619. }
  620. .user-exists {
  621. background-color: #f8f9fa;
  622. opacity: 0.7;
  623. }
  624. .ldap-import-form {
  625. background: white;
  626. padding: 1.5rem;
  627. border-radius: 0.5rem;
  628. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  629. }
  630. /* Setup Form Enhancements */
  631. .setup-form {
  632. background: white;
  633. padding: 2rem;
  634. border-radius: 0.5rem;
  635. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  636. max-width: 800px;
  637. margin: 0 auto;
  638. }
  639. .setup-form h2 {
  640. border-bottom: 2px solid #007bff;
  641. padding-bottom: 0.5rem;
  642. margin-top: 2rem;
  643. margin-bottom: 1.5rem;
  644. }
  645. .setup-form h2:first-child {
  646. margin-top: 0;
  647. }
  648. .setup-form h3 {
  649. color: #495057;
  650. font-size: 1.125rem;
  651. margin-bottom: 1rem;
  652. }
  653. .setup-form input[type="checkbox"] {
  654. width: auto;
  655. margin-right: 0.5rem;
  656. }
  657. .setup-form label {
  658. font-weight: 500;
  659. margin-bottom: 0.5rem;
  660. display: block;
  661. }
  662. /* Language Switcher */
  663. .language-switcher {
  664. display: flex;
  665. align-items: center;
  666. gap: 0.5rem;
  667. font-size: 0.875rem;
  668. margin-left: auto;
  669. }
  670. .language-label {
  671. color: #6c757d;
  672. font-weight: 500;
  673. }
  674. .language-link {
  675. padding: 0.25rem 0.5rem;
  676. border-radius: 0.25rem;
  677. text-decoration: none;
  678. color: #6c757d;
  679. transition: all 0.2s ease;
  680. }
  681. .language-link:hover {
  682. background-color: #f8f9fa;
  683. color: #495057;
  684. }
  685. .language-link.active {
  686. background-color: #007bff;
  687. color: white;
  688. font-weight: 500;
  689. }
  690. /* Responsive Design */
  691. @media (max-width: 768px) {
  692. .content-layout {
  693. grid-template-columns: 1fr;
  694. }
  695. .header-content {
  696. flex-direction: column;
  697. gap: 1rem;
  698. text-align: center;
  699. }
  700. .admin-nav {
  701. flex-wrap: wrap;
  702. justify-content: center;
  703. gap: 1rem;
  704. }
  705. .stats-grid {
  706. grid-template-columns: repeat(2, 1fr);
  707. }
  708. .publication-grid {
  709. grid-template-columns: 1fr;
  710. }
  711. .publication-meta,
  712. .publication-summary .meta {
  713. flex-direction: column;
  714. gap: 0.5rem;
  715. }
  716. .search-form-large {
  717. flex-direction: column;
  718. }
  719. .form-actions {
  720. flex-direction: column;
  721. }
  722. .category-checkboxes {
  723. grid-template-columns: 1fr;
  724. }
  725. .setup-form {
  726. padding: 1rem;
  727. }
  728. .language-switcher {
  729. margin-left: 0;
  730. margin-top: 0.5rem;
  731. justify-content: center;
  732. }
  733. }
  734. @media (max-width: 480px) {
  735. .container {
  736. padding: 0 15px;
  737. }
  738. .admin-main {
  739. padding: 1rem;
  740. }
  741. .publication-full,
  742. .publication-form {
  743. padding: 1rem;
  744. }
  745. .stats-grid {
  746. grid-template-columns: 1fr;
  747. }
  748. .table-container {
  749. overflow-x: auto;
  750. }
  751. }