style.scss 26 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579
  1. /*
  2. style.css is generated from style.scss
  3. do not edit style.css
  4. edit style.scss
  5. */
  6. /* adopted from https://piccalil.li/blog/a-more-modern-css-reset/ */
  7. @layer reset {
  8. /* Box sizing rules */
  9. *,
  10. *::before,
  11. *::after {
  12. box-sizing: border-box;
  13. }
  14. /* Prevent font size inflation */
  15. html {
  16. -moz-text-size-adjust: none;
  17. -webkit-text-size-adjust: none;
  18. text-size-adjust: none;
  19. }
  20. /* Remove default margin in favour of better control in authored CSS */
  21. body,
  22. h1,
  23. h2,
  24. h3,
  25. h4,
  26. p,
  27. figure,
  28. blockquote,
  29. dl,
  30. dd {
  31. margin-block-end: 0;
  32. }
  33. /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
  34. ul[role='list'],
  35. ol[role='list'] {
  36. list-style: none;
  37. }
  38. /* Fix list style to not indent */
  39. ul,
  40. ol,
  41. menu {
  42. padding-inline-start: 1.5em;
  43. }
  44. li {
  45. padding-inline-start: 0.25em;
  46. }
  47. /* Set core body defaults */
  48. body {
  49. min-height: 100vh;
  50. line-height: 1.5;
  51. }
  52. /* Set shorter line heights on headings and interactive elements */
  53. h1,
  54. h2,
  55. h3,
  56. h4,
  57. button,
  58. input,
  59. label {
  60. line-height: 1.1;
  61. }
  62. /* Balance text wrapping on headings */
  63. h1,
  64. h2,
  65. h3,
  66. h4 {
  67. text-wrap: balance;
  68. }
  69. /* A elements that don't have a class get default styles */
  70. a:not([class]) {
  71. text-decoration-skip-ink: auto;
  72. color: currentColor;
  73. }
  74. /* Make images easier to work with */
  75. img,
  76. picture {
  77. // max-width: 100%;
  78. display: block;
  79. }
  80. /* Inherit fonts for inputs and buttons */
  81. input,
  82. button,
  83. textarea,
  84. select {
  85. font-family: inherit;
  86. font-size: inherit;
  87. }
  88. /* Make sure textareas without a rows attribute are not tiny */
  89. textarea:not([rows]) {
  90. min-height: 10em;
  91. }
  92. /* Anything that has been anchored to should have extra scroll margin */
  93. :target {
  94. scroll-margin-block: 5ex;
  95. }
  96. }
  97. $bg: #131516;
  98. $bg-secondary: #222;
  99. $fg: #fff;
  100. $fg-secondary: #aaa;
  101. $link: #118bee;
  102. $highlight: #fc365b;
  103. $border-radius: 5px;
  104. $line-height: 1.5;
  105. $active-brightness: 0.85;
  106. $hover-brightness: 1.2;
  107. $box-shadow: 2px 2px 10px;
  108. $color-shadow: #bbbbbb20;
  109. $font-family: "Roboto", "Open Sans", "Noto Sans", sans-serif, "Noto Sans CJK JP";
  110. $small-artwork-width: 184px;
  111. $large-artwork-width: 288px;
  112. $novel-width: 392px;
  113. $small-breakpoint: 440px;
  114. html {
  115. font-size: 62.5%;
  116. }
  117. body {
  118. top: 0;
  119. margin: 0;
  120. background-color: $bg;
  121. color: $fg;
  122. font-size: 1.8rem;
  123. font-family: $font-family;
  124. margin-bottom: 10px;
  125. }
  126. main {
  127. @media (min-width: $small-breakpoint) {
  128. margin-inline: 5px;
  129. }
  130. }
  131. h1,
  132. h2,
  133. h3,
  134. h4,
  135. h5,
  136. h6 {
  137. margin-block-end: 0.5em;
  138. }
  139. h1 {
  140. font-size: 1.5em;
  141. }
  142. h2 {
  143. font-size: 1.17em;
  144. }
  145. h3 {
  146. font-size: 1em;
  147. }
  148. h4 {
  149. font-size: 0.83em;
  150. }
  151. h5 {
  152. font-size: 0.67em;
  153. }
  154. h6 {
  155. font-size: 0.50em;
  156. }
  157. a {
  158. color: $link;
  159. text-decoration: none;
  160. }
  161. /* Scrollbars */
  162. * {
  163. scrollbar-width: thin;
  164. // invalid line
  165. // scrollbar-color: $link auto;
  166. }
  167. *::-webkit-scrollbar {
  168. width: 5px;
  169. height: 5px;
  170. }
  171. *::-webkit-scrollbar-track {
  172. background: transparent;
  173. }
  174. *::-webkit-scrollbar-thumb {
  175. background-color: $link;
  176. border-radius: 10px;
  177. }
  178. .special-symbol {
  179. display: inline-flex;
  180. align-items: center;
  181. justify-content: center;
  182. width: 1.8rem;
  183. height: 1.8rem;
  184. font-size: 1.8rem;
  185. }
  186. [hidden] {
  187. display: none;
  188. }
  189. input,
  190. label,
  191. select,
  192. textarea {
  193. display: block;
  194. font-size: inherit;
  195. max-width: 600px;
  196. }
  197. input[type="checkbox"],
  198. input[type="radio"] {
  199. display: inline-block;
  200. }
  201. input[type="checkbox"]+label,
  202. input[type="radio"]+label {
  203. display: inline-flex;
  204. flex-direction: column;
  205. font-weight: normal;
  206. position: relative;
  207. top: 1px;
  208. }
  209. input[type="range"] {
  210. padding: 0.4rem 0;
  211. }
  212. input,
  213. select,
  214. textarea {
  215. border: 1px solid $bg-secondary;
  216. border-radius: $border-radius;
  217. margin-bottom: 1rem;
  218. padding: 0.4rem 0.8rem;
  219. }
  220. input[type="text"],
  221. textarea {
  222. width: calc(100% - 1.6rem);
  223. background-color: $bg-secondary;
  224. color: $fg-secondary;
  225. }
  226. input[readonly],
  227. textarea[readonly] {
  228. background-color: $bg-secondary;
  229. }
  230. .form-field {
  231. border: 1px solid $bg-secondary;
  232. border-radius: $border-radius;
  233. box-shadow: $box-shadow $color-shadow;
  234. display: block;
  235. max-width: 800px;
  236. min-width: 460px;
  237. padding: 1.5rem;
  238. margin: 0.5rem 0;
  239. header {
  240. margin: 1.5rem 0;
  241. padding: 1.5rem 0;
  242. }
  243. label {
  244. font-weight: bold;
  245. margin-bottom: 0.2rem;
  246. }
  247. }
  248. a b,
  249. a em,
  250. a i,
  251. a strong,
  252. button,
  253. input[type="submit"],
  254. .switch-button,
  255. .pagination-button {
  256. border-radius: $border-radius;
  257. display: inline-block;
  258. font-size: medium;
  259. font-weight: bold;
  260. line-height: $line-height;
  261. margin: 0.5rem 0;
  262. padding: 0.5rem 1rem;
  263. }
  264. button,
  265. input[type="submit"],
  266. .switch-button,
  267. .pagination-button {
  268. font-family: $font-family;
  269. }
  270. button:active,
  271. input[type="submit"]:active,
  272. .switch-button:active,
  273. .pagination-button:active {
  274. filter: brightness($active-brightness);
  275. }
  276. button:hover,
  277. input[type="submit"]:hover,
  278. .switch-button:hover,
  279. .pagination-button:hover {
  280. cursor: pointer;
  281. filter: brightness($hover-brightness);
  282. }
  283. a b,
  284. a strong,
  285. button,
  286. input[type="submit"],
  287. .switch-button,
  288. .pagination-button {
  289. background-color: $link;
  290. color: $fg;
  291. }
  292. input[type="submit"][hidden] {
  293. display: none;
  294. }
  295. .switch-button[selected="1"] {
  296. background: $highlight;
  297. }
  298. .switch-seperator {
  299. display: inline-block;
  300. margin-left: 10px;
  301. }
  302. .pagination {
  303. text-align: center;
  304. form {
  305. display: inline-block;
  306. }
  307. .pagination-buttons {
  308. text-align: center;
  309. input {
  310. width: 5em;
  311. }
  312. }
  313. .pagination-button {
  314. margin-right: 5px;
  315. }
  316. #highlight {
  317. filter: brightness($hover-brightness);
  318. }
  319. .disabled {
  320. pointer-events: none;
  321. background-color: $bg-secondary;
  322. filter: brightness(1);
  323. }
  324. }
  325. .tabs {
  326. margin-top: 1rem;
  327. margin-bottom: 1rem;
  328. border: 1px solid white;
  329. border-radius: 3px;
  330. overflow: hidden;
  331. display: flex;
  332. flex-wrap: wrap;
  333. input[type="radio"]:checked + label + .tabs-content {
  334. display: block;
  335. }
  336. .tabs-content {
  337. order: 999;
  338. width: 100%;
  339. border-top: 1px solid white;
  340. padding: .5rem 1rem 1rem;
  341. display: none;
  342. }
  343. }
  344. #site-config {
  345. display: none;
  346. }
  347. // https://stackoverflow.com/questions/63787241/css-how-to-create-an-infinitely-moving-repeating-linear-gradient/63787567#63787567
  348. #loading-indicator {
  349. z-index: 2;
  350. isolation: isolate;
  351. position: sticky;
  352. top: 0;
  353. height: 4px;
  354. margin-bottom: -4px;
  355. // background-size: 200px auto;
  356. animation: rolling-something 1s linear infinite;
  357. background-image: repeating-linear-gradient(-0.25turn, $link 0vw, transparent 40vw);
  358. background-size: 80vw auto;
  359. will-change: opacity;
  360. transition: opacity 0.3s;
  361. opacity: 0;
  362. &.htmx-request {
  363. opacity: 1;
  364. transition-duration: 1s;
  365. transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
  366. }
  367. }
  368. @keyframes rolling-something {
  369. 0% {
  370. background-position-x: 0vw
  371. }
  372. 100% {
  373. background-position-x: 40vw
  374. }
  375. }
  376. nav {
  377. margin-bottom: 15px;
  378. padding-left: 20px;
  379. padding-right: 20px;
  380. .navigation-wrapper {
  381. padding-block: 15px;
  382. display: flex;
  383. justify-content: space-between;
  384. align-items: center;
  385. width: auto;
  386. }
  387. // .navbar-shadow {
  388. // width: 100%;
  389. // height: 10px;
  390. // background: repeating-linear-gradient(
  391. // 52.5deg,
  392. // rgba(32, 32, 32, 0.7),
  393. // rgba(32, 32, 32, 0.7) 14px,
  394. // rgba(240, 248, 255, 0) 14px,
  395. // rgba(240, 248, 255, 0) 28px
  396. // );
  397. // }
  398. .sidebar-container {
  399. height: 30px;
  400. }
  401. .navbar-brand {
  402. display: inline-flex;
  403. align-items: center;
  404. gap: 10px;
  405. span {
  406. font-weight: bold;
  407. font-size: 1.3em;
  408. color: $fg;
  409. }
  410. }
  411. .navbar-entry {
  412. display: flex;
  413. img {
  414. width: 30px;
  415. height: 30px;
  416. }
  417. }
  418. .search-form {
  419. display: flex;
  420. gap: 4px;
  421. margin-left: 8px;
  422. align-items: center;
  423. input {
  424. margin: 0;
  425. }
  426. }
  427. .sidebar-toggler {
  428. display: none;
  429. &:checked~.sidebar {
  430. transform: translateX(0);
  431. }
  432. }
  433. .sidebar-label {
  434. display: flex;
  435. margin-right: 20px;
  436. cursor: pointer;
  437. }
  438. .sidebar {
  439. z-index: 1;
  440. isolation: isolate;
  441. background-color: $bg;
  442. position: absolute;
  443. padding-top: 6px;
  444. left: 0;
  445. width: 220px;
  446. transform: translateX(-220px);
  447. transition: transform 250ms cubic-bezier(0.23, 1, 0.32, 1);
  448. br {
  449. align-self: stretch;
  450. margin-top: 10px;
  451. }
  452. }
  453. .sidebar-list {
  454. list-style-type: none;
  455. margin: 0;
  456. padding: 0;
  457. }
  458. .sidebar-item {
  459. display: flex;
  460. align-items: center;
  461. list-style: none;
  462. color: $fg;
  463. font-size: 0.9em;
  464. text-decoration: none;
  465. padding: 10px;
  466. &:hover {
  467. background-color: $bg-secondary;
  468. }
  469. img {
  470. width: 30px;
  471. height: 30px;
  472. margin-left: 1.2rem;
  473. margin-right: 10px;
  474. }
  475. }
  476. }
  477. // mobile nav bar
  478. @media screen and (max-height: 767px) {
  479. nav {
  480. position: sticky;
  481. top: 0;
  482. isolation: isolate;
  483. z-index: 1;
  484. background-color: $bg;
  485. .navigation-wrapper {
  486. background-color: $bg;
  487. padding-block: 8px; // Reduced from 15px
  488. }
  489. .sidebar {
  490. z-index: -1;
  491. width: 100vw;
  492. transform: translateY(-110%);
  493. padding-block: 8px 16px;
  494. br {
  495. display: none;
  496. }
  497. }
  498. .sidebar-list {
  499. background-color: $bg;
  500. // display: flex;
  501. // flex-direction: row;
  502. // flex-wrap: wrap;
  503. display: grid;
  504. grid-template-columns: minmax(0px, 400px) repeat(auto-fit,
  505. minmax(0px, 400px));
  506. }
  507. .sidebar-item {
  508. padding-inline: unset;
  509. }
  510. }
  511. }
  512. .component-header {
  513. display: flex;
  514. justify-content: space-between;
  515. align-items: center;
  516. h2 {
  517. margin: 0;
  518. display: inline-block;
  519. }
  520. }
  521. .container {
  522. max-width: 1200px;
  523. margin-inline: auto;
  524. padding-inline: 4px;
  525. scroll-margin-top: 71px; // Prevent images from being covered; equal to the navigation bar height
  526. @media (min-width: $small-breakpoint) {
  527. padding-inline: 10px;
  528. }
  529. }
  530. .error.container {
  531. text-align: center;
  532. }
  533. .artwork-container-header {
  534. display: flex;
  535. flex-wrap: wrap;
  536. align-items: center;
  537. justify-content: space-between;
  538. }
  539. .artwork-container {
  540. display: grid;
  541. grid-template-columns: repeat(auto-fit,
  542. minmax(calc($small-artwork-width + 15px), 1fr));
  543. align-items: center;
  544. justify-items: center;
  545. }
  546. .artwork-container-scroll {
  547. display: flex;
  548. overflow: hidden;
  549. overflow-x: scroll;
  550. }
  551. .artwork-container,
  552. .artwork-container-scroll {
  553. a {
  554. text-decoration: none;
  555. color: $fg;
  556. }
  557. .artwork-large {
  558. img {
  559. width: $large-artwork-width;
  560. height: $large-artwork-width;
  561. }
  562. .artwork-title {
  563. max-width: $large-artwork-width;
  564. }
  565. .artwork-author {
  566. max-width: $large-artwork-width;
  567. a {
  568. max-width: $small-artwork-width;
  569. }
  570. }
  571. }
  572. .artwork-small {
  573. img {
  574. width: $small-artwork-width;
  575. height: $small-artwork-width;
  576. background: rgb(19,21,22);
  577. background: linear-gradient(0deg, rgba(10,10,10,0.5) 0%, rgba(19,21,22,0) 80%, rgba(34,33,33,0) 100%);
  578. }
  579. .artwork-image {
  580. position: relative;
  581. .overlay-cover {
  582. position: absolute;
  583. top: 0;
  584. left: 0;
  585. width: 100%;
  586. height: 100%;
  587. cursor: pointer;
  588. }
  589. .overlay-button {
  590. position: absolute;
  591. bottom: 0;
  592. right: 0;
  593. padding: 0 5px;
  594. background-color: rgba(0, 0, 0, 0.3);
  595. cursor: pointer;
  596. }
  597. }
  598. .artwork-title {
  599. max-width: $small-artwork-width;
  600. }
  601. .artwork-author {
  602. max-width: $small-artwork-width;
  603. a {
  604. max-width: $small-artwork-width;
  605. }
  606. }
  607. }
  608. .artwork {
  609. padding: 5px;
  610. width: fit-content;
  611. position: relative;
  612. .artwork-additional {
  613. position: absolute;
  614. top: 0;
  615. left: 0;
  616. right: 0;
  617. box-sizing: border-box;
  618. display: flex;
  619. align-items: flex-start;
  620. justify-content: space-between;
  621. padding: 4px 4px 0px;
  622. pointer-events: none;
  623. .artwork-position {
  624. display: flex;
  625. align-items: center;
  626. justify-content: center;
  627. border-radius: 50%;
  628. font-weight: bold;
  629. width: 40px;
  630. height: 40px;
  631. font-size: 16px;
  632. background-color: rgba(0, 0, 0, 0.32);
  633. }
  634. .artwork-profanity-label {
  635. display: flex;
  636. align-items: center;
  637. justify-content: center;
  638. font-size: 10px;
  639. border-radius: 20px;
  640. padding: 0.4rem;
  641. background-color: $highlight;
  642. color: $fg;
  643. }
  644. .artwork-page-count {
  645. display: flex;
  646. justify-content: center;
  647. align-items: center;
  648. flex: 0 0 auto;
  649. box-sizing: border-box;
  650. height: 20px;
  651. min-width: 20px;
  652. color: $fg;
  653. font-weight: bold;
  654. padding: 0px 6px;
  655. background: rgba(0, 0, 0, 0.32);
  656. border-radius: 10px;
  657. font-size: 10px;
  658. line-height: 10px;
  659. .boxbox {
  660. font-size: 9px;
  661. }
  662. }
  663. }
  664. img {
  665. object-fit: cover;
  666. object-position: center center;
  667. border-radius: $border-radius;
  668. }
  669. .artwork-title {
  670. display: flex;
  671. align-items: center;
  672. a {
  673. font-size: 14px;
  674. display: inline;
  675. overflow: hidden;
  676. text-overflow: ellipsis;
  677. white-space: nowrap;
  678. line-height: 22px;
  679. font-weight: bold;
  680. }
  681. }
  682. .artwork-author {
  683. display: flex;
  684. align-items: center;
  685. a {
  686. display: flex;
  687. align-items: center;
  688. img {
  689. aspect-ratio: 1/1;
  690. width: 24px;
  691. height: 24px;
  692. object-fit: cover;
  693. object-position: center top;
  694. border-radius: 50%;
  695. margin-right: 5px;
  696. }
  697. span {
  698. font-size: 14px;
  699. overflow: hidden;
  700. text-overflow: ellipsis;
  701. white-space: nowrap;
  702. line-height: 22px;
  703. }
  704. }
  705. }
  706. }
  707. }
  708. /* Brought out here because both artworks and novels needed this */
  709. .illust-tags {
  710. font-size: 0.9em;
  711. .illust-tag-attr {
  712. display: inline-flex;
  713. align-items: center;
  714. margin-right: 15px;
  715. img {
  716. aspect-ratio: 1/1;
  717. width: 18px;
  718. height: 18px;
  719. margin-right: 5px;
  720. }
  721. }
  722. .illust-tag {
  723. margin-right: 10px;
  724. #highlight {
  725. color: $highlight;
  726. }
  727. .illust-tag-name {
  728. color: $link;
  729. font-weight: bold;
  730. margin-right: 5px;
  731. }
  732. }
  733. }
  734. .illust-attr {
  735. display: flex;
  736. align-items: center;
  737. justify-content: space-between;
  738. margin-top: 10px;
  739. margin-bottom: 10px;
  740. .illust-author-attr {
  741. display: flex;
  742. align-items: center;
  743. }
  744. .illust-avatar {
  745. width: 62px;
  746. height: 62px;
  747. border-radius: 50px;
  748. object-fit: cover;
  749. object-position: center top;
  750. aspect-ratio: 1/1;
  751. }
  752. .attr-wrap {
  753. margin-left: 5px;
  754. .illust-title {
  755. font-weight: bold;
  756. }
  757. .illust-author {
  758. font-size: 0.8em;
  759. }
  760. a {
  761. color: $fg-secondary;
  762. }
  763. }
  764. .artwork-actions {
  765. img {
  766. aspect-ratio: 1/1;
  767. width: 30px;
  768. height: 30px;
  769. display: inline;
  770. }
  771. }
  772. }
  773. .illust {
  774. background-color: $bg-secondary;
  775. border-radius: $border-radius;
  776. padding: 5px 15px;
  777. .illust-images {
  778. display: flex;
  779. align-items: center;
  780. flex-direction: column;
  781. width: 100%;
  782. img,
  783. video {
  784. margin-top: 15px;
  785. max-height: 1000px;
  786. width: auto;
  787. max-width: 100%;
  788. }
  789. }
  790. .illust-description {
  791. font-size: 0.85em;
  792. }
  793. .comment {
  794. display: flex;
  795. margin-bottom: 10px;
  796. p {
  797. margin: 0;
  798. font-size: 0.8em;
  799. }
  800. .comment-avatar {
  801. width: 40px;
  802. height: 40px;
  803. border-radius: 50%;
  804. margin-right: 10px;
  805. }
  806. .comment-author {
  807. color: $fg;
  808. font-size: medium;
  809. font-weight: bold;
  810. }
  811. .stamp {
  812. width: 96px;
  813. height: 96px;
  814. border-radius: 4px;
  815. }
  816. .emoji {
  817. width: 24px;
  818. height: 24px;
  819. margin-left: 3px;
  820. margin-right: 3px;
  821. }
  822. }
  823. .illust-other-works {
  824. a.illust-other-works-author {
  825. display: inline-flex;
  826. align-items: center;
  827. text-decoration: none;
  828. color: $fg;
  829. &>img {
  830. aspect-ratio: 1/1;
  831. width: 50px;
  832. height: 50px;
  833. border-radius: 50%;
  834. margin-right: 5px;
  835. object-fit: cover;
  836. object-position: center top;
  837. }
  838. }
  839. }
  840. }
  841. .novel-container {
  842. display: grid;
  843. grid-template-columns: repeat(auto-fit,
  844. minmax(calc($novel-width + 15px), 1fr));
  845. justify-content: center;
  846. }
  847. .novel-card {
  848. font-size: 1.5rem;
  849. padding: 5px 15px;
  850. padding-top: 1em;
  851. .novel-detail {
  852. display: flex;
  853. .novel-author {
  854. display: flex;
  855. align-items: center;
  856. font-size: 0.8em;
  857. img {
  858. width: 16px;
  859. height: 16px;
  860. border-radius: 50%;
  861. }
  862. span {
  863. color: $fg;
  864. display: inline-block;
  865. margin-left: 5px;
  866. }
  867. }
  868. .novel-metadata {
  869. margin-left: 1.5rem;
  870. .novel-title {
  871. color: $fg;
  872. font-size: 1.17em;
  873. font-weight: bold;
  874. overflow: hidden;
  875. overflow-wrap: break-word;
  876. word-break: break-word;
  877. text-overflow: ellipsis;
  878. width: 100%;
  879. display: -webkit-box;
  880. -webkit-line-clamp: 2;
  881. -webkit-box-orient: vertical;
  882. }
  883. .novel-description {
  884. font-size: 0.85em;
  885. overflow: hidden;
  886. overflow-wrap: break-word;
  887. word-break: break-word;
  888. text-overflow: ellipsis;
  889. width: 100%;
  890. display: -webkit-box;
  891. -webkit-line-clamp: 4;
  892. -webkit-box-orient: vertical;
  893. }
  894. }
  895. }
  896. .novel-cover img {
  897. /* warning: hard-coded values */
  898. width: 136px;
  899. height: 191px;
  900. object-fit: cover;
  901. object-position: center center;
  902. }
  903. .novel-content {
  904. margin: 1.2rem 0;
  905. line-height: 1.8;
  906. color: black;
  907. background-color: white;
  908. }
  909. }
  910. .novel {
  911. background-color: $bg-secondary;
  912. border-radius: $border-radius;
  913. padding: 5px 15px;
  914. padding-top: 1em;
  915. .novel-detail {
  916. display: flex;
  917. .novel-metadata {
  918. margin-left: 1.5rem;
  919. .novel-title {
  920. font-size: 1.17em;
  921. font-weight: bold;
  922. }
  923. .novel-description {
  924. font-size: 0.85em;
  925. }
  926. }
  927. }
  928. .novel-cover img {
  929. /* warning: hard-coded values */
  930. width: 136px;
  931. height: 191px;
  932. object-fit: cover;
  933. object-position: center center;
  934. }
  935. .novel-content {
  936. margin: 1.2rem 0;
  937. line-height: 2;
  938. color: black;
  939. background-color: white;
  940. max-width: 100%;
  941. width: 100%;
  942. overflow-x: scroll;
  943. .novel-content-text {
  944. padding: 6.4rem 10rem;
  945. text-align: justify;
  946. img {
  947. max-width: 100%;
  948. max-height: 100%;
  949. margin: 0 0.5rem;
  950. }
  951. }
  952. }
  953. .novel-attr {
  954. display: flex;
  955. align-items: center;
  956. margin-top: 10px;
  957. margin-bottom: 10px;
  958. .novel-avatar {
  959. width: 62px;
  960. height: 62px;
  961. border-radius: 50px;
  962. object-fit: cover;
  963. object-position: center top;
  964. }
  965. .attr-wrap {
  966. margin-left: 5px;
  967. .novel-author {
  968. font-size: 0.8em;
  969. }
  970. a {
  971. color: $fg-secondary;
  972. }
  973. }
  974. }
  975. .novel-settings {
  976. background-color: $bg;
  977. padding: 0.5rem;
  978. position: sticky;
  979. top: 0;
  980. img {
  981. width: 30px;
  982. height: 30px;
  983. }
  984. .novel-settings-wrapper {
  985. display: flex;
  986. }
  987. /* The container <div> - needed to position the dropdown content */
  988. .dropdown {
  989. position: relative;
  990. display: inline-block;
  991. }
  992. /* Dropdown Content (Hidden by Default) */
  993. .dropdown-content {
  994. display: none;
  995. position: absolute;
  996. background-color: $bg;
  997. min-width: 160px;
  998. box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.4);
  999. z-index: 1;
  1000. padding: 1rem;
  1001. .value-holder {
  1002. display: none;
  1003. }
  1004. }
  1005. .dropdown-toggler {
  1006. display: none;
  1007. &:checked~.dropdown-content {
  1008. display: block;
  1009. }
  1010. }
  1011. }
  1012. }
  1013. // Font settings for novels
  1014. $font-fallback-serif: "Yu Mincho",
  1015. YuMincho,
  1016. "Hiragino Mincho ProN",
  1017. "Hiragino Mincho Pro",
  1018. "Source Han Serif",
  1019. "BIZ UDMincho Medium",
  1020. "Source Serif Pro",
  1021. "Source Serif",
  1022. "Noto Serif",
  1023. "Times New Roman",
  1024. "Georgia Pro",
  1025. Georgia,
  1026. Simsun,
  1027. PMingLiu,
  1028. AppleMyungjo,
  1029. "Source Han Serif K",
  1030. "Source Han Serif KR",
  1031. "Noto Serif KR",
  1032. Batang,
  1033. serif;
  1034. [data-font=mincho][data-font=jp] {
  1035. font-family:
  1036. "Source Han Serif JP",
  1037. "Noto Serif JP",
  1038. $font-fallback-serif;
  1039. }
  1040. [data-font=mincho][data-font=zh-cn],
  1041. [data-font=mincho][data-font=zh-hans] {
  1042. font-family:
  1043. "Songti SC",
  1044. "Source Han Serif SC",
  1045. "Noto Serif SC",
  1046. "Source Han Serif CN",
  1047. $font-fallback-serif;
  1048. }
  1049. // todo: technically, zh-hk > zh-hant > zh
  1050. // Noto Sans have
  1051. // CJK HK
  1052. // CJK JP
  1053. // CJK KR
  1054. // CJK SC
  1055. // CJK TC
  1056. [data-font=mincho][data-font=zh-tw],
  1057. [data-font=mincho][data-font=zh-hk],
  1058. [data-font=mincho][data-font=zh-hant] {
  1059. font-family:
  1060. "Songti TC",
  1061. "Source Han Serif TC",
  1062. "Noto Serif TC",
  1063. "Source Han Serif TW",
  1064. "Source Han Serif HK",
  1065. $font-fallback-serif;
  1066. }
  1067. [data-font=mincho] {
  1068. font-family: $font-fallback-serif;
  1069. }
  1070. $font-fallback-sans: YuGothic,
  1071. "Hiragino Kaku Gothic Pro",
  1072. Meiryo,
  1073. "Source Han Sans",
  1074. "Source Han Sans JP",
  1075. "Noto Sans CJK JP",
  1076. "Avenir Next",
  1077. Avenir,
  1078. "Source Sans",
  1079. "Noto Sans",
  1080. Roboto,
  1081. Verdana,
  1082. "Pingfang TC",
  1083. "Pingfang HK",
  1084. "Hiragino Sans CNS",
  1085. "Lantinghei TC",
  1086. "Source Han Sans TW",
  1087. "Source Han Sans HK",
  1088. "Noto Sans CJK TC",
  1089. "Microsoft JhengHei",
  1090. "Pingfang SC",
  1091. "Hiragino Sans GB",
  1092. "Lantinghei SC",
  1093. "Source Han Sans CN",
  1094. "Noto Sans CJK SC",
  1095. "Microsoft Yahei",
  1096. DengXian,
  1097. "Apple SD Gothic Neo",
  1098. "Source Han Sans K",
  1099. "Source Han Sans KR",
  1100. "Noto Sans CJK KR",
  1101. "Malgun Gothic",
  1102. sans-serif;
  1103. [data-font=gothic] {
  1104. font-family: $font-fallback-sans;
  1105. }
  1106. [data-view="2"] {
  1107. writing-mode: vertical-rl;
  1108. text-orientation: upright;
  1109. }
  1110. .background-cover {
  1111. background: repeating-linear-gradient(52.5deg,
  1112. rgba(32, 32, 32, 0.8),
  1113. rgba(32, 32, 32, 0.8) 14px,
  1114. rgba(240, 248, 255, 0) 14px,
  1115. rgba(240, 248, 255, 0) 28px);
  1116. height: 10vw;
  1117. min-height: 100px;
  1118. overflow: hidden;
  1119. padding-top: 10px;
  1120. padding-bottom: 10px;
  1121. img {
  1122. width: 100%;
  1123. height: 100%;
  1124. object-fit: cover;
  1125. }
  1126. }
  1127. #hasbg {
  1128. height: 40vw;
  1129. min-height: 100px;
  1130. max-height: 60vh;
  1131. }
  1132. .user {
  1133. transform: translateY(-8rem);
  1134. img {
  1135. display: inline;
  1136. }
  1137. .user-avatar {
  1138. text-align: center;
  1139. }
  1140. .user-avatar img {
  1141. aspect-ratio: 1/1;
  1142. width: 150px;
  1143. height: 150px;
  1144. border-radius: 50%;
  1145. object-fit: cover;
  1146. object-position: center top;
  1147. }
  1148. .user-social {
  1149. text-align: center;
  1150. img {
  1151. aspect-ratio: 1/1;
  1152. width: 36px;
  1153. height: 36px;
  1154. }
  1155. }
  1156. .user-details {
  1157. text-align: center;
  1158. h2 {
  1159. margin: 0;
  1160. }
  1161. }
  1162. }
  1163. .tag-list {
  1164. display: flex;
  1165. flex-wrap: wrap;
  1166. row-gap: 8px;
  1167. column-gap: 1em;
  1168. margin-block: 4px 20px;
  1169. &>a {
  1170. line-height: 1;
  1171. &:hover {
  1172. text-decoration: underline;
  1173. }
  1174. }
  1175. }
  1176. .vision-container {
  1177. display: grid;
  1178. width: 100%;
  1179. gap: 15px;
  1180. grid-template-columns: 1fr 1fr;
  1181. .vision-preview {
  1182. background: $bg-secondary;
  1183. padding: 10px;
  1184. display: flex;
  1185. flex-flow: column wrap;
  1186. }
  1187. .vision-thumbnail {
  1188. img {
  1189. width: 100%;
  1190. }
  1191. }
  1192. .vision-metadata {
  1193. display: flex;
  1194. flex-direction: column;
  1195. justify-content: space-between;
  1196. flex-grow: 1;
  1197. .vision-title {
  1198. color: $fg;
  1199. margin: 0.5rem 0;
  1200. }
  1201. .vision-metadata-other {
  1202. display: flex;
  1203. justify-content: space-between;
  1204. }
  1205. }
  1206. .tag-list {
  1207. align-items: center;
  1208. margin: 0;
  1209. }
  1210. }
  1211. .vision-article {
  1212. background-color: $bg-secondary;
  1213. border-radius: 5px;
  1214. padding: 5px 15px;
  1215. }
  1216. #calendar {
  1217. width: 100%;
  1218. height: auto;
  1219. }
  1220. .calendar-weeks,
  1221. .calendar-board {
  1222. max-width: 1000px;
  1223. margin: 0 auto;
  1224. display: flex;
  1225. flex-wrap: wrap;
  1226. gap: 5px;
  1227. }
  1228. .calendar-weeks div {
  1229. width: 128px;
  1230. text-align: center;
  1231. }
  1232. .calendar-node {
  1233. width: 128px;
  1234. height: 128px;
  1235. border-radius: 8px;
  1236. background-color: $bg-secondary;
  1237. position: relative;
  1238. img {
  1239. border-radius: 8px;
  1240. object-fit: cover;
  1241. object-position: center center;
  1242. }
  1243. span {
  1244. font-size: small;
  1245. color: $fg;
  1246. background-color: $bg-secondary;
  1247. position: absolute;
  1248. top: 0.3rem;
  1249. left: 0.3rem;
  1250. padding: 0.05rem 0.3rem;
  1251. display: flex;
  1252. align-items: center;
  1253. justify-content: center;
  1254. }
  1255. }
  1256. .calendar-node-empty {
  1257. visibility: hidden;
  1258. }
  1259. @media screen and (max-width: 950px) {
  1260. .calendar-board {
  1261. justify-content: center;
  1262. }
  1263. .calendar-weeks,
  1264. .calendar-node-empty {
  1265. display: none;
  1266. }
  1267. }
  1268. .tag-header {
  1269. display: flex;
  1270. .tag-thumbnail {
  1271. width: 120px;
  1272. height: 120px;
  1273. border-radius: 5px;
  1274. margin-right: 20px;
  1275. object-fit: cover;
  1276. object-position: center center;
  1277. }
  1278. .tag-details {
  1279. .main-tag {
  1280. font-size: 1.6rem;
  1281. }
  1282. }
  1283. }
  1284. .tag-container {
  1285. background-color: $bg-secondary;
  1286. display: inline-flex;
  1287. align-items: center;
  1288. justify-content: center;
  1289. padding-left: 20px;
  1290. padding-right: 20px;
  1291. margin-right: 10px;
  1292. width: max-content;
  1293. height: 40px;
  1294. margin-bottom: 4px;
  1295. text-align: center;
  1296. font-weight: bold;
  1297. font-size: 1rem;
  1298. border-radius: 4px;
  1299. .main {
  1300. font-size: 1.6em;
  1301. }
  1302. .sub {
  1303. font-size: 1.2em;
  1304. font-weight: normal;
  1305. }
  1306. }
  1307. summary> :is(h1, h2, h3, h4, h5, h6) {
  1308. display: inline-block;
  1309. }
  1310. .settings-set-cookie h3 {
  1311. font-size: smaller;
  1312. margin-block: 4px 0;
  1313. }
  1314. .settings-set-cookie form {
  1315. display: flex;
  1316. gap: 4px;
  1317. }
  1318. .settings-set-cookie form>* {
  1319. margin: unset !important;
  1320. }
  1321. .settings-set-cookie form>input[type="text"] {
  1322. width: 20em;
  1323. }
  1324. input.critical {
  1325. background-color: $highlight;
  1326. }