1<!DOCTYPE html> 2<html class="web-pages d-flex justify-content-center" lang="fa"> 3 4<head> 5 <meta charset="utf-8"> 6 <title itemprop="name">Login</title> 7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 8 <meta name="generator" content="Rodin365"> 9 10 11 <meta name="title" content="Login"><meta name="language" content="fa"><meta property="og:type" content="article"><meta property="og:title" content="Login"><meta name="twitter:title" content="Login"><meta name="twitter:card" content="summary"> 12 13 14 15 16 <link rel="shortcut icon" href="/files/favicon.ico" 17 type="image/x-icon"> 18 19 20 21 <link rel="apple-touch-icon" href="/files/favicon.ico"> 22 <link rel="stylesheet" href="/assets/frappe/bootstrap-icons/bootstrap-icons.css"> 23 24 <link rel="canonical" href="https://shahreketabonline.com/login"> 25 26 <link rel="stylesheet" href="/assets/frappe/css/swiper_css.css"> 27 <link href="/assets/frappe/css/aos.css" rel="stylesheet"> 28 <link href="/assets/frappe/css/glightbox.css" rel="stylesheet"> 29 30 <!--
30<script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/lazysizes.min.js" async=""></script>
30 --> 31
31<script src="/assets/erpnext/js/swiper_js.js"></script>
31 32
32<script src="/assets/erpnext/js/isotope.js"></script>
32 33
33<script src="/assets/erpnext/js/glightbox.js"></script>
33 34
34<script src="/assets/erpnext/js/imagesloaded.js"></script>
34<!-- Najva Script --> 35
35<script> 36 var s = document.createElement("script"); 37 s.src = "https://van.najva.com/static/js/main-script.js"; 38 s.defer = !0; 39 s.id = "najva-mini-script"; 40 s.setAttribute("data-najva-id", "f7c6a8e1-9b65-47b2-a675-2dfea34c89d7"); 41 document.head.appendChild(s); 42 </script>
42<script type="text/javascript"> 43 window.RAYCHAT_TOKEN = "357c2ef2-faa8-4591-a0e2-9cea8fb0c98d"; 44 (function () { 45 d = document; 46 s = d.createElement("script"); 47 s.src = "https://widget-react.raychat.io/install/widget.js"; 48 s.async = 1; 49 d.getElementsByTagName("head")[0].appendChild(s); 50 })(); 51 </script>
51 52 53 54 55
55<script> 56 var s = document.createElement("script"); 57 s.src = "https://van.najva.com/static/js/main-script.js"; 58 s.defer = !0; 59 s.id = "najva-mini-script"; 60 s.setAttribute("data-najva-id", "f7c6a8e1-9b65-47b2-a675-2dfea34c89d7"); 61 document.head.appendChild(s); 62</script>
62 63 64
65<script src="https://analytics.ahrefs.com/analytics.js" data-key="awIxZKbOTIed+WfJQEEjRw" async></script>
65 66 67<!-- Google Tag Manager -->
68<script>
vendor: 327 bytes, lines 68-72
68(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 69new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 70j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 71'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 72})(window,document,'script','dataLayer','
72GTM-T4CKZJZ3
vendor: 3 bytes, line 72
72');
72</script>
72 73<!-- End Google Tag Manager --><link type="text/css" rel="stylesheet" href="/files/website_theme/bookcity_f338aafb.css"> 74<link type="text/css" rel="stylesheet" href="/assets/erpnext/css/persianDatepicker.bundle.css"> 75<link type="text/css" rel="stylesheet" href="/assets/erpnext/css/farsiDatepicker.bundle.css"> 76<link type="text/css" rel="stylesheet" href="/assets/erpnext/dist/css-rtl/erpnext-web.bundle.DT54IQDK.css"> 77 78 79 80 81<link type="text/css" rel="stylesheet" href="/assets/frappe/dist/css-rtl/login.bundle.D5A4VP7W.css"> 82 83<style> 84 .rodin-seo-hidden-heading { 85 display: flex !important; 86 height: 0 !important; 87 overflow: hidden !important; 88 margin: 0 !important; 89 padding: 0 !important; 90 } 91 </style> 92<style> 93 @media screen and (max-width:676px) { 94 .header-title{ 95 font-size: 12px; 96 } 97 .page-header-actions-block .dropdown-toggle span{ 98 font-size: 12px !important; 99 } 100 } 101</style>
102<script> 103 window.frappe = {}; 104 frappe.ready_events = []; 105 frappe.ready = function (fn) { 106 frappe.ready_events.push(fn); 107 } 108 window.dev_server = 0; 109 window.socketio_port = 9000; 110 window.show_language_picker = false; 111 </script>
111 112</head> 113 114<body frappe-session-status="logged-out" 115 data-path="login" 116 117 118 class=" w-100"> 119 120 121 <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 121-122
121 122<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
122GTM-T4CKZJZ3
vendor: 83 bytes, lines 122-123
122" 123height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
124<!-- End Google Tag Manager (noscript) --> 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181<style> 182 @import url("https://fonts.googleapis.com/css2?family=Vazirmatn:wght@400;500;600;700;800;900&display=swap"); 183 184 .page-content-wrapper { 185 margin-top: 0 !important; 186 margin-bottom: 0 !important; 187 overflow-x: clip; 188 } 189 190 .sk-header, 191 .sk-drawer, 192 .sk-app-nav, 193 .sk-desktop-mask, 194 .rodin-overlay { 195 --sk-brand: #25468F; 196 --sk-brand-soft: #e8f8ff; 197 --sk-ink: #212121; 198 --sk-gold: #f5b301; 199 --sk-muted: #f5f6f8; 200 --sk-muted-fg: #6b7280; 201 --sk-border: #e6e8ee; 202 --sk-danger: #ef4444; 203 --sk-radius: 0.75rem; 204 font-family: "Vazirmatn", ui-sans-serif, system-ui, sans-serif; 205 } 206 207 .sk-header { 208 position: fixed; 209 top: 0; 210 left: 0; 211 right: 0; 212 z-index: 50; 213 background: var(--sk-brand); 214 color: #fff; 215 border-bottom: 1px solid rgba(255, 255, 255, 0.1); 216 direction: rtl; 217 } 218 219 .sk-header *, 220 .sk-header *::before, 221 .sk-header *::after { 222 box-sizing: border-box; 223 } 224 225 /* No browser focus rings on header controls */ 226 .sk-header a:focus, 227 .sk-header a:focus-visible, 228 .sk-header button:focus, 229 .sk-header button:focus-visible, 230 .sk-header input:focus, 231 .sk-header input:focus-visible, 232 .sk-header [tabindex]:focus, 233 .sk-header [tabindex]:focus-visible { 234 outline: none !important; 235 box-shadow: none !important; 236 } 237 238 .sk-drawer a:focus, 239 .sk-drawer a:focus-visible, 240 .sk-drawer button:focus, 241 .sk-drawer button:focus-visible, 242 .sk-drawer input:focus, 243 .sk-drawer input:focus-visible { 244 outline: none !important; 245 box-shadow: none !important; 246 } 247 248 .sk-app-nav a:focus, 249 .sk-app-nav a:focus-visible, 250 .sk-app-nav button:focus, 251 .sk-app-nav button:focus-visible { 252 outline: none !important; 253 box-shadow: none !important; 254 } 255 256 .sk-container { 257 width: 100%; 258 max-width: 1280px; 259 margin-inline: auto; 260 padding-inline: 1rem; 261 } 262 263 /* Image promo bar above main header content (swiper) */ 264 .sk-img-topbar { 265 width: 100%; 266 direction: rtl; 267 background: #f3f4f6; 268 position: relative; 269 --rit-nav-size: 36px; 270 } 271 .sk-img-topbar__root { 272 width: 100%; 273 overflow: hidden; 274 } 275 .sk-img-topbar__root.sk-img-topbar--single .swiper-button-next, 276 .sk-img-topbar__root.sk-img-topbar--single .swiper-button-prev { 277 display: none !important; 278 } 279 .sk-img-topbar__root:not(.sk-img-topbar--nav) .swiper-button-next, 280 .sk-img-topbar__root:not(.sk-img-topbar--nav) .swiper-button-prev { 281 display: none !important; 282 } 283 .sk-img-topbar__link { 284 display: block; 285 position: relative; 286 width: 100%; 287 } 288 .sk-img-topbar__picture { 289 display: block; 290 width: 100%; 291 } 292 .sk-img-topbar__img { 293 width: 100%; 294 height: auto; 295 max-height: 180px; 296 object-fit: cover; 297 display: block; 298 } 299 .sk-img-topbar .swiper-button-next, 300 .sk-img-topbar .swiper-button-prev { 301 color: var(--sk-brand, #25468F); 302 width: var(--rit-nav-size); 303 height: var(--rit-nav-size); 304 margin-top: calc(-1 * var(--rit-nav-size) / 2); 305 background: rgba(255, 255, 255, 0.92); 306 border-radius: 50%; 307 box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12); 308 } 309 .sk-img-topbar .swiper-button-next:after, 310 .sk-img-topbar .swiper-button-prev:after { 311 font-size: 0.85rem; 312 font-weight: 700; 313 } 314 @media (max-width: 575px) { 315 .sk-img-topbar__img { 316 max-height: 120px; 317 } 318 .sk-img-topbar .swiper-button-next, 319 .sk-img-topbar .swiper-button-prev { 320 display: none !important; 321 } 322 } 323 324 /* ââ Top strip (desktop) â only when nav_top_two_active ââ */ 325 .sk-topstrip { 326 display: none; 327 border-bottom: 1px solid rgba(255, 255, 255, 0.1); 328 padding: 0.5rem 0; 329 font-size: 12px; 330 color: rgba(255, 255, 255, 0.8); 331 } 332 333 @media (min-width: 768px) { 334 .sk-topstrip { display: block; } 335 } 336 337 .sk-topstrip-inner { 338 display: flex; 339 align-items: center; 340 justify-content: space-between; 341 gap: 1rem; 342 } 343 344 .sk-topstrip-right, 345 .sk-topstrip-center, 346 .sk-topstrip-left { 347 flex: 1 1 0; 348 min-width: 0; 349 display: flex; 350 align-items: center; 351 gap: 1rem; 352 flex-wrap: wrap; 353 } 354 355 .sk-topstrip-right { justify-content: flex-start; } 356 .sk-topstrip-center { justify-content: center; text-align: center; } 357 .sk-topstrip-left { justify-content: flex-end; text-align: left; } 358 359 .sk-topstrip p, 360 .sk-topstrip a, 361 .sk-topstrip span { 362 margin: 0; 363 overflow: hidden; 364 text-overflow: ellipsis; 365 white-space: nowrap; 366 max-width: 100%; 367 } 368 369 .sk-topstrip a { 370 color: rgba(255, 255, 255, 0.8); 371 text-decoration: none; 372 } 373 374 .sk-topstrip a:hover { 375 color: #fff; 376 text-decoration: underline; 377 } 378 379 /* Mobile promo carousel (when nav_top_two active) */ 380 .sk-promo-mobile { 381 display: none; 382 border-bottom: 1px solid rgba(255, 255, 255, 0.1); 383 min-height: 36px; 384 } 385 386 @media (max-width: 767.98px) { 387 .sk-promo-mobile.sk-promo-mobile--on { display: block; } 388 } 389 390 .sk-promo-mobile .swiper { 391 height: 36px; 392 display: flex; 393 align-items: center; 394 justify-content: center; 395 } 396 397 .sk-promo-mobile .swiper-slide { 398 display: flex; 399 align-items: center; 400 justify-content: center; 401 height: 36px; 402 font-size: 12px; 403 color: rgba(255, 255, 255, 0.9); 404 text-align: center; 405 padding: 0 0.75rem; 406 } 407 408 .sk-promo-mobile .swiper-slide a { 409 color: inherit; 410 text-decoration: none; 411 max-width: 100%; 412 overflow: hidden; 413 text-overflow: ellipsis; 414 white-space: nowrap; 415 } 416 417 /* ââ Main bar ââ */ 418 .sk-mainbar { 419 display: flex; 420 align-items: center; 421 gap: 0.75rem; 422 padding: 0.75rem 1rem; 423 } 424 425 .sk-menu-btn { 426 display: inline-flex; 427 align-items: center; 428 justify-content: center; 429 width: 40px; 430 height: 40px; 431 padding: 0; 432 border: 0; 433 background: transparent; 434 color: #fff; 435 font-size: 1.5rem; 436 line-height: 1; 437 cursor: pointer; 438 } 439 440 @media (min-width: 992px) { 441 .sk-menu-btn { display: none; } 442 } 443 444 .sk-brand { 445 display: inline-flex; 446 align-items: center; 447 flex-shrink: 0; 448 text-decoration: none; 449 } 450 451 .sk-brand:hover { text-decoration: none; } 452 453 .sk-brand img { 454 height: 36px; 455 width: auto; 456 display: block; 457 filter: brightness(0) invert(1); 458 } 459 460 .sk-search-desktop { 461 display: none; 462 flex: 1 1 auto; 463 max-width: 42rem; 464 margin-inline: 0.5rem; 465 position: relative; 466 direction: rtl; 467 } 468 469 @media (min-width: 768px) { 470 .sk-search-desktop { display: block; } 471 } 472 473 .sk-search-box { 474 display: flex; 475 align-items: center; 476 background: #fff; 477 border-radius: 0.5rem; 478 padding: 0 0.75rem; 479 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06); 480 } 481 482 .sk-search-box i { 483 color: var(--sk-muted-fg); 484 font-size: 0.95rem; 485 } 486 487 .sk-search-box input { 488 flex: 1; 489 border: 0; 490 outline: none; 491 background: transparent; 492 color: var(--sk-ink); 493 font-size: 0.875rem; 494 padding: 0.625rem 0.5rem; 495 font-family: inherit; 496 min-width: 0; 497 text-align: right; 498 } 499 500 .sk-search-box input::placeholder { 501 color: var(--sk-muted-fg); 502 } 503 504 .sk-search-submit { 505 border: 0; 506 border-radius: 0.5rem; 507 background: var(--sk-brand); 508 color: #fff; 509 font-size: 12px; 510 font-weight: 700; 511 padding: 0.375rem 1rem; 512 cursor: pointer; 513 white-space: nowrap; 514 font-family: inherit; 515 } 516 517 .sk-search-dropdown { 518 display: none; 519 position: absolute; 520 top: calc(100% + 6px); 521 right: 0; 522 left: 0; 523 z-index: 60; 524 background: #fff; 525 color: var(--sk-ink); 526 border: 1px solid var(--sk-border); 527 border-radius: 0.75rem; 528 box-shadow: 0 12px 32px rgba(33, 33, 33, 0.12); 529 max-height: min(70vh, 480px); 530 overflow: auto; 531 padding: 0.75rem 1rem; 532 direction: rtl; 533 text-align: right; 534 } 535 536 .sk-search-dropdown.show { display: block; } 537 538 .sk-search-dropdown .rodin-title-sm, 539 .sk-search-dropdown .sk-search-status { 540 margin: 0 0 0.5rem; 541 font-size: 12px; 542 font-weight: 700; 543 color: #444; 544 text-align: right; 545 } 546 547 .sk-search-headline { 548 display: flex; 549 align-items: center; 550 justify-content: flex-start; 551 gap: 0.5rem; 552 direction: rtl; 553 } 554 555 .sk-search-loading-icon { 556 display: inline-flex; 557 align-items: center; 558 justify-content: center; 559 flex-shrink: 0; 560 width: 1rem; 561 height: 1rem; 562 color: var(--sk-brand); 563 animation: sk-search-spin 0.75s linear infinite; 564 } 565 566 .sk-search-loading-icon i { 567 font-size: 0.875rem; 568 line-height: 1; 569 } 570 571 @keyframes sk-search-spin { 572 to { transform: rotate(360deg); } 573 } 574 575 .sk-search-dropdown .rodin-search-result { 576 display: flex; 577 align-items: center; 578 gap: 0.75rem; 579 width: 100%; 580 padding: 0.5rem; 581 border: 0; 582 background: transparent; 583 text-align: right; 584 text-decoration: none; 585 color: var(--sk-ink); 586 border-radius: 0.5rem; 587 cursor: pointer; 588 font-family: inherit; 589 } 590 591 .sk-search-dropdown .rodin-search-result:hover { 592 background: var(--sk-muted); 593 text-decoration: none; 594 color: var(--sk-ink); 595 } 596 597 .sk-search-dropdown .rodin-result-thumb { 598 width: 44px; 599 height: 44px; 600 border-radius: 10px; 601 background: var(--sk-muted); 602 display: grid; 603 place-items: center; 604 overflow: hidden; 605 flex-shrink: 0; 606 } 607 608 .sk-search-dropdown .rodin-suggest-row { 609 display: flex; 610 flex-wrap: wrap; 611 gap: 0.5rem; 612 margin-bottom: 0.5rem; 613 } 614 615 .sk-search-dropdown .rodin-suggest-chip { 616 display: inline-flex; 617 align-items: center; 618 gap: 0.35rem; 619 padding: 0.35rem 0.65rem; 620 border-radius: 999px; 621 background: var(--sk-muted); 622 color: var(--sk-ink); 623 font-size: 12px; 624 font-weight: 600; 625 text-decoration: none; 626 } 627 628 .sk-search-dropdown .rodin-suggest-chip:hover { 629 background: var(--sk-brand-soft); 630 color: var(--sk-brand); 631 text-decoration: none; 632 } 633 634 .sk-actions { 635 margin-right: auto; 636 display: flex; 637 align-items: center; 638 gap: 0.25rem; 639 } 640 641 @media (min-width: 768px) { 642 .sk-actions { gap: 0.5rem; } 643 } 644 645 .sk-action { 646 display: inline-flex; 647 align-items: center; 648 justify-content: center; 649 gap: 0.25rem; 650 border: 0; 651 background: transparent; 652 color: #fff; 653 text-decoration: none; 654 border-radius: 0.5rem; 655 padding: 0.5rem; 656 cursor: pointer; 657 font-family: inherit; 658 font-size: 0.875rem; 659 font-weight: 500; 660 position: relative; 661 outline: none; 662 -webkit-tap-highlight-color: transparent; 663 } 664 665 .sk-action:hover { 666 background: rgba(255, 255, 255, 0.1); 667 color: #fff; 668 text-decoration: none; 669 } 670 671 .sk-action:focus, 672 .sk-action:focus-visible, 673 .sk-action:active { 674 outline: none !important; 675 box-shadow: none !important; 676 } 677 678 .sk-action--pill { 679 display: none; 680 border: 1px solid rgba(255, 255, 255, 0.3); 681 padding: 0.5rem 0.75rem; 682 } 683 684 .sk-action--login { 685 display: none; 686 background: rgba(255, 255, 255, 0.1); 687 padding: 0.5rem 0.75rem; 688 } 689 690 .sk-action--login:hover { 691 background: rgba(255, 255, 255, 0.2); 692 } 693 694 @media (min-width: 768px) { 695 .sk-action--pill, 696 .sk-action--login { display: inline-flex; } 697 .sk-action--icon-only-md { display: none; } 698 } 699 700 .sk-cart-badge { 701 position: absolute; 702 top: -2px; 703 right: -2px; 704 min-width: 16px; 705 height: 16px; 706 padding: 0 4px; 707 border-radius: 999px; 708 background: var(--sk-gold); 709 color: var(--sk-ink); 710 font-size: 10px; 711 font-weight: 800; 712 display: grid; 713 place-items: center; 714 line-height: 1; 715 } 716 717 .sk-cart-badge.rodin-nav-cart-badge--empty { 718 display: none; 719 } 720 721 .sk-account-menu { 722 display: none; 723 position: absolute; 724 top: calc(100% + 8px); 725 left: 0; 726 min-width: 180px; 727 background: #fff; 728 color: var(--sk-ink); 729 border: 1px solid var(--sk-border); 730 border-radius: 0.75rem; 731 box-shadow: 0 12px 28px rgba(0, 0, 0, 0.12); 732 overflow: hidden; 733 z-index: 70; 734 direction: rtl; 735 text-align: right; 736 } 737 738 .sk-account-menu.show { display: block; } 739 740 .sk-account-menu a { 741 display: block; 742 padding: 0.65rem 0.9rem; 743 font-size: 0.875rem; 744 color: var(--sk-ink); 745 text-decoration: none; 746 border-bottom: 1px solid var(--sk-border); 747 text-align: right; 748 } 749 750 .sk-account-menu a:last-child { border-bottom: 0; } 751 752 .sk-account-menu a:hover { 753 background: var(--sk-brand-soft); 754 color: var(--sk-brand); 755 text-decoration: none; 756 } 757 758 .sk-actions-wrap { 759 position: relative; 760 } 761 762 /* ââ Mobile search trigger (icon in actions) ââ */ 763 .sk-action--search-mobile { 764 display: inline-flex; 765 } 766 767 @media (min-width: 768px) { 768 .sk-action--search-mobile { display: none; } 769 } 770 771 /* ââ Mobile search overlay (suggest) ââ */ 772 .rodin-overlay { 773 position: fixed; 774 top: 0; 775 bottom: 0; 776 left: 0; 777 right: 0; 778 width: 100vw; 779 max-width: 100vw; 780 z-index: 10060; 781 background: #ffffff; 782 color: var(--sk-ink); 783 opacity: 0; 784 pointer-events: none; 785 transition: opacity .2s ease, transform .2s ease; 786 transform: translateY(-16px); 787 display: flex; 788 flex-direction: column; 789 } 790 791 .rodin-overlay.is-open { 792 opacity: 1; 793 pointer-events: auto; 794 transform: translateY(0); 795 } 796 797 .rodin-overlay-header { 798 min-height: 58px; 799 display: flex; 800 align-items: center; 801 padding: 0 16px; 802 border-bottom: 1px solid var(--sk-border); 803 background: #ffffff; 804 justify-content: space-between; 805 flex-direction: row-reverse; 806 gap: 12px; 807 } 808 809 .rodin-overlay .rodin-icon-btn { 810 border: 0; 811 background: #f3f3f3; 812 color: var(--sk-ink); 813 padding: 8px !important; 814 display: inline-flex; 815 align-items: center; 816 justify-content: center; 817 font-size: 20px; 818 cursor: pointer; 819 border-radius: 8px !important; 820 flex-shrink: 0; 821 } 822 823 .rodin-search-input-wrap { 824 flex: 1; 825 position: relative; 826 } 827 828 .rodin-search-input { 829 width: 100%; 830 height: 44px; 831 border: 1px solid #e8e8e8; 832 background: #f7f7f7; 833 border-radius: 14px; 834 color: #6b6b6b; 835 font-size: 14px; 836 outline: none; 837 padding: 0 42px 0 14px; 838 direction: rtl; 839 text-align: right; 840 font-family: inherit; 841 } 842 843 .rodin-search-input::placeholder { 844 color: #8c8c8c; 845 } 846 847 .rodin-search-input-icon { 848 position: absolute; 849 right: 14px; 850 top: 50%; 851 transform: translateY(-50%); 852 color: #6f6f6f; 853 font-size: 18px; 854 pointer-events: none; 855 } 856 857 .rodin-search-content { 858 flex: 1; 859 overflow-y: auto; 860 padding: 16px; 861 direction: rtl; 862 text-align: right; 863 -webkit-overflow-scrolling: touch; 864 } 865 866 .rodin-overlay .rodin-title-sm { 867 font-size: 13px; 868 color: #666; 869 margin-bottom: 12px !important; 870 } 871 872 .rodin-overlay .rodin-suggest-row { 873 display: flex; 874 flex-wrap: wrap; 875 gap: 10px; 876 margin-bottom: 10px; 877 } 878 879 .rodin-overlay .rodin-suggest-chip { 880 display: inline-flex; 881 align-items: center; 882 gap: 8px; 883 padding: 8px 12px; 884 border-radius: 12px; 885 border: 1px solid #eeeeee; 886 background: #f4f5f7; 887 color: #333; 888 text-decoration: none; 889 font-size: 13px; 890 line-height: 1; 891 max-width: 100%; 892 } 893 894 .rodin-overlay .rodin-suggest-chip i { 895 font-size: 14px; 896 color: #666; 897 line-height: 1; 898 } 899 900 .rodin-overlay .rodin-suggest-chip span { 901 overflow: hidden; 902 text-overflow: ellipsis; 903 white-space: nowrap; 904 max-width: 220px; 905 } 906 907 .rodin-overlay .rodin-suggest-chip:hover { 908 background: #eef3ff; 909 border-color: rgba(37, 70, 143, 0.2); 910 color: var(--sk-brand); 911 text-decoration: none; 912 } 913 914 .rodin-overlay .rodin-search-result { 915 display: flex; 916 align-items: center; 917 gap: 10px; 918 border: 1px solid var(--sk-border); 919 border-radius: 12px; 920 padding: 10px; 921 margin-bottom: 10px; 922 text-decoration: none; 923 color: var(--sk-ink); 924 width: 100%; 925 background: #fff; 926 text-align: right; 927 cursor: pointer; 928 font-family: inherit; 929 } 930 931 .rodin-overlay .rodin-search-result:hover { 932 background: #f8fafc; 933 text-decoration: none; 934 color: var(--sk-ink); 935 } 936 937 .rodin-overlay .rodin-result-thumb { 938 width: 52px; 939 height: 52px; 940 border-radius: 10px; 941 background: var(--sk-muted); 942 color: #5b5b5b; 943 display: flex; 944 align-items: center; 945 justify-con
945tent: center; 946 font-size: 20px; 947 flex-shrink: 0; 948 overflow: hidden; 949 } 950 951 @media (min-width: 768px) { 952 .rodin-overlay { display: none; } 953 } 954 955 /* ââ Mega menubar (desktop) ââ */ 956 .sk-menubar { 957 display: none; 958 position: relative; 959 background: #fff; 960 color: var(--sk-ink); 961 } 962 963 @media (min-width: 992px) { 964 .sk-menubar { display: block; } 965 } 966 967 .sk-menubar-inner { 968 display: flex; 969 align-items: center; 970 gap: 0.25rem; 971 direction: rtl; 972 } 973 974 /* Layout.tsx category trigger + design screenshot: soft brand chip */ 975 .sk-cat-btn { 976 display: inline-flex; 977 align-items: center; 978 gap: 0.375rem; 979 border: 0; 980 border-left: 1px solid var(--sk-border); 981 background: var(--sk-brand-soft); 982 color: var(--sk-brand); 983 font-size: 0.875rem; 984 font-weight: 700; 985 padding: 0.75rem 1rem; 986 cursor: pointer; 987 font-family: inherit; 988 white-space: nowrap; 989 outline: none; 990 -webkit-tap-highlight-color: transparent; 991 } 992 993 .sk-cat-btn:focus, 994 .sk-cat-btn:focus-visible, 995 .sk-cat-btn:active { 996 outline: none !important; 997 box-shadow: none !important; 998 } 999 1000 .sk-cat-btn i { 1001 font-size: 1rem; 1002 line-height: 1; 1003 } 1004 1005 .sk-cat-btn .sk-cat-chevron { 1006 font-size: 0.75rem; 1007 opacity: 0.85; 1008 } 1009 1010 .sk-cat-btn.is-active { 1011 color: var(--sk-brand); 1012 } 1013 1014 .sk-menulink { 1015 display: inline-flex; 1016 align-items: center; 1017 gap: 0.25rem; 1018 padding: 0.75rem 1rem; 1019 font-size: 0.875rem; 1020 font-weight: 500; 1021 color: var(--sk-ink); 1022 text-decoration: none; 1023 background: transparent; 1024 border: 0; 1025 cursor: pointer; 1026 font-family: inherit; 1027 white-space: nowrap; 1028 outline: none; 1029 -webkit-tap-highlight-color: transparent; 1030 } 1031 1032 .sk-menulink:focus, 1033 .sk-menulink:focus-visible, 1034 .sk-menulink:active { 1035 outline: none !important; 1036 box-shadow: none !important; 1037 } 1038 1039 .sk-menulink:hover, 1040 .sk-menulink.is-active { 1041 color: var(--sk-brand); 1042 text-decoration: none; 1043 } 1044 1045 .sk-menubar-extra { 1046 margin-right: auto; 1047 display: flex; 1048 align-items: center; 1049 gap: 1rem; 1050 font-size: 0.875rem; 1051 direction: rtl; 1052 } 1053 1054 .sk-menubar-extra a { 1055 color: var(--sk-ink); 1056 font-weight: 500; 1057 text-decoration: none; 1058 } 1059 1060 .sk-menubar-extra a:hover { 1061 color: var(--sk-brand); 1062 text-decoration: none; 1063 } 1064 1065 .sk-menubar-extra a.sk-extra-brand { 1066 color: var(--sk-brand); 1067 font-weight: 700; 1068 } 1069 1070 /* Mega panel */ 1071 .sk-mega-panel { 1072 display: none; 1073 position: absolute; 1074 inset-inline: 0; 1075 top: 100%; 1076 z-index: 55; 1077 background: #fff; 1078 border-top: 1px solid var(--sk-border); 1079 box-shadow: 0 20px 40px rgba(0, 0, 0, 0.12); 1080 max-height: calc(100vh - 170px); 1081 overflow: hidden; 1082 direction: rtl; 1083 text-align: right; 1084 font-family: inherit; 1085 color: var(--sk-ink); 1086 } 1087 1088 .sk-mega-panel.show { display: block; } 1089 1090 .sk-mega-panel-inner { 1091 padding: 1.5rem 0; 1092 direction: rtl; 1093 text-align: right; 1094 } 1095 1096 /* Tree panel: edge-to-edge Digikala-style layout (toggled via JS .is-tree) */ 1097 .sk-mega-panel-inner.is-tree { 1098 padding: 0; 1099 max-height: calc(100vh - 170px); 1100 overflow: hidden; 1101 } 1102 1103 .sk-mega-panel-inner.is-tree .rodin-detail-col { 1104 height: 100%; 1105 max-height: calc(100vh - 170px); 1106 } 1107 1108 .sk-mega-pane { 1109 display: none; 1110 direction: rtl; 1111 text-align: right; 1112 } 1113 .sk-mega-pane.active { display: block; } 1114 .sk-mega-panel-inner.is-tree .sk-mega-pane.active { 1115 height: 100%; 1116 max-height: calc(100vh - 170px); 1117 } 1118 1119 .sk-mega-grid { 1120 display: grid; 1121 gap: 1.5rem 1.75rem; 1122 grid-template-columns: repeat(3, minmax(0, 1fr)); 1123 direction: rtl; 1124 text-align: right; 1125 justify-items: stretch; 1126 align-content: start; 1127 } 1128 1129 @media (min-width: 1200px) { 1130 .sk-mega-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } 1131 } 1132 1133 @media (min-width: 1400px) { 1134 .sk-mega-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); } 1135 } 1136 1137 .sk-mega-group { 1138 direction: rtl; 1139 text-align: right; 1140 min-width: 0; 1141 } 1142 1143 .sk-mega-group-title { 1144 margin: 0 0 0.75rem; 1145 padding-bottom: 0.5rem; 1146 border-bottom: 1px solid var(--sk-border); 1147 font-size: 0.875rem; 1148 font-weight: 900; 1149 color: var(--sk-brand); 1150 text-align: right; 1151 letter-spacing: 0; 1152 } 1153 1154 /* Design screenshot: dark title + brand pipe; muted gray children */ 1155 .sk-tree-group-title { 1156 margin: 0 0 0.35rem; 1157 padding: 0 0.5rem 0 0; 1158 border: 0; 1159 border-right: 3px solid var(--sk-brand); 1160 font-size: 0.875rem; 1161 font-weight: 700; 1162 color: #212121; 1163 text-align: right; 1164 line-height: 1.4; 1165 letter-spacing: 0; 1166 } 1167 1168 a.sk-tree-group-title--link { 1169 display: block; 1170 text-decoration: none; 1171 color: #212121; 1172 } 1173 1174 a.sk-tree-group-title--link:hover { 1175 color: var(--sk-brand); 1176 text-decoration: none; 1177 opacity: 1; 1178 } 1179 1180 .sk-mega-list { 1181 list-style: none; 1182 margin: 0; 1183 padding: 0; 1184 text-align: right; 1185 } 1186 1187 .sk-mega-list li { 1188 text-align: right; 1189 } 1190 1191 .sk-mega-list a { 1192 display: block; 1193 padding: 0.375rem 0.5rem; 1194 border-radius: 0.375rem; 1195 font-size: 13px; 1196 font-weight: 400; 1197 color: var(--sk-ink); 1198 text-decoration: none; 1199 text-align: right; 1200 white-space: nowrap; 1201 overflow: hidden; 1202 text-overflow: ellipsis; 1203 } 1204 1205 .sk-mega-list a:hover { 1206 background: var(--sk-brand-soft); 1207 color: var(--sk-brand); 1208 text-decoration: none; 1209 } 1210 1211 .sk-tree-body .sk-mega-list { 1212 display: flex; 1213 flex-direction: column; 1214 gap: 0.15rem; 1215 } 1216 1217 .sk-tree-body .sk-mega-list a { 1218 padding: 0.2rem 0; 1219 border-radius: 0; 1220 color: #6b7280; 1221 font-weight: 400; 1222 font-size: 0.75rem; 1223 line-height: 1.7; 1224 } 1225 1226 .sk-tree-body .sk-mega-list a:hover { 1227 background: transparent; 1228 color: var(--sk-brand); 1229 } 1230 1231 .sk-mega-empty { 1232 padding: 1rem; 1233 font-size: 0.875rem; 1234 color: var(--sk-muted-fg); 1235 text-align: right; 1236 } 1237 1238 /* Tree mega â design screenshot (sidebar + multi-column body) */ 1239 .sk-tree-layout { 1240 display: grid; 1241 grid-template-columns: 220px minmax(0, 1fr); 1242 gap: 0; 1243 min-height: 380px; 1244 max-height: calc(100vh - 170px); 1245 direction: rtl; 1246 text-align: right; 1247 background: #fff; 1248 } 1249 1250 .sk-tree-roots { 1251 display: flex; 1252 flex-direction: column; 1253 gap: 0; 1254 margin: 0; 1255 padding: 0.5rem 0; 1256 border-left: 1px solid var(--sk-border); 1257 background: var(--sk-muted); 1258 overflow-y: auto; 1259 overflow-x: hidden; 1260 max-height: calc(100vh - 170px); 1261 min-height: 0; 1262 } 1263 1264 .sk-tree-root-btn { 1265 display: flex; 1266 align-items: center; 1267 gap: 0.625rem; 1268 width: 100%; 1269 border: 0; 1270 border-right: 3px solid transparent; 1271 border-bottom: 0; 1272 border-radius: 0; 1273 background: transparent; 1274 padding: 0.75rem 1rem; 1275 font-size: 0.875rem; 1276 font-weight: 500; 1277 color: var(--sk-ink); 1278 text-align: right; 1279 cursor: pointer; 1280 font-family: inherit; 1281 direction: rtl; 1282 transition: background 0.12s ease, color 0.12s ease, border-color 0.12s ease; 1283 outline: none; 1284 -webkit-tap-highlight-color: transparent; 1285 } 1286 1287 .sk-tree-root-btn:focus, 1288 .sk-tree-root-btn:focus-visible, 1289 .sk-tree-root-btn:active { 1290 outline: none !important; 1291 box-shadow: none !important; 1292 } 1293 1294 .sk-tree-root-btn:hover { 1295 background: rgba(255, 255, 255, 0.7); 1296 color: var(--sk-brand); 1297 } 1298 1299 .sk-tree-root-btn.active { 1300 background: #fff; 1301 color: var(--sk-brand); 1302 font-weight: 700; 1303 border-right-color: var(--sk-brand); 1304 } 1305 1306 .sk-tree-root-thumb { 1307 width: 1.25rem; 1308 height: 1.25rem; 1309 border: 0; 1310 border-radius: 0; 1311 background: transparent; 1312 display: inline-flex; 1313 align-items: center; 1314 justify-content: center; 1315 flex-shrink: 0; 1316 } 1317 1318 .sk-tree-root-thumb img { 1319 width: 1.125rem; 1320 height: 1.125rem; 1321 object-fit: contain; 1322 filter: grayscale(1); 1323 opacity: 0.85; 1324 } 1325 1326 .sk-tree-root-btn.active .sk-tree-root-thumb img, 1327 .sk-tree-root-btn:hover .sk-tree-root-thumb img { 1328 filter: none; 1329 opacity: 1; 1330 } 1331 1332 .sk-tree-root-thumb i { 1333 font-size: 1rem; 1334 color: var(--sk-muted-fg); 1335 line-height: 1; 1336 } 1337 1338 .sk-tree-root-btn:hover .sk-tree-root-thumb i, 1339 .sk-tree-root-btn.active .sk-tree-root-thumb i { 1340 color: var(--sk-brand); 1341 } 1342 1343 .sk-tree-root-label { 1344 flex: 1; 1345 min-width: 0; 1346 overflow: hidden; 1347 text-overflow: ellipsis; 1348 white-space: nowrap; 1349 } 1350 1351 /* Design screenshot: no chevron on root rows */ 1352 .sk-tree-chevron { 1353 display: none; 1354 } 1355 1356 .sk-tree-body { 1357 padding: 1rem 0 1.25rem; 1358 overflow-y: auto; 1359 overflow-x: hidden; 1360 max-height: calc(100vh - 170px); 1361 min-height: 0; 1362 background: #fff; 1363 } 1364 1365 .sk-tree-all { 1366 display: inline-flex; 1367 align-items: center; 1368 gap: 0.25rem; 1369 margin: 0 1.25rem 1rem; 1370 padding: 0; 1371 border: 0; 1372 background: transparent; 1373 color: var(--sk-brand); 1374 font-size: 0.8125rem; 1375 font-weight: 600; 1376 font-family: inherit; 1377 text-decoration: none; 1378 line-height: 1.4; 1379 } 1380 1381 .sk-tree-all:hover { 1382 color: var(--sk-brand); 1383 text-decoration: none; 1384 opacity: 0.85; 1385 } 1386 1387 .sk-tree-all .bi { 1388 font-size: 0.7rem; 1389 line-height: 1; 1390 } 1391 1392 /* Equal columns + light vertical rules (design screenshot) */ 1393 .sk-tree-layout .sk-mega-grid { 1394 gap: 0; 1395 grid-template-columns: repeat(5, minmax(0, 1fr)); 1396 } 1397 1398 .sk-tree-body .sk-mega-group { 1399 padding: 0.25rem 1.25rem 1rem; 1400 border-left: 1px solid #eeeeee; 1401 min-height: 100%; 1402 } 1403 1404 .sk-tree-body .sk-mega-group:nth-child(5n) { 1405 border-left: 0; 1406 } 1407 1408 @media (max-width: 1399.98px) { 1409 .sk-tree-layout .sk-mega-grid { 1410 grid-template-columns: repeat(4, minmax(0, 1fr)); 1411 } 1412 .sk-tree-body .sk-mega-group:nth-child(5n) { 1413 border-left: 1px solid #eeeeee; 1414 } 1415 .sk-tree-body .sk-mega-group:nth-child(4n) { 1416 border-left: 0; 1417 } 1418 } 1419 1420 @media (max-width: 1199.98px) { 1421 .sk-tree-layout .sk-mega-grid { 1422 grid-template-columns: repeat(3, minmax(0, 1fr)); 1423 } 1424 .sk-tree-body .sk-mega-group:nth-child(4n) { 1425 border-left: 1px solid #eeeeee; 1426 } 1427 .sk-tree-body .sk-mega-group:nth-child(3n) { 1428 border-left: 0; 1429 } 1430 } 1431 1432 .sk-tree-root-panel { 1433 display: none; 1434 } 1435 1436 .sk-tree-root-panel.active { 1437 display: block; 1438 } 1439 1440 .rodin-hidden-panel { 1441 display: none !important; 1442 } 1443 1444 @media (max-width: 991.98px) { 1445 .sk-tree-layout { 1446 grid-template-columns: 1fr; 1447 max-height: none; 1448 min-height: 0; 1449 } 1450 .sk-tree-roots { 1451 flex-direction: row; 1452 flex-wrap: nowrap; 1453 overflow-x: auto; 1454 border-left: 0; 1455 border-bottom: 1px solid var(--sk-border); 1456 max-height: none; 1457 } 1458 .sk-tree-root-btn { 1459 width: auto; 1460 flex-shrink: 0; 1461 border-bottom: 0; 1462 border-left: 1px solid #eef0f4; 1463 } 1464 .sk-tree-chevron { display: none; } 1465 .sk-tree-body { 1466 padding: 1rem; 1467 max-height: none; 1468 } 1469 } 1470 1471 .sk-desktop-mask { 1472 display: none; 1473 position: fixed; 1474 inset: 0; 1475 background: rgba(0, 0, 0, 0.25); 1476 z-index: 45; 1477 } 1478 1479 .sk-desktop-mask.show { display: block; } 1480
1481 /* ââ Mobile drawer (Layout.tsx: aside w-80 max-w-[85vw]) ââ */ 1482 .sk-drawer { 1483 display: none; 1484 position: fixed; 1485 inset: 0; 1486 z-index: 10050; 1487 } 1488 1489 .sk-drawer.is-open { display: block; } 1490 1491 .sk-drawer-backdrop { 1492 position: absolute; 1493 inset: 0; 1494 border: 0; 1495 padding: 0; 1496 margin: 0; 1497 background: rgba(0, 0, 0, 0.4); 1498 cursor: pointer; 1499 } 1500 1501 .sk-drawer-panel { 1502 position: absolute; 1503 top: 0; 1504 bottom: 0; 1505 right: 0; 1506 width: 20rem; 1507 max-width: 85vw; 1508 display: flex; 1509 flex-direction: column; 1510 background: #fff; 1511 color: var(--sk-ink, #212121); 1512 font-family: inherit; 1513 box-shadow: -8px 0 32px rgba(0, 0, 0, 0.18); 1514 direction: rtl; 1515 text-align: right; 1516 } 1517 1518 .sk-drawer-head { 1519 display: flex !important; 1520 flex-direction: row; 1521 align-items: center; 1522 justify-content: space-between; 1523 gap: 0.75rem; 1524 flex-shrink: 0; 1525 padding: 1rem; 1526 background: #25468F !important; 1527 color: #fff !important; 1528 border-bottom: 1px solid rgba(255, 255, 255, 0.12); 1529 direction: rtl; 1530 } 1531 1532 .sk-drawer-head img { 1533 height: 1.75rem; 1534 width: auto; 1535 max-width: 70%; 1536 object-fit: contain; 1537 filter: brightness(0) invert(1); 1538 } 1539 1540 .sk-drawer-close { 1541 display: inline-flex; 1542 align-items: center; 1543 justify-content: center; 1544 width: 2rem; 1545 height: 2rem; 1546 border: 0; 1547 background: transparent; 1548 color: #fff !important; 1549 font-size: 1.35rem; 1550 line-height: 1; 1551 cursor: pointer; 1552 flex-shrink: 0; 1553 } 1554 1555 .sk-drawer-body { 1556 flex: 1 1 auto; 1557 min-height: 0; 1558 overflow-y: auto; 1559 -webkit-overflow-scrolling: touch; 1560 padding: 1rem; 1561 background: #fff; 1562 direction: rtl; 1563 text-align: right; 1564 } 1565 1566 .sk-drawer-login { 1567 display: flex !important; 1568 align-items: center; 1569 justify-content: center; 1570 gap: 0.5rem; 1571 width: 100%; 1572 margin: 0 0 1rem; 1573 padding: 0.75rem 1rem; 1574 border: 0; 1575 border-radius: 0.5rem; 1576 background: #25468F !important; 1577 color: #fff !important; 1578 font-size: 0.875rem; 1579 font-weight: 700; 1580 font-family: inherit; 1581 text-decoration: none; 1582 cursor: pointer; 1583 } 1584 1585 .sk-drawer-login:hover, 1586 .sk-drawer-login:focus { 1587 color: #fff !important; 1588 text-decoration: none; 1589 opacity: 0.95; 1590 } 1591 1592 .sk-drawer-label { 1593 margin: 0 0 0.5rem; 1594 font-size: 0.75rem; 1595 font-weight: 700; 1596 color: #6b7280; 1597 } 1598 1599 .sk-drawer-cats { 1600 list-style: none; 1601 margin: 0 0 1rem; 1602 padding: 0; 1603 display: flex; 1604 flex-direction: column; 1605 gap: 0.5rem; 1606 } 1607 1608 .sk-drawer-cat { 1609 border: 1px solid #e6e8ee; 1610 border-radius: 0.75rem; 1611 overflow: hidden; 1612 background: #fff; 1613 } 1614 1615 .sk-drawer-cat > button, 1616 .sk-drawer-cat-link { 1617 display: flex; 1618 width: 100%; 1619 align-items: center; 1620 justify-content: space-between; 1621 flex-direction: row; 1622 gap: 0.5rem; 1623 padding: 0.75rem; 1624 border: 0; 1625 background: #fff; 1626 color: #212121; 1627 font-size: 0.875rem; 1628 font-weight: 700; 1629 font-family: inherit; 1630 text-align: right; 1631 direction: rtl; 1632 cursor: pointer; 1633 text-decoration: none; 1634 } 1635 1636 .sk-drawer-cat-link:hover, 1637 .sk-drawer-cat-link:focus { 1638 color: #25468F; 1639 text-decoration: none; 1640 } 1641 1642 .sk-drawer-cat .sk-drawer-groups { 1643 display: none; 1644 border-top: 1px solid #e6e8ee; 1645 background: rgba(245, 246, 248, 0.55); 1646 } 1647 1648 .sk-drawer-cat.is-open .sk-drawer-groups { display: block; } 1649 1650 .sk-drawer-group { border-bottom: 1px solid rgba(230, 232, 238, 0.7); } 1651 .sk-drawer-group:last-child { border-bottom: 0; } 1652 1653 .sk-drawer-group > button { 1654 display: flex; 1655 width: 100%; 1656 align-items: center; 1657 justify-content: space-between; 1658 padding: 0.625rem 1.25rem; 1659 border: 0; 1660 background: transparent; 1661 color: #25468F; 1662 font-size: 13px; 1663 font-weight: 700; 1664 font-family: inherit; 1665 text-align: right; 1666 cursor: pointer; 1667 } 1668 1669 .sk-drawer-group .sk-drawer-links { 1670 display: none; 1671 list-style: none; 1672 margin: 0; 1673 padding: 0 0 0.5rem; 1674 background: #fff; 1675 } 1676 1677 .sk-drawer-group.is-open .sk-drawer-links { display: block; } 1678 1679 .sk-drawer-links a { 1680 display: block; 1681 padding: 0.5rem 2rem; 1682 font-size: 13px; 1683 color: #212121; 1684 text-decoration: none; 1685 } 1686 1687 .sk-drawer-links a:hover { 1688 color: #25468F; 1689 text-decoration: none; 1690 } 1691 1692 .sk-drawer-pages { 1693 list-style: none; 1694 margin: 0; 1695 padding: 0; 1696 border: 1px solid #e6e8ee; 1697 border-radius: 0.75rem; 1698 overflow: hidden; 1699 background: #fff; 1700 direction: rtl; 1701 text-align: right; 1702 } 1703 1704 .sk-drawer-pages li { border-bottom: 1px solid #e6e8ee; } 1705 .sk-drawer-pages li:last-child { border-bottom: 0; } 1706 1707 .sk-drawer-pages a { 1708 display: block; 1709 padding: 0.75rem; 1710 font-size: 0.875rem; 1711 color: #212121; 1712 text-decoration: none; 1713 text-align: right; 1714 } 1715 1716 .sk-drawer-pages a:hover { 1717 color: #25468F; 1718 text-decoration: none; 1719 } 1720 1721 .sk-chevron { 1722 transition: transform 0.2s ease; 1723 color: #6b7280; 1724 font-size: 0.85rem; 1725 flex-shrink: 0; 1726 } 1727 1728 .sk-drawer-cat.is-open > button .sk-chevron, 1729 .sk-drawer-group.is-open > button .sk-chevron { 1730 transform: rotate(-90deg); 1731 } 1732 1733 body.sk-drawer-open { 1734 overflow: hidden !important; 1735 } 1736 1737 /* ââ Mobile bottom app nav ââ */ 1738 .sk-app-nav { 1739 display: none; 1740 } 1741 @media (max-width: 991.98px) { 1742 .sk-app-nav { 1743 --sk-brand: #25468F; 1744 --sk-border: #e6e8ee; 1745 position: fixed; 1746 left: 0; 1747 right: 0; 1748 bottom: 0; 1749 z-index: 1050; 1750 display: grid; 1751 grid-template-columns: repeat(5, 1fr); 1752 height: calc(58px + env(safe-area-inset-bottom, 0px)); 1753 padding-bottom: env(safe-area-inset-bottom, 0px); 1754 background: #ffffff; 1755 border-top: 1px solid var(--sk-border); 1756 box-shadow: 0 -2px 14px rgba(0, 0, 0, 0.06); 1757 direction: rtl; 1758 } 1759 .sk-app-nav__item { 1760 display: flex; 1761 flex-direction: column; 1762 align-items: center; 1763 justify-content: center; 1764 gap: 0.15rem; 1765 border: 0; 1766 background: transparent; 1767 color: #7b7b7b; 1768 text-decoration: none; 1769 font-size: 10px; 1770 font-weight: 600; 1771 font-family: inherit; 1772 padding: 0.25rem; 1773 line-height: 1.2; 1774 cursor: pointer; 1775 } 1776 .sk-app-nav__item i { 1777 font-size: 1.15rem; 1778 line-height: 1; 1779 } 1780 .sk-app-nav__item.is-active, 1781 .sk-app-nav__item:hover, 1782 .sk-app-nav__item:focus { 1783 color: var(--sk-brand); 1784 text-decoration: none; 1785 outline: none; 1786 } 1787 .sk-app-nav__cart-wrap { 1788 position: relative; 1789 display: inline-flex; 1790 line-height: 1; 1791 } 1792 .sk-app-nav__badge { 1793 position: absolute; 1794 top: -0.35rem; 1795 inset-inline-start: 0.65rem; 1796 min-width: 1rem; 1797 height: 1rem; 1798 padding: 0 0.2rem; 1799 border-radius: 999px; 1800 background: #ef4444; 1801 color: #fff; 1802 font-size: 9px; 1803 font-weight: 800; 1804 line-height: 1rem; 1805 text-align: center; 1806 } 1807 .sk-app-nav__badge.rodin-nav-cart-badge--empty { 1808 display: none; 1809 } 1810 body:has(.sk-app-nav) { 1811 padding-bottom: calc(58px + env(safe-area-inset-bottom, 0px)); 1812 } 1813 body:has(.sk-app-nav) .sk-footer { 1814 padding-bottom: calc(58px + env(safe-area-inset-bottom, 0px)); 1815 } 1816 } 1817 1818 /* Hide legacy ERPNext login chrome */ 1819 #rodin-login-hook, 1820 #rodin-login-hook .logged-in, 1821 #rodin-login-hook #website-post-login { 1822 display: none !important; 1823 } 1824</style> 1825 1826<div class="sk-desktop-mask" id="sk-desktop-mask" aria-hidden="true"></div> 1827 1828<header class="sk-header" dir="rtl" data-component="rodin_navbar_sk" id="skHeader"> 1829 1830 1831 1832 1833 1834 <div 1835 class="sk-topstrip" 1836 aria-label="ÙÙØ§Ø± Ø§Ø·ÙØ§Ø¹âرساÙÛ Ø¨Ø§ÙØ§" 1837 1838 > 1839 <div class="sk-container sk-topstrip-inner"> 1840 <div class="sk-topstrip-right"> 1841 1842
1843 <span>10 درصد تخÙÛÙ Ø®Ø±ÛØ¯ اÙ٠با کد: FIRSTBC01</span> 1844 1845 1846 </div> 1847 <div class="sk-topstrip-center"> 1848 1849 </div> 1850 <div class="sk-topstrip-left"> 1851 1852 1853 <span>Ø³Ø±ÛØ¹âترÛ٠ارسا٠ب٠ÙÙ ÙÙ ÙÙØ§Ø· Ø§ÛØ±Ø§Ù</span> 1854 1855 1856 </div> 1857 </div> 1858 </div> 1859 <div 1860 class="sk-promo-mobile sk-promo-mobile--on" 1861 aria-label="ÙÙØ§Ø± Ø§Ø·ÙØ§Ø¹âرساÙÛ Ù ÙØ¨Ø§ÛÙ" 1862 1863 > 1864 <div class="swiper sk-promo-swiper swiper-rtl"> 1865 <div class="swiper-wrapper"> 1866 1867 <div class="swiper-slide"> 1868 1869 <span>10 درصد تخÙÛÙ Ø®Ø±ÛØ¯ اÙ٠با کد: FIRSTBC01</span> 1870 1871 </div> 1872 1873 1874 1875 <div class="swiper-slide"> 1876 1877 <span>Ø³Ø±ÛØ¹âترÛ٠ارسا٠ب٠ÙÙ ÙÙ ÙÙØ§Ø· Ø§ÛØ±Ø§Ù</span> 1878 1879 </div> 1880 1881 </div> 1882 </div> 1883 </div> 1884 1885 1886 1887 <div class="sk-container sk-mainbar"> 1888 <a class="sk-brand" href="/" aria-label="ÙÙÚ¯Ù"> 1889 <img src="/files/download.svg" alt="ÙÙÚ¯Ù" /> 1890 </a> 1891 1892 <div class="sk-search-desktop" dir="rtl"> 1893 <div class="sk-search-box"> 1894 <i class="bi bi-search d-flex" aria-hidden="true"></i> 1895 <input id="rodin-desktop-search-input" type="text" placeholder="جستâÙØ¬ÙÛ Ú©ØªØ§Ø¨Ø ÙÙÛØ³ÙØ¯ÙØ ÙØ§Ø´Ø±Ø Ø¨Ø±ÙØ¯..." autocomplete="off" /> 1896 <button type="button" class="sk-search-submit" id="sk-search-submit">جستâÙØ¬Ù</button> 1897 </div> 1898 <div class="sk-search-dropdown" id="rodin-desktop-search-dropdown" aria-label="ÙØªØ§Ûج جستجÙ" dir="rtl"> 1899 <p class="rodin-title-sm sk-search-headline" id="rodin-desktop-search-headline">جستجÙÙØ§Û Ø§Ø®ÛØ±</p> 1900 <div id="rodin-desktop-search-results"></div> 1901 </div> 1902 </div> 1903 1904 <div class="sk-actions sk-actions-wrap"> 1905 <button type="button" class="sk-action sk-action--search-mobile" id="rodin-open-search" aria-label="جستجÙ"> 1906 <i class="bi bi-search" style="font-size:1.25rem;" aria-hidden="true"></i> 1907 </button> 1908 1909 1910 <button type="button" class="sk-action sk-action--login" data-desktop-action="login" aria-label="ÙØ±Ùد ÛØ§ ثبتâÙØ§Ù "> 1911 <i class="bi bi-person" aria-hidden="true"></i> 1912 <span>ÙØ±Ùد | ثبتâÙØ§Ù </span> 1913 </button> 1914 <button type="button" class="sk-action sk-action--icon-only-md" data-desktop-action="login" aria-label="ÙØ±Ùد"> 1915 <i class="bi bi-person" style="font-size:1.25rem;" aria-hidden="true"></i> 1916 </button> 1917 1918 1919 <a class="sk-action" href="/my-account-page?section=wishlist" aria-label="Ø¹ÙØ§ÙÙâÙ ÙØ¯Û"> 1920 <i class="bi bi-heart" style="font-size:1.25rem;" aria-hidden="true"></i> 1921 </a> 1922 1923 <a class="sk-action rodin-nav-cart-link" href="/cart" data-rodin-cart-animate aria-label="سبد Ø®Ø±ÛØ¯"> 1924 <i class="bi bi-cart3" style="font-size:1.25rem;" aria-hidden="true"></i> 1925 <span class="sk-cart-badge rodin-nav-cart-badge--empty" data-rodin-cart-badge aria-hidden="true" aria-live="polite"></span> 1926 </a> 1927 1928 <div id="rodin-desktop-account-menu" class="sk-account-menu" dir="rtl" aria-label="Ù ÙÙÛ ØØ³Ø§Ø¨ کاربرÛ"></div> 1929 </div> 1930 </div> 1931 1932 1933 <nav class="sk-menubar" id="sk-menubar" aria-label="Ù ÙÙÛ Ø¨Ø§ÙØ§" data-rodin-activate="hover"> 1934 <div class="sk-container sk-menubar-inner"> 1935 <div id="rodin-desktop-topitems" class="d-flex align-items-center flex-wrap"> 1936 1937 <button 1938 type="button" 1939 class="sk-menulink rodin-topitem-btn" 1940 data-top-index="0" 1941 data-target-url="category/کتاب" 1942 data-menu-kind="mega"> 1943 1944 <span>کتاب </span> 1945 1946 <i class="bi bi-chevron-down" style="font-size:0.75rem;" aria-hidden="true"></i> 1947 1948 </button> 1949 1950 <button 1951 type="button" 1952 class="sk-menulink rodin-topitem-btn" 1953 data-top-index="1" 1954 data-target-url="/Ú©ÙØ¯Ú©-Ù-ÙÙØ¬ÙاÙ" 1955 data-menu-kind="mega"> 1956
1957 <span>Ú©ÙØ¯Ú© Ù ÙÙØ¬ÙاÙ</span> 1958 1959 <i class="bi bi-chevron-down" style="font-size:0.75rem;" aria-hidden="true"></i> 1960 1961 </button> 1962 1963 <button 1964 type="button" 1965 class="sk-menulink rodin-topitem-btn" 1966 data-top-index="2" 1967 data-target-url="/ÙÙØ´Øª-Ø§ÙØ²Ø§Ø±" 1968 data-menu-kind="mega"> 1969 1970 <span>ÙÙØ´Øª Ø§ÙØ²Ø§Ø±</span> 1971 1972 <i class="bi bi-chevron-down" style="font-size:0.75rem;" aria-hidden="true"></i> 1973 1974 </button> 1975 1976 <button 1977 type="button" 1978 class="sk-menulink rodin-topitem-btn" 1979 data-top-index="3" 1980 data-target-url="/Ù ØØµÙÙØ§Øª-ÙØ±ÙÙÚ¯Û" 1981 data-menu-kind="mega"> 1982 1983 <span>Ø³Ø±Ú¯Ø±Ù Û Ù Ø®ÙØ§ÙÛØª</span> 1984 1985 <i class="bi bi-chevron-down" style="font-size:0.75rem;" aria-hidden="true"></i> 1986 1987 </button> 1988 1989 <button 1990 type="button" 1991 class="sk-menulink rodin-topitem-btn" 1992 data-top-index="4" 1993 data-target-url="/Ú¯ÛÙØª-Ù-ÙÙØ±Û" 1994 data-menu-kind="mega"> 1995 1996 <span>ØµÙØ§Ûع دستÛ</span> 1997 1998 <i class="bi bi-chevron-down" style="font-size:0.75rem;" aria-hidden="true"></i> 1999 2000 </button> 2001 2002 <button 2003 type="button" 2004 class="sk-menulink rodin-topitem-btn" 2005 data-top-index="5" 2006 data-target-url="/ÙØ±ÙØ´-ساز٠اÙÛ-Ø´ÙØ±Ú©ØªØ§Ø¨-اÙÙØ§ÛÙ" 2007 data-menu-kind="link"> 2008 2009 <span>کارت ÙØ¯ÛÙ</span> 2010 2011 </button> 2012 2013 <button 2014 type="button" 2015 class="sk-menulink rodin-topitem-btn" 2016 data-top-index="6" 2017 data-target-url="/mag" 2018 data-menu-kind="link"> 2019 2020 <span>٠جÙÙâÛ Ø´ÙØ±Ú©ØªØ§Ø¨ Ø¢ÙÙØ§ÛÙ</span> 2021 2022 </button> 2023 2024 <button 2025 type="button" 2026 class="sk-menulink rodin-topitem-btn" 2027 data-top-index="7" 2028 data-target-url="/contact" 2029 data-menu-kind="link"> 2030 2031 <span>ت٠اس با ٠ا</span> 2032 2033 </button> 2034 2035 </div> 2036 2037 <div class="sk-menubar-extra"> 2038 <a href="/mag">٠جÙÙ</a> 2039 <a href="/about">دربار٠٠ا</a> 2040 <a href="/how%20to%20order">راÙÙ٠ا Ø®Ø±ÛØ¯</a> 2041 2042 <a class="sk-extra-brand" href="/corporate-gift">کارت ÙØ¯Û٠ساز٠اÙÛ</a> 2043 </div> 2044 </div> 2045 2046 <div class="sk-mega-panel" id="rodin-desktop-category-panel" aria-label="Ù¾ÙÙ Ù ÙÙ"> 2047 <div class="sk-container sk-mega-panel-inner" data-rodin-menu-scope="desktop"> 2048 <div class="rodin-detail-col"> 2049 2050 2051 2052 2053 <div 2054 class="sk-mega-pane rodin-detail-panel active " 2055 data-top-panel="0" 2056 data-top-title="کتاب "> 2057 2058 2059 <div class="sk-mega-grid"> 2060 2061 2062 2063 2064 <div class="sk-mega-group"> 2065 <div class="sk-mega-group-title">Ø§Ø¯Ø¨ÛØ§Øª</div> 2066 <ul class="sk-mega-list"> 2067 2068 2069 <li><a href="/category/داستاÙ-Ø§ÛØ±Ø§Ù">Ø¯Ø§Ø³ØªØ§Ù Ø§ÛØ±Ø§Ù</a></li> 2070 2071 2072 2073 <li><a href="/category/داستاÙ-Ø¬ÙØ§Ù">Ø¯Ø§Ø³ØªØ§Ù Ø¬ÙØ§Ù</a></li> 2074 2075 2076 2077 <li><a href="/tag/جستار?existence_filters=%7B"has_selling_stock"%3A%5B1%5D%7D">جستار</a></li> 2078 2079 2080 2081 <li><a href="/category/ÙÙØ¯-ادبÛ">ÙÙØ¯ Ø§Ø¯Ø¨Û Ù Ø²Ø¨Ø§ÙâØ´ÙØ§Ø³Û</a></li> 2082 2083 2084 2085 <li><a href="/category/شعر-Ú©ÙØ§Ø³ÛÚ©-Ø§ÛØ±Ø§Ù">شعر Ø§ÛØ±Ø§Ù</a></li> 2086 2087 2088 2089 <li><a href="/category/شعر-Ø¬ÙØ§Ù">شعر Ø¬ÙØ§Ù</a></li> 2090 2091 2092 2093 <li><a href="/category/٠تÙÙ-Ú©ÙÙ">٠تÙÙ Ú©ÙÙ</a></li> 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 </ul> 2143 </div> 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 <div class="sk-mega-group"> 2161 <div class="sk-mega-group-title">ØªØ§Ø±ÛØ® Ù Ø§Ø³Ø·ÙØ±Ù</div> 2162 <ul class="sk-mega-list"> 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 <li><a href="/category/ØªØ§Ø±ÛØ®-Ú©ÙÙ">ØªØ§Ø±ÛØ® Ø§ÛØ±Ø§Ù</a></li> 2180 2181 2182 2183 <li><a href="/category/ØªØ§Ø±ÛØ®-Ø¬ÙØ§Ù">ØªØ§Ø±ÛØ® Ø¬ÙØ§Ù</a></li> 2184 2185 2186 2187 <li><a href="/category/Ø§Ø³Ø·ÙØ±Ù">Ø§Ø³Ø·ÙØ±Ù</a></li> 2188 2189 2190 2191 <li><a href="/category/خاطرات-Ù-Ø³ÙØ±Ùا٠Ù-Ù-Ø³Ø±Ú¯Ø°Ø´ØªÙØ§Ù Ù">Ø²ÙØ¯Ú¯ÛâÙØ§Ù ÙØ Ø®Ø§Ø·Ø±Ø§ØªØ Ù Ø³ÙØ±Ùا٠Ù</a></li> 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 </ul> 2233 </div> 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 <div class="sk-mega-group"> 2245 <div class="sk-mega-group-title">کتب ٠رجع Ù Ø³Ø§ÛØ± عÙÙÙ </div> 2246 <ul class="sk-mega-list"> 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 <li><a href="/category/عÙÙ ">عÙÙ </a></li> 2272 2273 2274 2275 <li><a href="/category/٠رجع">٠رجع</a></li> 2276 2277 2278 2279 <li><a href="/category/ØÙÙÙ">ØÙÙÙ</a></li> 2280 2281 2282 2283 <li><a href="/category/گردشگرÛ-Ù-ÙÙØ´Ù">Ú¯Ø±Ø¯Ø´Ú¯Ø±Û Ù ÙÙØ´Ù</a></li> 2284 2285 2286 2287 <li><a href="/category/آشپزÛ">آشپزÛ</a></li> 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 </ul> 2319 </div> 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 <div class="sk-mega-group"> 2333 <div class="sk-mega-group-title">عÙÙÙ Ø§ÙØ³Ø§ÙÛ</div> 2334 <ul class="sk-mega-list"> 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 <li><a href="/category/Ø§ÙØªØµØ§Ø¯">Ø§ÙØªØµØ§Ø¯</a></li> 2370 2371 2372 2373 <li><a href="/category/Ø§ÛØ±Ø§Ù-Ø´ÙØ§Ø³Û">Ø§ÛØ±Ø§Ù Ø´ÙØ§Ø³Û</a></li> 2374
2374 2375 2376 2377 <li><a href="/category/Ù Ø¯ÛØ±Ûت">Ù Ø¯ÛØ±Ûت</a></li> 2378 2379 2380 2381 <li><a href="/category/ÙÙØ³ÙÙ">ÙÙØ³ÙÙ Ù Ø¹Ø±ÙØ§Ù</a></li> 2382 2383 2384 2385 <li><a href="/category/ÙØ±ÙÙÚ¯-٠رد٠-Ù-Ø·ÙØ²">ÙØ±ÙÙÚ¯ Ù Ø±Ø¯Ù Ù Ø·ÙØ²</a></li> 2386 2387 2388 2389 <li><a href="/category/دÛÙ-Ù-Ù Ø°ÙØ¨">دÛÙ Ù Ù Ø°ÙØ¨</a></li> 2390 2391 2392 2393 <li><a href="/category/عÙÙÙ -اجت٠اعÛ-Ù-Ø³ÛØ§Ø³Û">عÙÙÙ Ø§Ø¬ØªÙ Ø§Ø¹Û Ù Ø³ÛØ§Ø³Û</a></li> 2394 2395 2396 2397 <li><a href="/category/Ø²ÙØ§Ù-Ù-ÙÙ ÙÛØ³Ù ">Ø²ÙØ§Ù Ù ÙÙ ÙÛØ³Ù </a></li> 2398 2399 2400 2401 <li><a href="/category/Ø±ÙØ§Ù%E2%80%8CØ´ÙØ§Ø³Û">Ø±ÙØ§ÙØ´ÙØ§Ø³Û</a></li> 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 </ul> 2415 </div> 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 <div class="sk-mega-group"> 2437 <div class="sk-mega-group-title">ÙÙØ±</div> 2438 <ul class="sk-mega-list"> 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 <li><a href="/category/سÛÙ٠ا">سÛÙ٠ا</a></li> 2492 2493 2494 2495 <li><a href="/category/ÙÙ Ø§ÛØ´">ÙÙ Ø§ÛØ´</a></li> 2496 2497 2498 2499 <li><a href="/category/ÙÙØ±-تجس٠Û">ÙÙØ±ÙØ§Û ØªØ¬Ø³Ù Û</a></li> 2500 2501 2502 2503 <li><a href="/category/Ù ÙØ³ÛÙÛ">Ù ÙØ³ÛÙÛ</a></li> 2504 2505 2506 2507 <li><a href="/category/٠ع٠ارÛ">٠ع٠ارÛ</a></li> 2508 2509 2510 </ul> 2511 </div> 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 </div> 2523 2524 2525 </div> 2526 2527 2528 2529 2530 <div 2531 class="sk-mega-pane rodin-detail-panel " 2532 data-top-panel="1" 2533 data-top-title="Ú©ÙØ¯Ú© Ù ÙÙØ¬ÙاÙ"> 2534 2535 2536 <div class="sk-mega-grid"> 2537 2538 2539 2540 2541 <div class="sk-mega-group"> 2542 <div class="sk-mega-group-title">کتابâÙØ§Û Ø®Ø±Ø¯Ø³Ø§ÙØ§Ù</div> 2543 <ul class="sk-mega-list"> 2544 2545 2546 <li><a href="/category/ØµÙØ±-تا-سÙ-ساÙ">ØµÙØ± تا س٠ساÙ</a></li> 2547 2548 2549 2550 <li><a href="/category/Ù¾ÛØ´-از-دبستاÙ">Ù¾ÛØ´ از دبستاÙ</a></li> 2551 2552 2553 2554 <li><a href="/category/Ú©ØªØ§Ø¨ÙØ§Û-ØÙ ا٠-Ù-پارÚÙ%E2%80%8CاÛ">کتابâÙØ§Û ØÙ ا٠٠پارÚÙâØ§Û</a></li> 2555 2556 2557 2558 <li><a href="/category/رÙÚ¯%E2%80%8CØ¢Ù ÛØ²Û">رÙÚ¯âØ¢Ù ÛØ²Û</a></li> 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 </ul> 2600 </div> 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 <div class="sk-mega-group"> 2612 <div class="sk-mega-group-title">کتابâÙØ§Û دبستاÙÛ</div> 2613 <ul class="sk-mega-list"> 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 <li><a href="/category/ساÙ%E2%80%8CÙØ§Û-اÙÙ-دبستاÙ">ساÙâÙØ§Û اÙ٠دبستاÙ</a></li> 2625 2626 2627 2628 <li><a href="/category/ساÙ%E2%80%8CÙØ§Û-آخر-دبستاÙ">ساÙâÙØ§Û آخر دبستاÙ</a></li> 2629 2630 2631 2632 <li><a href="/category/Ø¢Ù ÙØ²Ø´Û-Ú©ÙØ¯Ú©">Ø¢Ù ÙØ²Ø´Û Ú©ÙØ¯Ú©</a></li> 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 </ul> 2668 </div> 2669 2670 2671 2672 2673 2674 2675 2676 2677 <div class="sk-mega-group"> 2678 <div class="sk-mega-group-title">داستا٠٠تخÛÙ</div> 2679 <ul class="sk-mega-list"> 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 <li><a href="/category/داستاÙ-Ø§ÛØ±Ø§ÙÛ">Ø¯Ø§Ø³ØªØ§Ù Ø§ÛØ±Ø§ÙÛ</a></li> 2697 2698 2699 2700 <li><a href="/category/تخÛÙÛ">تخÛÙÛ</a></li> 2701 2702 2703 2704 <li><a href="/category/Ú©ÙØ§Ø³ÛÚ©">Ú©ÙØ§Ø³ÛÚ©</a></li> 2705 2706 2707 2708 <li><a href="/category/ÙØ§Ùع%E2%80%8Cگرا">ÙØ§Ùعâگرا</a></li> 2709 2710 2711 2712 <li><a href="/category/ÙØØ´Øª-Ù-کارآگاÙÛ">ÙØØ´Øª ٠کارآگاÙÛ</a></li> 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 </ul> 2738 </div> 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 <div class="sk-mega-group"> 2752 <div class="sk-mega-group-title">شعر Ù Ø·ÙØ²</div> 2753 <ul class="sk-mega-list"> 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773
2773 2774 2775 2776 2777 2778 2779 2780 <li><a href="/category/شعر-Ú©ÙØ¯Ú©">شعر Ú©ÙØ¯Ú©</a></li> 2781 2782 2783 2784 <li><a href="/category/شعر-ÙÙØ¬ÙاÙ">شعر ÙÙØ¬ÙاÙ</a></li> 2785 2786 2787 2788 <li><a href="/category/Ø·ÙØ²-Ú©ÙØ¯Ú©-Ù-ÙÙØ¬ÙاÙ">Ø·ÙØ² Ú©ÙØ¯Ú© Ù ÙÙØ¬ÙاÙ</a></li> 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 </ul> 2808 </div> 2809 2810 2811 2812 2813 2814 2815 2816 2817 <div class="sk-mega-group"> 2818 <div class="sk-mega-group-title">Ø¢Ù ÙØ²Ø´Û Ù ÙØ±ÙÙÚ¯Û</div> 2819 <ul class="sk-mega-list"> 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 <li><a href="/category/Ø¯Ø§ÛØ±Ø©%E2%80%8CاÙ٠عارÙ---عÙÙ Û">Ø¯Ø§ÛØ±Ù اÙ٠عار٠٠عÙÙ Û</a></li> 2853 2854 2855 2856 <li><a href="/category/Ù ÙØ§Ø±ØªÙاÛ-Ø²ÙØ¯Ú¯Û">Ù ÙØ§Ø±ØªâÙØ§Û Ø²ÙØ¯Ú¯Û</a></li> 2857 2858 2859 2860 <li><a href="/category/ØªØ§Ø±ÛØ®---ÙÙØ³ÙÙ">ØªØ§Ø±ÛØ® Ù ÙÙØ³ÙÙ</a></li> 2861 2862 2863 2864 <li><a href="/category/Ø§Ø¯Ø¨ÛØ§Øª-Ú©ÙÙ-ÙØ§Ø±Ø³Û">Ø§Ø¯Ø¨ÛØ§Øª Ú©ÙÙ ÙØ§Ø±Ø³Û</a></li> 2865 2866 2867 2868 <li>
2868<a href="/category/Ø²ÙØ¯Ú¯Û%E2%80%8CÙØ§Ù Ù">Ø²ÙØ¯Ú¯ÛÙØ§Ù Ù</a></li> 2869 2870 2871 2872 <li><a href="/category/Ù Ø°ÙØ¨Û">Ù Ø°ÙØ¨Û</a></li> 2873 2874 2875 2876 2877 2878 2879 </ul> 2880 </div> 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 <div class="sk-mega-group"> 2896 <div class="sk-mega-group-title">Ø²Ø¨Ø§Ù Ù ÙØ´Ø±Ûات</div> 2897 <ul class="sk-mega-list"> 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 <li><a href="/category/زباÙ%E2%80%8CÙØ§Û-خارجÛ">زباÙâÙØ§Û خارجÛ</a></li> 2943 2944 2945 2946 <li><a href="/category/ÙØ´Ø±Ûات-Ú©ÙØ¯Ú©">ÙØ´Ø±Ûات Ú©ÙØ¯Ú©</a></li> 2947 2948 2949 </ul> 2950 </div> 2951 2952 2953 2954 2955 </div> 2956 2957 2958 </div> 2959 2960 2961 2962 2963 <div 2964 class="sk-mega-pane rodin-detail-panel " 2965 data-top-panel="2" 2966 data-top-title="ÙÙØ´Øª Ø§ÙØ²Ø§Ø±"> 2967 2968 2969 <div class="sk-mega-grid"> 2970 2971 2972 2973 2974 <div class="sk-mega-group"> 2975 <div class="sk-mega-group-title">ÙÙØ´ØªâØ§ÙØ²Ø§Ø± ع٠ÙÙ Û Ù Ù Ø¯Ø±Ø³ÙâØ§Û</div> 2976 <ul class="sk-mega-list"> 2977 2978 2979 <li><a href="/category/Ø®ÙØ¯Ú©Ø§Ø±-Ù-Ø±ÙØ§Ù%E2%80%8CÙÙÛØ³">Ø®ÙØ¯Ú©Ø§Ø± Ù Ø±ÙØ§ÙâÙÙÛØ³</a></li> 2980 2981 2982 2983 <li><a href="/category/٠داد-ÙÙÚ©Û-Ù-ÙÙÚ©">٠داد ÙÙÚ©Û Ù ÙÙÚ©</a></li> 2984 2985 2986 2987 <li><a href="/category/٠داد-Ù-سر٠دادÛ">٠داد ٠سر٠دادÛ</a></li> 2988 2989 2990 2991 <li><a href="/category/٠اÚÛÚ©-Ù-ÙØ§ÛÙØ§Ûتر">٠اÚÛÚ© Ù ÙØ§ÛÙØ§Ûتر</a></li> 2992 2993 2994 2995 <li><a href="/category/پاک%E2%80%8CÚ©Ù">پاکâÚ©Ù</a></li> 2996 2997 2998 2999 <li><a href="/category/تراش">تراش</a></li> 3000 3001 3002 3003 <li><a href="/category/ØºÙØ·%E2%80%8CÚ¯ÛØ±">ØºÙØ·âÚ¯ÛØ±</a></li> 3004 3005 3006 3007 <li><a href="/category/خط-Ú©Ø´-Ø¯Ø§ÙØ´-Ø¢Ù ÙØ²Û">خطâÚ©Ø´ Ø¯Ø§ÙØ´âØ¢Ù ÙØ²Û</a></li> 3008 3009 3010 3011 <li><a href="/category/پرگار-Ø¯Ø§ÙØ´%E2%80%8CØ¢Ù ÙØ²Û">پرگار Ø¯Ø§ÙØ´âØ¢Ù ÙØ²Û</a></li> 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 <li><a href="/category/ظرÙ-Ù-ÙÛÙØ§Ù-٠درسÙ">ظر٠غذا Ù ÙÛÙØ§Ù Ù ÙÙ ÙÙ Ù</a></li> 3074 3075 3076 </ul> 3077 </div> 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 <div class="sk-mega-group"> 3099 <div class="sk-mega-group-title">ÙÙØ§Ø²Ù طراØÛ Ù ÙÙØ§Ø´Û</div> 3100 <ul class="sk-mega-list"> 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 <li><a href="/category/٠داد-رÙÚ¯Û">٠داد رÙÚ¯Û</a></li> 3122 3123 3124 3125 <li><a href="/category/پاستÙ-Ù-٠داد-ش٠عÛ">پاست٠٠٠داد ش٠عÛ</a></li> 3126 3127 3128 3129 <li><a href="/category/آبرÙÚ¯">آبرÙÚ¯</a></li> 3130 3131 3132 3133 <li><a href="/category/Ú¯ÙØ§Ø´">Ú¯ÙØ§Ø´</a></li> 3134 3135 3136 3137 <li><a href="/category/رÙÚ¯">رÙÚ¯</a></li> 3138 3139 3140 3141 <li><a href="/category/ÙÙÙ %E2%80%8CÙ Ù">ÙÙÙ âÙ Ù</a></li> 3142 3143 3144 3145 <li><a href="/category/شابÙÙÙ">شابÙÙÙ</a></li> 3146 3147 3148 3149 <li><a href="/category/بÙÙ -Ù-سÙ-پاÛÙ">بÙ٠٠سÙâپاÛÙ</a></li> 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 </ul> 3197 </div> 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 <div class="sk-mega-group"> 3217 <div class="sk-mega-group-title">ÙÙØ§Ø²Ù ادارÛ</div> 3218 <ul class="sk-mega-list"> 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 <li><a href="/category/ÚØ³Ø¨-Ù-پاÛÙ-ÚØ³Ø¨">ÚØ³Ø¨ ٠پاÛÙâ ÚØ³Ø¨</a></li> 3256 3257 3258 3259 <li><a href="/category/Ù ÙÚ¯ÙÙ-Ù-پاÙÚ">Ù ÙÚ¯Ù٠٠پاÙÚ</a></li> 3260 3261 3262 3263 <li><a href="/category/کاتر-Ù-ÙÛÚÛ">کاتر Ù ÙÛÚÛ</a></li> 3264 3265 3266
3266 3267 <li><a href="/category/ذرÙ-بÛÙ">ذرÙâØ¨ÛÙ</a></li> 3268 3269 3270 3271 <li><a href="/category/٠اشÛÙ-ØØ³Ø§Ø¨">٠اشÛÙ ØØ³Ø§Ø¨</a></li> 3272 3273 3274 3275 <li><a href="/category/ÙÙØ§Ø²Ù -باÛگاÙÛ">ابزار باÛگاÙÛ</a></li> 3276 3277 3278 3279 <li><a href="/category/ست-ادارÛ">ست ادارÛ</a></li> 3280 3281 3282 3283 <li><a href="/category/Ø³Ø§ÛØ±-ÙÙØ§Ø²Ù -ادارÛ">Ø³Ø§ÛØ± ÙÙØ§Ø²Ù ادارÛ</a></li> 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 <li><a href="/category/Ø¯ÛØ¬ÛتاÙ">Ø¯ÛØ¬ÛتاÙ</a></li> 3312 3313 3314 3315 3316 </ul> 3317 </div> 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 <div class="sk-mega-group"> 3337 <div class="sk-mega-group-title">Ø¯ÙØªØ±Ø کاغذ Ù Ù ÙÙØ§</div> 3338 <ul class="sk-mega-list"> 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 <li><a href="/category/Ø¯ÙØªØ±-Ù Ø´Ù-Ù-ÛØ§Ø¯Ø¯Ø§Ø´Øª">Ø¯ÙØªØ±</a></li> 3392 3393 3394 3395 <li><a href="/category/Ø¯ÙØªØ±-Ø¨Ø±ÙØ§Ù Ù-Ø±ÛØ²Û">Ø¯ÙØªØ± Ø¨Ø±ÙØ§Ù ÙâØ±ÛØ²Û (Ù¾ÙÙØ±)</a></li> 3396 3397 3398 3399 <li><a href="/category/Ø¯ÙØªØ±-طراØÛ-Ù-Ø®ÙØ´ÙÙÛØ³Û">Ø¯ÙØªØ± طراØÛ Ù Ø®ÙØ´ÙÙÛØ³Û</a></li> 3400 3401 3402 3403 <li><a href="/category/ÛØ§Ø¯Ø¯Ø§Ø´Øª-ÚØ³Ø¨Ø¯Ø§Ø±-(پست%E2%80%8CØ§ÛØª)">ÛØ§Ø¯Ø¯Ø§Ø´Øª ÚØ³Ø¨Ø¯Ø§Ø± (Ù¾Ø³ØªâØ§ÛØª)</a></li> 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 </ul> 3427 </div> 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 <div class="sk-mega-group"> 3439 <div class="sk-mega-group-title">Ú©ÛÙØ Ú©ÙÙÙâÙ¾Ø´ØªÛ Ù Ø¬Ø§Ù Ø¯Ø§Ø¯Û</div> 3440 <ul class="sk-mega-list"> 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 <li><a href="/category/جا٠دادÛ">جا٠دادÛ</a></li> 3502 3503 3504 3505 <li><a href="/category/Ú©ÛÙ-Ù-Ú©ÙÙÙ-٠درسÙ">Ú©ÛÙ Ù Ú©ÙÙÙâپشتÛ</a></li> 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 </ul> 3525 </div> 3526 3527 3528 3529 3530 3531 3532 <div class="sk-mega-group"> 3533 <div class="sk-mega-group-title">ابزار ٠تجÙÛØ²Ø§Øª ØªØ®ØµØµÛ ÙÙØ±Û Ù ÙÙÛ</div> 3534 <ul class="sk-mega-list"> 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 <li><a href="/category/٠داد-ÙÙØ±Û">٠داد ÙÙØ±Û</a></li> 3600 3601 3602 3603 <li><a href="/category/ÙÙÙ -Ù-٠رکب">ÙÙ٠٠٠رکب</a></li> 3604 3605 3606 3607 <li><a href="/category/ابزار-تخصصÛ-ÙÙØ±Û">ابزار ØªØ®ØµØµÛ ÙÙØ±Û</a></li> 3608 3609 3610 3611 <li><a href="/category/خط-Ú©Ø´-Ù-اشÙ">خطâÚ©Ø´ ٠اشÙ</a></li> 3612 3613 3614 3615 <li><a href="/category/ÚØ±Ø§Øº-Ù Ø·Ø§ÙØ¹Ù">ÚØ±Ø§Øº Ù Ø·Ø§ÙØ¹Ù</a></li> 3616 3617 3618 3619 <li><a href="/category/تختÙ-Ù-Ù ÛØ²Ú©Ø§Ø±">ØªØ®ØªÙ Ù Ù ÛØ²Ú©Ø§Ø±</a></li> 3620 3621 3622 3623 3624 3625 3626 </ul> 3627 </div> 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 </div> 3645 3646 3647 </div> 3648 3649 3650 3651 3652 <div 3653 class="sk-mega-pane rodin-detail-panel " 3654 data-top-panel="3" 3655 data-top-title="Ø³Ø±Ú¯Ø±Ù Û Ù Ø®ÙØ§ÙÛØª"> 3656 3657 3658 <div class="sk-mega-grid"> 3659 3660 3661 3662 3663 <div class="sk-mega-group"> 3664 <div class="sk-mega-group-title">بازÛâÙØ§Û رÙÙ ÛØ²ÛØ Ú©Ø§Ø±ØªÛ Ù Ø¯ÙØ±ÙÙ Û</div> 3665 <ul class="sk-mega-list"> 3666 3667 3668 <li><a href="/category/بازÛ-کارتÛ-Ù-Ø¯ÙØ±ÙÙ Û">Ø¨Ø§Ø²Û Ú©Ø§Ø±ØªÛ Ù Ø¯ÙØ±ÙÙ Û</a></li> 3669
3669 3670 3671 3672 <li><a href="/category/بازÛ-استراتÚÛ">Ø¨Ø§Ø²Û Ø§Ø³ØªØ±Ø§ØªÚÛ</a></li> 3673 3674 3675 3676 <li><a href="/category/بازÛ-٠ع٠اÛÛ">Ø¨Ø§Ø²Û Ù Ø¹Ù Ø§ÛÛ</a></li> 3677 3678 3679 3680 <li><a href="/category/پازÙ">پازÙ</a></li> 3681 3682 3683 3684 <li><a href="/category/Ø¬ÙØ±ÚÛÙ-Ù-پازÙ-Ú©ÙØ¯Ú©">Ø¬ÙØ±ÚÛÙ Ù Ù¾Ø§Ø²Ù Ú©ÙØ¯Ú©</a></li> 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 </ul> 3712 </div> 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 <div class="sk-mega-group"> 3726 <div class="sk-mega-group-title">Ú©Ø§Ø±Ø¯Ø³ØªÛ Ù Ù ÙØ§Ø±ØªÛ</div> 3727 <ul class="sk-mega-list"> 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 <li><a href="/category/کاردستÛ">کاردستÛ</a></li> 3741 3742 3743 3744 <li><a href="/category/Ø®Ù ÛØ±Ø¨Ø§Ø²Û">Ø®Ù ÛØ±Ø¨Ø§Ø²Û</a></li> 3745 3746 3747 3748 <li><a href="/category/رÙÚ¯-اÙگشتÛ">رÙÚ¯ اÙگشتÛ</a></li> 3749 3750 3751 3752 <li><a href="/category/ÙÚ¯Ù-Ù-ساختÙÛ">Ùگ٠٠ساختÙÛ</a></li> 3753 3754 3755 3756 <li><a href="/category/٠اکت-سازÛ">Ù Ø§Ú©ØªâØ³Ø§Ø²Û</a></li> 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 </ul> 3774 </div> 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 <div class="sk-mega-group"> 3788 <div class="sk-mega-group-title">Ø¢Ù ÙØ²Ø´Û Ù ÙکرÛ</div> 3789 <ul class="sk-mega-list"> 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 <li><a href="/category/Ø¢Ù ÙØ²Ø´Û-ÙکرÛ-Ù ÙØ§Ø±ØªÛ">Ø¢Ù ÙØ²Ø´ ÙÚ©Ø±Û Ù ÙØ§Ø±ØªÛ</a></li> 3813 3814 3815 3816 <li><a href="/category/ÙØ³Ø§ÛÙ-سرگر٠Û">ÙØ³Ø§Û٠سرگر٠Û</a></li> 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 </ul> 3830 </div> 3831 3832 3833 3834 3835 3836 3837 <div class="sk-mega-group"> 3838 <div class="sk-mega-group-title">Ø§Ø³Ø¨Ø§Ø¨âØ¨Ø§Ø²Û Ù ÙÛÚ¯ÙØ±</div> 3839 <ul class="sk-mega-list"> 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 <li><a href="/category/Ø¹Ø±ÙØ³Ú©-Ù-ÙÛÚ¯ÙØ±">ÙÛÚ¯ÙØ±</a></li> 3867 3868 3869 3870 <li><a href="/category/تÙÙÚ¯-بازÛ">تÙÙÚ¯ بازÛ</a></li> 3871 3872 3873 3874 <li><a href="/category/٠اشÛÙ-بازÛ">٠اشÛÙâØ¨Ø§Ø²Û</a></li> 3875 3876 3877 3878 <li><a href="/category/ستâÙØ§Û-بازÛ">ستâÙØ§Û بازÛ</a></li> 3879 3880 3881 3882 <li><a href="/category/Ø³Ø§ÛØ±-Ø§Ø³Ø¨Ø§Ø¨âØ¨Ø§Ø²ÛâÙØ§">Ø³Ø§ÛØ± Ø§Ø³Ø¨Ø§Ø¨âØ¨Ø§Ø²ÛâÙØ§</a></li> 3883 3884 3885 </ul> 3886 </div> 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 </div> 3898 3899 3900 </div> 3901 3902 3903 3904 3905 <div 3906 class="sk-mega-pane rodin-detail-panel " 3907 data-top-panel="4" 3908 data-top-title="ØµÙØ§Ûع دستÛ"> 3909 3910 3911 <div class="sk-mega-grid"> 3912 3913 3914 3915 3916 <div class="sk-mega-group"> 3917 <div class="sk-mega-group-title">Ø¯Ú©ÙØ±Ø§Ø³ÛÙ٠٠تزÛÛÙØ§Øª Ù ÙØ²Ù</div> 3918 <ul class="sk-mega-list"> 3919 3920 3921 <li><a href="/category/آباÚÙØ±-Ù-Ø±ÙØ´ÙاÛÛ">آباÚÙØ± Ù Ø±ÙØ´ÙاÛÛ</a></li> 3922 3923 3924 3925 <li><a href="/category/دÛÙØ§Ø±Ú©Ùب-(تابÙÙ---Ø¢ÛÙÙ-کاشÛ-جاکÙÛØ¯Û)">دÛÙØ§Ø±Ú©Ùب</a></li> 3926 3927 3928 3929 <li><a href="/category/رÙÙ ÛØ²Û-Ø±Ø§ÙØ±-Ú©ÙØ³Ù">رÙÙ ÛØ²ÛØ Ø±Ø§ÙØ±Ø Ú©ÙØ³Ù</a></li> 3930 3931 3932 3933 <li><a href="/category/٠جس٠Ù-Ù-ØªÙØ¯Ûس">Ù Ø¬Ø³Ù Ù Ù ØªÙØ¯Ûس</a></li> 3934 3935 3936 3937 <li><a href="/category/Ú¯ÙÛÙ ">Ú¯ÙÛÙ </a></li> 3938 3939 3940 3941 <li><a href="/category/ش٠ع-Ù-ش٠عداÙ-Ù-Ø¹ÙØ¯-Ù-ÙØ§Ø±Ù ر">ش٠ع Ù Ø´Ù Ø¹Ø¯Ø§Ù Ù Ø¹ÙØ¯ Ù ÙØ§Ø±Ù ر</a></li> 3942 3943 3944 3945 <li><a href="/category/Ø¯Ú©ÙØ±Ø§ØªÛÙ">Ø¯Ú©ÙØ±Ø§ØªÛÙ</a></li> 3946 3947 3948 3949 <li><a href="/category/Ú¯ÙÛ-Ù-Ù ÙØ²ÛÚ©-باکس">Ú¯ÙÛ Ù Ù ÙØ²ÛÚ© باکس</a></li> 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 </ul> 3961 </div> 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 <div class="sk-mega-group"> 3981 <div class="sk-mega-group-title">٠د Ù Ø§Ú©Ø³Ø³ÙØ±Û</div> 3982 <ul class="sk-mega-list"> 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 <li><a href="/category/Ú©ÛÙ-ÚØ±Ù -Ù-پارÚÙ">Ú©ÛÙ ÚØ±Ù ٠پارÚÙ</a></li> 4002 4003 4004 4005 <li><a href="/category/زÛÙØ±Ø¢Ùات">زÛÙØ±Ø¢Ùات</a></li> 4006 4007 4008 4009 4010 4011 4012 </ul> 4013 </div> 4014 4015 4016 4017 4018 4019 4020 <div class="sk-mega-group"> 4021 <div class="sk-mega-group-title">ظرÙÙ</div> 4022 <ul class="sk-mega-list"> 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 <li><a href="/category/٠اگ-Ù-ÙÛÙØ§Ù-Ù-ÙÙØ¬Ø§Ù">Ù Ø§Ú¯Ø ÙÛÙØ§Ù Ù ÙÙØ¬Ø§Ù</a></li> 4046 4047 4048 4049 <li><a href="/category/ظرÙÙ">Ù٠٠ظرÙÙ</a></li> 4050 4051 4052 </ul> 4053 </div> 4054 4055 4056 4057 4058 </div
4058> 4059 4060 4061 </div> 4062 4063 4064 4065 4066 <div 4067 class="sk-mega-pane rodin-detail-panel rodin-detail-panel--link" 4068 data-top-panel="5" 4069 data-top-title="کارت ÙØ¯ÛÙ"> 4070 4071 4072 <div class="sk-mega-empty"> 4073 <a href="/ÙØ±ÙØ´-ساز٠اÙÛ-Ø´ÙØ±Ú©ØªØ§Ø¨-اÙÙØ§ÛÙ">Ù Ø´Ø§ÙØ¯Ù کارت ÙØ¯ÛÙ</a> 4074 </div> 4075 4076 </div> 4077 4078 4079 4080 4081 <div 4082 class="sk-mega-pane rodin-detail-panel rodin-detail-panel--link" 4083 data-top-panel="6" 4084 data-top-title="٠جÙÙâÛ Ø´ÙØ±Ú©ØªØ§Ø¨ Ø¢ÙÙØ§ÛÙ"> 4085 4086 4087 <div class="sk-mega-empty"> 4088 <a href="/mag">Ù Ø´Ø§ÙØ¯Ù ٠جÙÙâÛ Ø´ÙØ±Ú©ØªØ§Ø¨ Ø¢ÙÙØ§ÛÙ</a> 4089 </div> 4090 4091 </div> 4092 4093 4094 4095 4096 <div 4097 class="sk-mega-pane rodin-detail-panel rodin-detail-panel--link" 4098 data-top-panel="7" 4099 data-top-title="ت٠اس با ٠ا"> 4100 4101 4102 <div class="sk-mega-empty"> 4103 <a href="/contact">Ù Ø´Ø§ÙØ¯Ù ت٠اس با ٠ا</a> 4104 </div> 4105 4106 </div> 4107 4108 4109 4110 </div> 4111 </div> 4112 </div> 4113 </nav> 4114</header> 4115<div id="skHeaderSpacer"></div> 4116 4117 4118<div class="rodin-overlay" id="rodin-search-overlay" dir="rtl" aria-hidden="true"> 4119 <div class="rodin-overlay-header"> 4120 <button class="rodin-icon-btn" type="button" data-close-overlay="rodin-search-overlay" aria-label="بستÙ"> 4121 <i class="bi bi-x-lg d-flex" aria-hidden="true"></i> 4122 </button> 4123 <div class="rodin-search-input-wrap"> 4124 <i class="bi bi-search rodin-search-input-icon" aria-hidden="true"></i> 4125 <input id="rodin-search-input" class="rodin-search-input" type="text" placeholder="جستâÙØ¬ÙÛ Ú©ØªØ§Ø¨Ø ÙÙÛØ³ÙØ¯ÙØ ÙØ§Ø´Ø±..." autocomplete="off" /> 4126 </div> 4127 </div> 4128 <div class="rodin-search-content"> 4129 <p class="rodin-title-sm" id="rodin-search-headline">جستجÙÙØ§Û Ø§Ø®ÛØ±</p> 4130 <div id="rodin-search-results"></div> 4131 </div> 4132</div> 4133 4134 4135<div class="sk-drawer" id="sk-drawer" aria-hidden="true"> 4136 <button type="button" class="sk-drawer-backdrop" data-sk-drawer-close aria-label="بست٠٠ÙÙ"></button> 4137 <aside class="sk-drawer-panel" id="skDrawerPanel" aria-label="Ù ÙÙÛ Ù ÙØ¨Ø§ÛÙ" dir="rtl"> 4138 <div class="sk-drawer-head"> 4139 <img src="/files/download.svg" alt="ÙÙÚ¯Ù" /> 4140 <button type="button" class="sk-drawer-close" data-sk-drawer-close aria-label="بستÙ"> 4141 <i class="bi bi-x-lg" aria-hidden="true"></i> 4142 </button> 4143 </div> 4144 4145 <div class="sk-drawer-body"> 4146 4147 <button type="button" class="sk-drawer-login" data-desktop-action="login"> 4148 <i class="bi bi-person" aria-hidden="true"></i> 4149 <span>ÙØ±Ùد ÛØ§ ثبتâÙØ§Ù </span> 4150 </button> 4151 4152 4153 <div class="sk-drawer-label">دستÙâØ¨ÙØ¯ÛâÙØ§</div> 4154 <ul class="sk-drawer-cats" id="sk-drawer-cats"> 4155 4156 4157 4158 4159 4160 <li class="sk-drawer-cat"> 4161 <button type="button" data-sk-cat-toggle> 4162 <span>کتاب </span> 4163 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4164 </button> 4165 <div class="sk-drawer-groups"> 4166 4167 4168 4169 4170 4171 <div class="sk-drawer-group"> 4172 <button type="button" data-sk-group-toggle> 4173 <span>Ø§Ø¯Ø¨ÛØ§Øª</span> 4174 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4175 </button> 4176 <ul class="sk-drawer-links"> 4177 4178 4179 <li> 4180 <a href="/category/داستاÙ-Ø§ÛØ±Ø§Ù" data-sk-drawer-close-nav>Ø¯Ø§Ø³ØªØ§Ù Ø§ÛØ±Ø§Ù</a> 4181 </li> 4182 4183 4184 4185 <li> 4186 <a href="/category/داستاÙ-Ø¬ÙØ§Ù" data-sk-drawer-close-nav>Ø¯Ø§Ø³ØªØ§Ù Ø¬ÙØ§Ù</a> 4187 </li> 4188 4189 4190 4191 <li> 4192 <a href="/tag/جستار?existence_filters=%7B"has_selling_stock"%3A%5B1%5D%7D" data-sk-drawer-close-nav>جستار</a> 4193 </li> 4194 4195 4196 4197 <li> 4198 <a href="/category/ÙÙØ¯-ادبÛ" data-sk-drawer-close-nav>ÙÙØ¯ Ø§Ø¯Ø¨Û Ù Ø²Ø¨Ø§ÙâØ´ÙØ§Ø³Û</a> 4199 </li> 4200 4201 4202 4203 <li> 4204 <a href="/category/شعر-Ú©ÙØ§Ø³ÛÚ©-Ø§ÛØ±Ø§Ù" data-sk-drawer-close-nav>شعر Ø§ÛØ±Ø§Ù</a> 4205 </li> 4206 4207 4208 4209 <li> 4210 <a href="/category/شعر-Ø¬ÙØ§Ù" data-sk-drawer-close-nav>شعر Ø¬ÙØ§Ù</a> 4211 </li> 4212 4213 4214 4215 <li> 4216 <a href="/category/٠تÙÙ-Ú©ÙÙ" data-sk-drawer-close-nav>٠تÙÙ Ú©ÙÙ</a> 4217 </li> 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 </ul> 4267 </div> 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 <div class="sk-drawer-group"> 4285 <button type="button" data-sk-group-toggle>
4286 <span>ØªØ§Ø±ÛØ® Ù Ø§Ø³Ø·ÙØ±Ù</span> 4287 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4288 </button> 4289 <ul class="sk-drawer-links"> 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 <li> 4307 <a href="/category/ØªØ§Ø±ÛØ®-Ú©ÙÙ" data-sk-drawer-close-nav>ØªØ§Ø±ÛØ® Ø§ÛØ±Ø§Ù</a> 4308 </li> 4309 4310 4311 4312 <li> 4313 <a href="/category/ØªØ§Ø±ÛØ®-Ø¬ÙØ§Ù" data-sk-drawer-close-nav>ØªØ§Ø±ÛØ® Ø¬ÙØ§Ù</a> 4314 </li> 4315 4316 4317 4318 <li> 4319 <a href="/category/Ø§Ø³Ø·ÙØ±Ù" data-sk-drawer-close-nav>Ø§Ø³Ø·ÙØ±Ù</a> 4320 </li> 4321 4322 4323 4324 <li> 4325 <a href="/category/خاطرات-Ù-Ø³ÙØ±Ùا٠Ù-Ù-Ø³Ø±Ú¯Ø°Ø´ØªÙØ§Ù Ù" data-sk-drawer-close-nav>Ø²ÙØ¯Ú¯ÛâÙØ§Ù ÙØ Ø®Ø§Ø·Ø±Ø§ØªØ Ù Ø³ÙØ±Ùا٠Ù</a> 4326 </li> 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 </ul> 4368 </div> 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 <div class="sk-drawer-group"> 4380 <button type="button" data-sk-group-toggle> 4381 <span>کتب ٠رجع Ù Ø³Ø§ÛØ± عÙÙÙ </span> 4382 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4383 </button> 4384 <ul class="sk-drawer-links"> 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 <li> 4410 <a href="/category/عÙÙ " data-sk-drawer-close-nav>عÙÙ </a> 4411 </li> 4412 4413 4414 4415 <li> 4416 <a href="/category/٠رجع" data-sk-drawer-close-nav>٠رجع</a> 4417 </li> 4418 4419 4420 4421 <li> 4422 <a href="/category/ØÙÙÙ" data-sk-drawer-close-nav>ØÙÙÙ</a> 4423 </li> 4424 4425 4426 4427 <li> 4428 <a href="/category/گردشگرÛ-Ù-ÙÙØ´Ù" data-sk-drawer-close-nav>Ú¯Ø±Ø¯Ø´Ú¯Ø±Û Ù ÙÙØ´Ù</a> 4429 </li> 4430 4431 4432 4433 <li> 4434 <a href="/category/آشپزÛ" data-sk-drawer-close-nav>آشپزÛ</a> 4435 </li> 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 </ul> 4467 </div> 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 <div class="sk-drawer-group"> 4481 <button type="button" data-sk-group-toggle>
4482 <span>عÙÙÙ Ø§ÙØ³Ø§ÙÛ</span> 4483 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4484 </button> 4485 <ul class="sk-drawer-links"> 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 <li> 4521 <a href="/category/Ø§ÙØªØµØ§Ø¯" data-sk-drawer-close-nav>Ø§ÙØªØµØ§Ø¯</a> 4522 </li> 4523 4524 4525 4526 <li> 4527 <a href="/category/Ø§ÛØ±Ø§Ù-Ø´ÙØ§Ø³Û" data-sk-drawer-close-nav>Ø§ÛØ±Ø§Ù Ø´ÙØ§Ø³Û</a> 4528 </li> 4529 4530 4531 4532 <li> 4533 <a href="/category/Ù Ø¯ÛØ±Ûت" data-sk-drawer-close-nav>Ù Ø¯ÛØ±Ûت</a> 4534 </li> 4535 4536 4537 4538 <li> 4539 <a href="/category/ÙÙØ³ÙÙ" data-sk-drawer-close-nav>ÙÙØ³ÙÙ Ù Ø¹Ø±ÙØ§Ù</a> 4540 </li> 4541 4542 4543 4544 <li> 4545 <a href="/category/ÙØ±ÙÙÚ¯-٠رد٠-Ù-Ø·ÙØ²" data-sk-drawer-close-nav>ÙØ±ÙÙÚ¯ Ù Ø±Ø¯Ù Ù Ø·ÙØ²</a> 4546 </li> 4547 4548 4549 4550 <li> 4551 <a href="/category/دÛÙ-Ù-Ù Ø°ÙØ¨" data-sk-drawer-close-nav>دÛÙ Ù Ù Ø°ÙØ¨</a> 4552 </li> 4553 4554 4555 4556 <li> 4557 <a href="/category/عÙÙÙ -اجت٠اعÛ-Ù-Ø³ÛØ§Ø³Û" data-sk-drawer-close-nav>عÙÙÙ Ø§Ø¬ØªÙ Ø§Ø¹Û Ù Ø³ÛØ§Ø³Û</a> 4558 </li> 4559 4560 4561 4562 <li> 4563 <a href="/category/Ø²ÙØ§Ù-Ù-ÙÙ ÙÛØ³Ù " data-sk-drawer-close-nav>Ø²ÙØ§Ù Ù ÙÙ ÙÛØ³Ù </a> 4564 </li> 4565 4566 4567 4568 <li> 4569 <a href="/category/Ø±ÙØ§Ù%E2%80%8CØ´ÙØ§Ø³Û" data-sk-drawer-close-nav>Ø±ÙØ§ÙØ´ÙØ§Ø³Û</a> 4570 </li> 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 </ul> 4584 </div> 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 <div class="sk-drawer-group"> 4606 <button type="button" data-sk-group-toggle>
4607 <span>ÙÙØ±</span> 4608 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4609 </button> 4610 <ul class="sk-drawer-links"> 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 <li> 4664 <a href="/category/سÛÙ٠ا" data-sk-drawer-close-nav>سÛÙ٠ا</a> 4665 </li> 4666 4667 4668 4669 <li> 4670 <a href="/category/ÙÙ Ø§ÛØ´" data-sk-drawer-close-nav>ÙÙ Ø§ÛØ´</a> 4671 </li> 4672 4673 4674 4675 <li> 4676 <a href="/category/ÙÙØ±-تجس٠Û" data-sk-drawer-close-nav>ÙÙØ±ÙØ§Û ØªØ¬Ø³Ù Û</a> 4677 </li> 4678 4679 4680 4681 <li> 4682 <a href="/category/Ù ÙØ³ÛÙÛ" data-sk-drawer-close-nav>Ù ÙØ³ÛÙÛ</a> 4683 </li> 4684 4685 4686 4687 <li> 4688 <a href="/category/٠ع٠ارÛ" data-sk-drawer-close-nav>٠ع٠ارÛ</a> 4689 </li> 4690 4691 4692 </ul> 4693 </div> 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 </div> 4706 </li> 4707 4708 4709 4710 4711 4712 <li class="sk-drawer-cat"> 4713 <button type="button" data-sk-cat-toggle> 4714 <span>Ú©ÙØ¯Ú© Ù ÙÙØ¬ÙاÙ</span> 4715 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4716 </button> 4717 <div class="sk-drawer-groups"> 4718 4719 4720 4721 4722 4723 <div class="sk-drawer-group"> 4724 <button type="button" data-sk-group-toggle> 4725 <span>کتابâÙØ§Û Ø®Ø±Ø¯Ø³Ø§ÙØ§Ù</span> 4726 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4727 </button> 4728 <ul class="sk-drawer-links"> 4729 4730 4731 <li> 4732 <a href="/category/ØµÙØ±-تا-سÙ-ساÙ" data-sk-drawer-close-nav>ØµÙØ± تا س٠ساÙ</a> 4733 </li> 4734 4735 4736 4737 <li> 4738 <a href="/category/Ù¾ÛØ´-از-دبستاÙ" data-sk-drawer-close-nav>Ù¾ÛØ´ از دبستاÙ</a> 4739 </li> 4740 4741 4742 4743 <li> 4744 <a href="/category/Ú©ØªØ§Ø¨ÙØ§Û-ØÙ ا٠-Ù-پارÚÙ%E2%80%8CاÛ" data-sk-drawer-close-nav>کتابâÙØ§Û ØÙ ا٠٠پارÚÙâØ§Û</a> 4745 </li> 4746 4747 4748 4749 <li> 4750 <a href="/category/رÙÚ¯%E2%80%8CØ¢Ù ÛØ²Û" data-sk-drawer-close-nav>رÙÚ¯âØ¢Ù ÛØ²Û</a> 4751 </li> 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 </ul> 4793 </div> 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 <div class="sk-drawer-group"> 4805 <button type="button" data-sk-group-toggle>
4806 <span>کتابâÙØ§Û دبستاÙÛ</span> 4807 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4808 </button> 4809 <ul class="sk-drawer-links"> 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 <li> 4821 <a href="/category/ساÙ%E2%80%8CÙØ§Û-اÙÙ-دبستاÙ" data-sk-drawer-close-nav>ساÙâÙØ§Û اÙ٠دبستاÙ</a> 4822 </li> 4823 4824 4825 4826 <li> 4827 <a href="/category/ساÙ%E2%80%8CÙØ§Û-آخر-دبستاÙ" data-sk-drawer-close-nav>ساÙâÙØ§Û آخر دبستاÙ</a> 4828 </li> 4829 4830 4831 4832 <li> 4833 <a href="/category/Ø¢Ù ÙØ²Ø´Û-Ú©ÙØ¯Ú©" data-sk-drawer-close-nav>Ø¢Ù ÙØ²Ø´Û Ú©ÙØ¯Ú©</a> 4834 </li> 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 </ul> 4870 </div> 4871 4872 4873 4874 4875 4876 4877 4878 4879 <div class="sk-drawer-group"> 4880 <button type="button" data-sk-group-toggle> 4881 <span>داستا٠٠تخÛÙ</span> 4882 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4883 </button> 4884 <ul class="sk-drawer-links"> 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 <li> 4902 <a href="/category/داستاÙ-Ø§ÛØ±Ø§ÙÛ" data-sk-drawer-close-nav>Ø¯Ø§Ø³ØªØ§Ù Ø§ÛØ±Ø§ÙÛ</a> 4903 </li> 4904 4905 4906 4907 <li> 4908 <a href="/category/تخÛÙÛ" data-sk-drawer-close-nav>تخÛÙÛ</a> 4909 </li> 4910 4911 4912 4913 <li> 4914 <a href="/category/Ú©ÙØ§Ø³ÛÚ©" data-sk-drawer-close-nav>Ú©ÙØ§Ø³ÛÚ©</a> 4915 </li> 4916 4917 4918 4919 <li> 4920 <a href="/category/ÙØ§Ùع%E2%80%8Cگرا" data-sk-drawer-close-nav>ÙØ§Ùعâگرا</a> 4921 </li> 4922 4923 4924 4925 <li> 4926 <a href="/category/ÙØØ´Øª-Ù-کارآگاÙÛ" data-sk-drawer-close-nav>ÙØØ´Øª ٠کارآگاÙÛ</a> 4927 </li> 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 </ul> 4953 </div> 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 <div class="sk-drawer-group"> 4967 <button type="button" data-sk-group-toggle>
4968 <span>شعر Ù Ø·ÙØ²</span> 4969 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 4970 </button> 4971 <ul class="sk-drawer-links"> 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 <li> 4999 <a href="/category/شعر-Ú©ÙØ¯Ú©" data-sk-drawer-close-nav>شعر Ú©ÙØ¯Ú©</a> 5000 </li> 5001 5002 5003 5004 <li> 5005 <a href="/category/شعر-ÙÙØ¬ÙاÙ" data-sk-drawer-close-nav>شعر ÙÙØ¬ÙاÙ</a> 5006 </li> 5007 5008 5009 5010 <li> 5011 <a href="/category/Ø·ÙØ²-Ú©ÙØ¯Ú©-Ù-ÙÙØ¬ÙاÙ" data-sk-drawer-close-nav>Ø·ÙØ² Ú©ÙØ¯Ú© Ù ÙÙØ¬ÙاÙ</a> 5012 </li> 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 </ul> 5032 </div> 5033 5034 5035 5036 5037 5038 5039 5040 5041 <div class="sk-drawer-group"> 5042 <button type="button" data-sk-group-toggle> 5043 <span>Ø¢Ù ÙØ²Ø´Û Ù ÙØ±ÙÙÚ¯Û</span> 5044 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5045 </button> 5046 <ul class="sk-drawer-links"> 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 <li> 5080 <a href="/category/Ø¯Ø§ÛØ±Ø©%E2%80%8CاÙ٠عارÙ---عÙÙ Û" data-sk-drawer-close-nav>Ø¯Ø§ÛØ±Ù اÙ٠عار٠٠عÙÙ Û</a> 5081 </li> 5082 5083 5084 5085 <li> 5086 <a href="/category/Ù ÙØ§Ø±ØªÙاÛ-Ø²ÙØ¯Ú¯Û" data-sk-drawer-close-nav>Ù ÙØ§Ø±ØªâÙØ§Û Ø²ÙØ¯Ú¯Û</a> 5087 </li> 5088 5089 5090 5091 <li> 5092 <a href="/category/ØªØ§Ø±ÛØ®---ÙÙØ³ÙÙ" data-sk-drawer-close-nav>ØªØ§Ø±ÛØ® Ù ÙÙØ³ÙÙ</a> 5093 </li> 5094 5095 5096 5097 <li> 5098 <a href="/category/Ø§Ø¯Ø¨ÛØ§Øª-Ú©ÙÙ-ÙØ§Ø±Ø³Û" data-sk-drawer-close-nav>Ø§Ø¯Ø¨ÛØ§Øª Ú©ÙÙ ÙØ§Ø±Ø³Û</a> 5099 </li> 5100 5101 5102 5103 <li>
5104 <a href="/category/Ø²ÙØ¯Ú¯Û%E2%80%8CÙØ§Ù Ù" data-sk-drawer-close-nav>Ø²ÙØ¯Ú¯ÛÙØ§Ù Ù</a> 5105 </li> 5106 5107 5108 5109 <li> 5110 <a href="/category/Ù Ø°ÙØ¨Û" data-sk-drawer-close-nav>Ù Ø°ÙØ¨Û</a> 5111 </li> 5112 5113 5114 5115 5116 5117 5118 </ul> 5119 </div> 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 <div class="sk-drawer-group"> 5135 <button type="button" data-sk-group-toggle> 5136 <span>Ø²Ø¨Ø§Ù Ù ÙØ´Ø±Ûات</span> 5137 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5138 </button> 5139 <ul class="sk-drawer-links"> 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 <li> 5185 <a href="/category/زباÙ%E2%80%8CÙØ§Û-خارجÛ" data-sk-drawer-close-nav>زباÙâÙØ§Û خارجÛ</a> 5186 </li> 5187 5188 5189 5190 <li> 5191 <a href="/category/ÙØ´Ø±Ûات-Ú©ÙØ¯Ú©" data-sk-drawer-close-nav>ÙØ´Ø±Ûات Ú©ÙØ¯Ú©</a> 5192 </li> 5193 5194 5195 </ul> 5196 </div> 5197 5198 5199 5200 5201 5202 </div> 5203 </li> 5204 5205 5206 5207 5208 5209 <li class="sk-drawer-cat"> 5210 <button type="button" data-sk-cat-toggle> 5211 <span>ÙÙØ´Øª Ø§ÙØ²Ø§Ø±</span> 5212 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5213 </button> 5214 <div class="sk-drawer-groups"> 5215 5216 5217 5218 5219 5220 <div class="sk-drawer-group"> 5221 <button type="button" data-sk-group-toggle> 5222 <span>ÙÙØ´ØªâØ§ÙØ²Ø§Ø± ع٠ÙÙ Û Ù Ù Ø¯Ø±Ø³ÙâØ§Û</span> 5223 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5224 </button> 5225 <ul class="sk-drawer-links"> 5226 5227 5228 <li> 5229 <a href="/category/Ø®ÙØ¯Ú©Ø§Ø±-Ù-Ø±ÙØ§Ù%E2%80%8CÙÙÛØ³" data-sk-drawer-close-nav>Ø®ÙØ¯Ú©Ø§Ø± Ù Ø±ÙØ§ÙâÙÙÛØ³</a> 5230 </li> 5231 5232 5233 5234 <li> 5235 <a href="/category/٠داد-ÙÙÚ©Û-Ù-ÙÙÚ©" data-sk-drawer-close-nav>٠داد ÙÙÚ©Û Ù ÙÙÚ©</a> 5236 </li> 5237 5238 5239 5240 <li> 5241 <a href="/category/٠داد-Ù-سر٠دادÛ" data-sk-drawer-close-nav>٠داد ٠سر٠دادÛ</a> 5242 </li> 5243 5244 5245 5246 <li> 5247 <a href="/category/٠اÚÛÚ©-Ù-ÙØ§ÛÙØ§Ûتر" data-sk-drawer-close-nav>٠اÚÛÚ© Ù ÙØ§ÛÙØ§Ûتر</a> 5248 </li> 5249 5250 5251 5252 <li> 5253 <a href="/category/پاک%E2%80%8CÚ©Ù" data-sk-drawer-close-nav>پاکâÚ©Ù</a> 5254 </li> 5255 5256 5257 5258 <li> 5259 <a href="/category/تراش" data-sk-drawer-close-nav>تراش</a> 5260 </li> 5261 5262 5263 5264 <li> 5265 <a href="/category/ØºÙØ·%E2%80%8CÚ¯ÛØ±" data-sk-drawer-close-nav>ØºÙØ·âÚ¯ÛØ±</a> 5266 </li> 5267 5268 5269 5270 <li> 5271 <a href="/category/خط-Ú©Ø´-Ø¯Ø§ÙØ´-Ø¢Ù ÙØ²Û" data-sk-drawer-close-nav>خطâÚ©Ø´ Ø¯Ø§ÙØ´âØ¢Ù ÙØ²Û</a> 5272 </li> 5273 5274 5275 5276 <li> 5277 <a href="/category/پرگار-Ø¯Ø§ÙØ´%E2%80%8CØ¢Ù ÙØ²Û" data-sk-drawer-close-nav>پرگار Ø¯Ø§ÙØ´âØ¢Ù ÙØ²Û</a> 5278 </li> 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 <li> 5341 <a href="/category/ظرÙ-Ù-ÙÛÙØ§Ù-٠درسÙ" data-sk-drawer-close-nav>ظر٠غذا Ù ÙÛÙØ§Ù Ù ÙÙ ÙÙ Ù</a> 5342 </li> 5343 5344 5345 </ul> 5346 </div> 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 <div class="sk-drawer-group"> 5368 <button type="button" data-sk-group-toggle>
5369 <span>ÙÙØ§Ø²Ù طراØÛ Ù ÙÙØ§Ø´Û</span> 5370 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5371 </button> 5372 <ul class="sk-drawer-links"> 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 <li> 5394 <a href="/category/٠داد-رÙÚ¯Û" data-sk-drawer-close-nav>٠داد رÙÚ¯Û</a> 5395 </li> 5396 5397 5398 5399 <li> 5400 <a href="/category/پاستÙ-Ù-٠داد-ش٠عÛ" data-sk-drawer-close-nav>پاست٠٠٠داد ش٠عÛ</a> 5401 </li> 5402 5403 5404 5405 <li> 5406 <a href="/category/آبرÙÚ¯" data-sk-drawer-close-nav>آبرÙÚ¯</a> 5407 </li> 5408 5409 5410 5411 <li> 5412 <a href="/category/Ú¯ÙØ§Ø´" data-sk-drawer-close-nav>Ú¯ÙØ§Ø´</a> 5413 </li> 5414 5415 5416 5417 <li> 5418 <a href="/category/رÙÚ¯" data-sk-drawer-close-nav>رÙÚ¯</a> 5419 </li> 5420 5421 5422 5423 <li> 5424 <a href="/category/ÙÙÙ %E2%80%8CÙ Ù" data-sk-drawer-close-nav>ÙÙÙ âÙ Ù</a> 5425 </li> 5426 5427 5428 5429 <li> 5430 <a href="/category/شابÙÙÙ" data-sk-drawer-close-nav>شابÙÙÙ</a> 5431 </li> 5432 5433 5434 5435 <li> 5436 <a href="/category/بÙÙ -Ù-سÙ-پاÛÙ" data-sk-drawer-close-nav>بÙ٠٠سÙâپاÛÙ</a> 5437 </li> 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 </ul> 5485 </div> 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 <div class="sk-drawer-group"> 5505 <button type="button" data-sk-group-toggle>
5506 <span>ÙÙØ§Ø²Ù ادارÛ</span> 5507 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5508 </button> 5509 <ul class="sk-drawer-links"> 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 <li> 5547 <a href="/category/ÚØ³Ø¨-Ù-پاÛÙ-ÚØ³Ø¨" data-sk-drawer-close-nav>ÚØ³Ø¨ ٠پاÛÙâ ÚØ³Ø¨</a> 5548 </li> 5549 5550 5551 5552 <li> 5553 <a href="/category/Ù ÙÚ¯ÙÙ-Ù-پاÙÚ" data-sk-drawer-close-nav>Ù ÙÚ¯Ù٠٠پاÙÚ</a> 5554 </li> 5555 5556 5557 5558 <li> 5559 <a href="/category/کاتر-Ù-ÙÛÚÛ" data-sk-drawer-close-nav>کاتر Ù ÙÛÚÛ</a> 5560 </li> 5561 5562 5563 5564 <li> 5565 <a href="/category/ذرÙ-بÛÙ" data-sk-drawer-close-nav>ذرÙâØ¨ÛÙ</a> 5566 </li> 5567 5568 5569 5570 <li> 5571 <a href="/category/٠اشÛÙ-ØØ³Ø§Ø¨" data-sk-drawer-close-nav>٠اشÛÙ ØØ³Ø§Ø¨</a> 5572 </li> 5573 5574 5575 5576 <li> 5577 <a href="/category/ÙÙØ§Ø²Ù -باÛگاÙÛ" data-sk-drawer-close-nav>ابزار باÛگاÙÛ</a> 5578 </li> 5579 5580 5581 5582 <li> 5583 <a href="/category/ست-ادارÛ" data-sk-drawer-close-nav>ست ادارÛ</a> 5584 </li> 5585 5586 5587 5588 <li> 5589 <a href="/category/Ø³Ø§ÛØ±-ÙÙØ§Ø²Ù -ادارÛ" data-sk-drawer-close-nav>Ø³Ø§ÛØ± ÙÙØ§Ø²Ù ادارÛ</a> 5590 </li> 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 <li> 5619 <a href="/category/Ø¯ÛØ¬ÛتاÙ" data-sk-drawer-close-nav>Ø¯ÛØ¬ÛتاÙ</a> 5620 </li> 5621 5622 5623 5624 5625 </ul> 5626 </div> 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 <div class="sk-drawer-group"> 5646 <button type="button" data-sk-group-toggle>
5647 <span>Ø¯ÙØªØ±Ø کاغذ Ù Ù ÙÙØ§</span> 5648 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5649 </button> 5650 <ul class="sk-drawer-links"> 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 <li> 5704 <a href="/category/Ø¯ÙØªØ±-Ù Ø´Ù-Ù-ÛØ§Ø¯Ø¯Ø§Ø´Øª" data-sk-drawer-close-nav>Ø¯ÙØªØ±</a> 5705 </li> 5706 5707 5708 5709 <li> 5710 <a href="/category/Ø¯ÙØªØ±-Ø¨Ø±ÙØ§Ù Ù-Ø±ÛØ²Û" data-sk-drawer-close-nav>Ø¯ÙØªØ± Ø¨Ø±ÙØ§Ù ÙâØ±ÛØ²Û (Ù¾ÙÙØ±)</a> 5711 </li> 5712 5713 5714 5715 <li> 5716 <a href="/category/Ø¯ÙØªØ±-طراØÛ-Ù-Ø®ÙØ´ÙÙÛØ³Û" data-sk-drawer-close-nav>Ø¯ÙØªØ± طراØÛ Ù Ø®ÙØ´ÙÙÛØ³Û</a> 5717 </li> 5718 5719 5720 5721 <li> 5722 <a href="/category/ÛØ§Ø¯Ø¯Ø§Ø´Øª-ÚØ³Ø¨Ø¯Ø§Ø±-(پست%E2%80%8CØ§ÛØª)" data-sk-drawer-close-nav>ÛØ§Ø¯Ø¯Ø§Ø´Øª ÚØ³Ø¨Ø¯Ø§Ø± (Ù¾Ø³ØªâØ§ÛØª)</a> 5723 </li> 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 </ul> 5747 </div> 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 <div class="sk-drawer-group"> 5759 <button type="button" data-sk-group-toggle> 5760 <span>Ú©ÛÙØ Ú©ÙÙÙâÙ¾Ø´ØªÛ Ù Ø¬Ø§Ù Ø¯Ø§Ø¯Û</span> 5761 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5762 </button> 5763 <ul class="sk-drawer-links"> 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 <li> 5825 <a href="/category/جا٠دادÛ" data-sk-drawer-close-nav>جا٠دادÛ</a> 5826 </li> 5827 5828 5829 5830 <li> 5831 <a href="/category/Ú©ÛÙ-Ù-Ú©ÙÙÙ-٠درسÙ" data-sk-drawer-close-nav>Ú©ÛÙ Ù Ú©ÙÙÙâپشتÛ</a> 5832 </li> 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 </ul> 5852 </div> 5853 5854 5855 5856 5857 5858 5859 <div class="sk-drawer-group"> 5860 <button type="button" data-sk-group-toggle>
5861 <span>ابزار ٠تجÙÛØ²Ø§Øª ØªØ®ØµØµÛ ÙÙØ±Û Ù ÙÙÛ</span> 5862 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5863 </button> 5864 <ul class="sk-drawer-links"> 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 <li> 5930 <a href="/category/٠داد-ÙÙØ±Û" data-sk-drawer-close-nav>٠داد ÙÙØ±Û</a> 5931 </li> 5932 5933 5934 5935 <li> 5936 <a href="/category/ÙÙÙ -Ù-٠رکب" data-sk-drawer-close-nav>ÙÙ٠٠٠رکب</a> 5937 </li> 5938 5939 5940 5941 <li> 5942 <a href="/category/ابزار-تخصصÛ-ÙÙØ±Û" data-sk-drawer-close-nav>ابزار ØªØ®ØµØµÛ ÙÙØ±Û</a> 5943 </li> 5944 5945 5946 5947 <li> 5948 <a href="/category/خط-Ú©Ø´-Ù-اشÙ" data-sk-drawer-close-nav>خطâÚ©Ø´ ٠اشÙ</a> 5949 </li> 5950 5951 5952 5953 <li> 5954 <a href="/category/ÚØ±Ø§Øº-Ù Ø·Ø§ÙØ¹Ù" data-sk-drawer-close-nav>ÚØ±Ø§Øº Ù Ø·Ø§ÙØ¹Ù</a> 5955 </li> 5956 5957 5958 5959 <li> 5960 <a href="/category/تختÙ-Ù-Ù ÛØ²Ú©Ø§Ø±" data-sk-drawer-close-nav>ØªØ®ØªÙ Ù Ù ÛØ²Ú©Ø§Ø±</a> 5961 </li> 5962 5963 5964 5965 5966 5967 5968 </ul> 5969 </div> 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 </div> 5988 </li> 5989 5990 5991 5992 5993 5994 <li class="sk-drawer-cat"> 5995 <button type="button" data-sk-cat-toggle> 5996 <span>Ø³Ø±Ú¯Ø±Ù Û Ù Ø®ÙØ§ÙÛØª</span> 5997 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 5998 </button> 5999 <div class="sk-drawer-groups"> 6000 6001 6002 6003 6004 6005 <div class="sk-drawer-group"> 6006 <button type="button" data-sk-group-toggle>
6007 <span>بازÛâÙØ§Û رÙÙ ÛØ²ÛØ Ú©Ø§Ø±ØªÛ Ù Ø¯ÙØ±ÙÙ Û</span> 6008 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6009 </button> 6010 <ul class="sk-drawer-links"> 6011 6012 6013 <li> 6014 <a href="/category/بازÛ-کارتÛ-Ù-Ø¯ÙØ±ÙÙ Û" data-sk-drawer-close-nav>Ø¨Ø§Ø²Û Ú©Ø§Ø±ØªÛ Ù Ø¯ÙØ±ÙÙ Û</a> 6015 </li> 6016 6017 6018 6019 <li> 6020 <a href="/category/بازÛ-استراتÚÛ" data-sk-drawer-close-nav>Ø¨Ø§Ø²Û Ø§Ø³ØªØ±Ø§ØªÚÛ</a> 6021 </li> 6022 6023 6024 6025 <li> 6026 <a href="/category/بازÛ-٠ع٠اÛÛ" data-sk-drawer-close-nav>Ø¨Ø§Ø²Û Ù Ø¹Ù Ø§ÛÛ</a> 6027 </li> 6028 6029 6030 6031 <li> 6032 <a href="/category/پازÙ" data-sk-drawer-close-nav>پازÙ</a> 6033 </li> 6034 6035 6036 6037 <li> 6038 <a href="/category/Ø¬ÙØ±ÚÛÙ-Ù-پازÙ-Ú©ÙØ¯Ú©" data-sk-drawer-close-nav>Ø¬ÙØ±ÚÛÙ Ù Ù¾Ø§Ø²Ù Ú©ÙØ¯Ú©</a> 6039 </li> 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 </ul> 6067 </div> 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 <div class="sk-drawer-group"> 6081 <button type="button" data-sk-group-toggle> 6082 <span>Ú©Ø§Ø±Ø¯Ø³ØªÛ Ù Ù ÙØ§Ø±ØªÛ</span> 6083 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6084 </button> 6085 <ul class="sk-drawer-links"> 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 <li> 6099 <a href="/category/کاردستÛ" data-sk-drawer-close-nav>کاردستÛ</a> 6100 </li> 6101 6102 6103 6104 <li> 6105 <a href="/category/Ø®Ù ÛØ±Ø¨Ø§Ø²Û" data-sk-drawer-close-nav>Ø®Ù ÛØ±Ø¨Ø§Ø²Û</a> 6106 </li> 6107 6108 6109 6110 <li> 6111 <a href="/category/رÙÚ¯-اÙگشتÛ" data-sk-drawer-close-nav>رÙÚ¯ اÙگشتÛ</a> 6112 </li> 6113 6114 6115 6116 <li> 6117 <a href="/category/ÙÚ¯Ù-Ù-ساختÙÛ" data-sk-drawer-close-nav>Ùگ٠٠ساختÙÛ</a> 6118 </li> 6119 6120 6121 6122 <li> 6123 <a href="/category/٠اکت-سازÛ" data-sk-drawer-close-nav>Ù Ø§Ú©ØªâØ³Ø§Ø²Û</a> 6124 </li> 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 </ul> 6142 </div> 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 <div class="sk-drawer-group"> 6156 <button type="button" data-sk-group-toggle>
6157 <span>Ø¢Ù ÙØ²Ø´Û Ù ÙکرÛ</span> 6158 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6159 </button> 6160 <ul class="sk-drawer-links"> 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 <li> 6184 <a href="/category/Ø¢Ù ÙØ²Ø´Û-ÙکرÛ-Ù ÙØ§Ø±ØªÛ" data-sk-drawer-close-nav>Ø¢Ù ÙØ²Ø´ ÙÚ©Ø±Û Ù ÙØ§Ø±ØªÛ</a> 6185 </li> 6186 6187 6188 6189 <li> 6190 <a href="/category/ÙØ³Ø§ÛÙ-سرگر٠Û" data-sk-drawer-close-nav>ÙØ³Ø§Û٠سرگر٠Û</a> 6191 </li> 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 </ul> 6205 </div> 6206 6207 6208 6209 6210 6211 6212 <div class="sk-drawer-group"> 6213 <button type="button" data-sk-group-toggle> 6214 <span>Ø§Ø³Ø¨Ø§Ø¨âØ¨Ø§Ø²Û Ù ÙÛÚ¯ÙØ±</span> 6215 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6216 </button> 6217 <ul class="sk-drawer-links"> 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 <li> 6245 <a href="/category/Ø¹Ø±ÙØ³Ú©-Ù-ÙÛÚ¯ÙØ±" data-sk-drawer-close-nav>ÙÛÚ¯ÙØ±</a> 6246 </li> 6247 6248 6249 6250 <li> 6251 <a href="/category/تÙÙÚ¯-بازÛ" data-sk-drawer-close-nav>تÙÙÚ¯ بازÛ</a> 6252 </li> 6253 6254 6255 6256 <li> 6257 <a href="/category/٠اشÛÙ-بازÛ" data-sk-drawer-close-nav>٠اشÛÙâØ¨Ø§Ø²Û</a> 6258 </li> 6259 6260 6261 6262 <li> 6263 <a href="/category/ستâÙØ§Û-بازÛ" data-sk-drawer-close-nav>ستâÙØ§Û بازÛ</a> 6264 </li> 6265 6266 6267 6268 <li> 6269 <a href="/category/Ø³Ø§ÛØ±-Ø§Ø³Ø¨Ø§Ø¨âØ¨Ø§Ø²ÛâÙØ§" data-sk-drawer-close-nav>Ø³Ø§ÛØ± Ø§Ø³Ø¨Ø§Ø¨âØ¨Ø§Ø²ÛâÙØ§</a> 6270 </li> 6271 6272 6273 </ul> 6274 </div> 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 </div> 6287 </li> 6288 6289 6290 6291 6292 6293 <li class="sk-drawer-cat"> 6294 <button type="button" data-sk-cat-toggle>
6295 <span>ØµÙØ§Ûع دستÛ</span> 6296 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6297 </button> 6298 <div class="sk-drawer-groups"> 6299 6300 6301 6302 6303 6304 <div class="sk-drawer-group"> 6305 <button type="button" data-sk-group-toggle> 6306 <span>Ø¯Ú©ÙØ±Ø§Ø³ÛÙ٠٠تزÛÛÙØ§Øª Ù ÙØ²Ù</span> 6307 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6308 </button> 6309 <ul class="sk-drawer-links"> 6310 6311 6312 <li> 6313 <a href="/category/آباÚÙØ±-Ù-Ø±ÙØ´ÙاÛÛ" data-sk-drawer-close-nav>آباÚÙØ± Ù Ø±ÙØ´ÙاÛÛ</a> 6314 </li> 6315 6316 6317 6318 <li> 6319 <a href="/category/دÛÙØ§Ø±Ú©Ùب-(تابÙÙ---Ø¢ÛÙÙ-کاشÛ-جاکÙÛØ¯Û)" data-sk-drawer-close-nav>دÛÙØ§Ø±Ú©Ùب</a> 6320 </li> 6321 6322 6323 6324 <li> 6325 <a href="/category/رÙÙ ÛØ²Û-Ø±Ø§ÙØ±-Ú©ÙØ³Ù" data-sk-drawer-close-nav>رÙÙ ÛØ²ÛØ Ø±Ø§ÙØ±Ø Ú©ÙØ³Ù</a> 6326 </li> 6327 6328 6329 6330 <li> 6331 <a href="/category/٠جس٠Ù-Ù-ØªÙØ¯Ûس" data-sk-drawer-close-nav>Ù Ø¬Ø³Ù Ù Ù ØªÙØ¯Ûس</a> 6332 </li> 6333 6334 6335 6336 <li> 6337 <a href="/category/Ú¯ÙÛÙ " data-sk-drawer-close-nav>Ú¯ÙÛÙ </a> 6338 </li> 6339 6340 6341 6342 <li> 6343 <a href="/category/ش٠ع-Ù-ش٠عداÙ-Ù-Ø¹ÙØ¯-Ù-ÙØ§Ø±Ù ر" data-sk-drawer-close-nav>ش٠ع Ù Ø´Ù Ø¹Ø¯Ø§Ù Ù Ø¹ÙØ¯ Ù ÙØ§Ø±Ù ر</a> 6344 </li> 6345 6346 6347 6348 <li> 6349 <a href="/category/Ø¯Ú©ÙØ±Ø§ØªÛÙ" data-sk-drawer-close-nav>Ø¯Ú©ÙØ±Ø§ØªÛÙ</a> 6350 </li> 6351 6352 6353 6354 <li> 6355 <a href="/category/Ú¯ÙÛ-Ù-Ù ÙØ²ÛÚ©-باکس" data-sk-drawer-close-nav>Ú¯ÙÛ Ù Ù ÙØ²ÛÚ© باکس</a> 6356 </li> 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 </ul> 6368 </div> 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 <div class="sk-drawer-group"> 6388 <button type="button" data-sk-group-toggle> 6389 <span>٠د Ù Ø§Ú©Ø³Ø³ÙØ±Û</span> 6390 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6391 </button> 6392 <ul class="sk-drawer-links"> 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 <li> 6412 <a href="/category/Ú©ÛÙ-ÚØ±Ù -Ù-پارÚÙ" data-sk-drawer-close-nav>Ú©ÛÙ ÚØ±Ù ٠پارÚÙ</a> 6413 </li> 6414 6415 6416 6417 <li> 6418 <a href="/category/زÛÙØ±Ø¢Ùات" data-sk-drawer-close-nav>زÛÙØ±Ø¢Ùات</a> 6419 </li> 6420 6421 6422 6423 6424 6425 6426 </ul> 6427 </div> 6428 6429 6430 6431 6432 6433 6434 <div class="sk-drawer-group"> 6435 <button type="button" data-sk-group-toggle>
6436 <span>ظرÙÙ</span> 6437 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6438 </button> 6439 <ul class="sk-drawer-links"> 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 <li> 6463 <a href="/category/٠اگ-Ù-ÙÛÙØ§Ù-Ù-ÙÙØ¬Ø§Ù" data-sk-drawer-close-nav>Ù Ø§Ú¯Ø ÙÛÙØ§Ù Ù ÙÙØ¬Ø§Ù</a> 6464 </li> 6465 6466 6467 6468 <li> 6469 <a href="/category/ظرÙÙ" data-sk-drawer-close-nav>Ù٠٠ظرÙÙ</a> 6470 </li> 6471 6472 6473 </ul> 6474 </div> 6475 6476 6477 6478 6479 6480 </div> 6481 </li> 6482 6483 6484 6485 6486 6487 <li class="sk-drawer-cat sk-drawer-cat--link"> 6488 <a href="/ÙØ±ÙØ´-ساز٠اÙÛ-Ø´ÙØ±Ú©ØªØ§Ø¨-اÙÙØ§ÛÙ" data-sk-drawer-close-nav class="sk-drawer-cat-link"> 6489 <span>کارت ÙØ¯ÛÙ</span> 6490 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6491 </a> 6492 </li> 6493 6494 6495 6496 6497 6498 <li class="sk-drawer-cat sk-drawer-cat--link"> 6499 <a href="/mag" data-sk-drawer-close-nav class="sk-drawer-cat-link"> 6500 <span>٠جÙÙâÛ Ø´ÙØ±Ú©ØªØ§Ø¨ Ø¢ÙÙØ§ÛÙ</span> 6501 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6502 </a> 6503 </li> 6504 6505 6506 6507 6508 6509 <li class="sk-drawer-cat sk-drawer-cat--link"> 6510 <a href="/contact" data-sk-drawer-close-nav class="sk-drawer-cat-link"> 6511 <span>ت٠اس با ٠ا</span> 6512 <i class="bi bi-chevron-left sk-chevron" aria-hidden="true"></i> 6513 </a> 6514 </li> 6515 6516 6517 6518 </ul> 6519 6520 <div class="sk-drawer-label">ØµÙØØ§Øª</div> 6521 <ul class="sk-drawer-pages"> 6522 <li><a href="/blog" data-sk-drawer-close-nav>٠جÙÙ</a></li> 6523 <li><a href="/about" data-sk-drawer-close-nav>دربار٠٠ا</a></li> 6524 <li><a href="/help" data-sk-drawer-close-nav>راÙÙÙ Ø§Û Ø®Ø±ÛØ¯</a></li> 6525 <li><a href="/corporate-gift" data-sk-drawer-close-nav>کارت ÙØ¯Û٠ساز٠اÙÛ</a></li> 6526 <li><a href="/contact" data-sk-drawer-close-nav>ت٠اس با ٠ا</a></li> 6527 </ul> 6528 </div> 6529 </aside> 6530</div> 6531 6532 6533<nav class="sk-app-nav" aria-label="ÙØ§ÙØ¨Ø±Û Ù¾Ø§ÛÛÙ" data-sk-app-nav> 6534 <a class="sk-app-nav__item" href="/" data-sk-nav-match="home"> 6535 <i class="bi bi-house" aria-hidden="true"></i> 6536 <span>خاÙÙ</span> 6537 </a> 6538 <button type="button" class="sk-app-nav__item" data-sk-app-nav-categories aria-label="Ù ÙÙ"> 6539 <i class="bi bi-list" aria-hidden="true"></i> 6540 <span>Ù ÙÙ</span> 6541 </button> 6542 <a class="sk-app-nav__item rodin-nav-cart-link" href="/cart" data-sk-nav-match="cart" data-rodin-cart-animate> 6543 <span class="sk-app-nav__cart-wrap"> 6544 <i class="bi bi-bag" aria-hidden="true"></i> 6545 <span class="sk-app-nav__badge sk-cart-badge rodin-nav-cart-badge--empty" data-rodin-cart-badge aria-hidden="true" aria-live="polite"></span> 6546 </span> 6547 <span>سبد</span> 6548 </a> 6549 <a class="sk-app-nav__item" href="/my-account-page?section=wishlist" data-sk-nav-match="wishlist"> 6550 <i class="bi bi-heart" aria-hidden="true"></i> 6551 <span>Ø¹ÙØ§ÙÙâÙ ÙØ¯Û</span> 6552 </a> 6553 <a class="sk-app-nav__item" href="/login" data-sk-nav-match="account" data-desktop-action="login">
6554 <i class="bi bi-person" aria-hidden="true"></i> 6555 <span>ÙØ±Ùد</span> 6556 </a> 6557</nav> 6558 6559<div style="display:none;" id="rodin-login-hook"> 6560 6561 6562 6563 <li class="nav-item"> 6564 <a class="nav-link btn-login-area kara-login d-flex align-items-center" href="/login"><i class="bi bi-person"></i></a> 6565 </li> 6566 6567 6568</div> 6569
6570<script src="/assets/rodin_services/js/rodin_navbar_search_dynamic.js"></script>
vendor: 1 bytes, line 6570
6570
6571<script> 6572 (function () { 6573 if (window.__skHeaderInit) return; 6574 window.__skHeaderInit = true; 6575 6576 const body = document.body; 6577 const skHeaderEl = document.getElementById("skHeader"); 6578 const skHeaderSpacer = document.getElementById("skHeaderSpacer"); 6579 function syncHeaderSpacer() { 6580 if (skHeaderEl && skHeaderSpacer) { 6581 skHeaderSpacer.style.height = skHeaderEl.offsetHeight + "px"; 6582 } 6583 } 6584 syncHeaderSpacer(); 6585 window.addEventListener("resize", syncHeaderSpacer); 6586 if (skHeaderEl && typeof ResizeObserver !== "undefined") { 6587 new ResizeObserver(syncHeaderSpacer).observe(skHeaderEl); 6588 } 6589 const drawer = document.getElementById("sk-drawer"); 6590 const menuOpen = document.getElementById("sk-menu-open"); 6591 const desktopCatToggle = document.getElementById("rodin-desktop-category-toggle"); 6592 const desktopCatPanel = document.getElementById("rodin-desktop-category-panel"); 6593 const desktopMask = document.getElementById("sk-desktop-mask"); 6594 const menubar = document.getElementById("sk-menubar"); 6595 const desktopButtonsRoot = document.getElementById("rodin-desktop-topitems"); 6596 const desktopSearchInput = document.getElementById("rodin-desktop-search-input"); 6597 const desktopSearchDropdown = document.getElementById("rodin-desktop-search-dropdown"); 6598 const desktopSearchHeadline = document.getElementById("rodin-desktop-search-headline"); 6599 const desktopSearchResults = document.getElementById("rodin-desktop-search-results"); 6600 const openSearch = document.getElementById("rodin-open-search"); 6601 const searchOverlay = document.getElementById("rodin-search-overlay"); 6602 const searchInput = document.getElementById("rodin-search-input"); 6603 const loginHook = document.getElementById("rodin-login-hook"); 6604 const desktopAccountMenu = document.getElementById("rodin-desktop-account-menu"); 6605 6606 /* Escape overflow/sticky stacking from page wrappers */ 6607 if (drawer && drawer.parentElement !== document.body) { 6608 document.body.appendChild(drawer); 6609 } 6610 if (searchOverlay && searchOverlay.parentElement !== document.body) { 6611 document.body.appendChild(searchOverlay); 6612 } 6613 6614 const loginBtns = document.querySelectorAll('[data-desktop-action="login"]'); 6615 6616 function setDrawerOpen(open) { 6617 if (!drawer) return; 6618 drawer.classList.toggle("is-open", open); 6619 drawer.setAttribute("aria-hidden", open ? "false" : "true"); 6620 body.classList.toggle("sk-drawer-open", open); 6621 if (menuOpen) menuOpen.setAttribute("aria-expanded", open ? "true" : "false"); 6622 if (open) { 6623 closeSearchOverlay(); 6624 drawer.querySelector(".sk-drawer-body")?.scrollTo(0, 0); 6625 } 6626 } 6627 6628 function closeDrawer() { 6629 setDrawerOpen(false); 6630 } 6631 6632 function openSearchOverlay() { 6633 if (!searchOverlay) return; 6634 closeDrawer(); 6635 hideDesktopSearch(); 6636 searchOverlay.classList.add("is-open"); 6637 searchOverlay.setAttribute("aria-hidden", "false"); 6638 body.style.overflow = "hidden"; 6639 if (searchInput) setTimeout(() => searchInput.focus(), 120); 6640 } 6641 6642 function closeSearchOverlay() { 6643 if (!searchOverlay) return; 6644 searchOverlay.classList.remove("is-open"); 6645 searchOverlay.setAttribute("aria-hidden", "true"); 6646 if (!drawer?.classList.contains("is-open")) { 6647 body.style.overflow = ""; 6648 } 6649 } 6650 6651 function openDesktopCategory() { 6652 if (!desktopCatPanel) return; 6653 hideDesktopSearch(); 6654 desktopCatPanel.classList.add("show"); 6655 desktopMask?.classList.add("show"); 6656 } 6657 6658 function closeDesktopCategory() { 6659 desktopCatPanel?.classList.remove("show"); 6660 desktopMask?.classList.remove("show"); 6661 desktopButtonsRoot?.querySelectorAll(".rodin-topitem-btn").forEach((b) => b.classList.remove("is-active")); 6662 desktopCatPanel?.querySelectorAll(".rodin-detail-panel").forEach((p) => p.classList.remove("active")); 6663 desktopCatPanel?.querySelector(".sk-mega-panel-inner")?.classList.remove("is-tree"); 6664 } 6665 6666 let desktopCloseT = null; 6667 function scheduleDesktopClose() { 6668 if (desktopCloseT) clearTimeout(desktopCloseT); 6669 desktopCloseT = setTimeout(closeDesktopCategory, 180); 6670 } 6671 function cancelDesktopClose() { 6672 if (desktopCloseT) clearTimeout(desktopCloseT); 6673 desktopCloseT = null; 6674 } 6675 6676 function activateTreeRoot(topIndex, rootIndex) { 6677 if (topIndex == null || rootIndex == null) return; 6678 const detailPanel = desktopCatPanel?.querySelector('.rodin-detail-panel[data-top-panel="' + topIndex + '"]'); 6679 if (!detailPanel) return; 6680 6681 detailPanel.querySelectorAll(".rodin-tree-root-btn").forEach((btn) => { 6682 const on = String(rootIndex) === btn.dataset.rootIndex; 6683 btn.classList.toggle("active", on); 6684 btn.setAttribute("aria-selected", on ? "true" : "false"); 6685 }); 6686 6687 detailPanel.querySelectorAll(".rodin-root-panel, .sk-tree-root-panel").forEach((rootPanel) => { 6688 const on = String(rootIndex) === rootPanel.dataset.treeRootPanel; 6689 rootPanel.classList.toggle("active", on); 6690 rootPanel.classList.toggle("rodin-hidden-panel", !on); 6691 if (on) rootPanel.removeAttribute("hidden"); 6692 else rootPanel.setAttribute("hidden", ""); 6693 }); 6694 } 6695
6696 function activateTopPanel(index) { 6697 const panels = desktopCatPanel?.querySelectorAll(".rodin-detail-panel") || []; 6698 panels.forEach((p) => p.classList.toggle("active", String(index) === p.dataset.topPanel)); 6699 desktopButtonsRoot?.querySelectorAll(".rodin-topitem-btn").forEach((b) => { 6700 b.classList.toggle("is-active", String(index) === b.dataset.topIndex); 6701 }); 6702 const panel = desktopCatPanel?.querySelector('.rodin-detail-panel[data-top-panel="' + index + '"]'); 6703 const isTree = !!panel?.querySelector(".sk-tree-layout"); 6704 desktopCatPanel?.querySelector(".sk-mega-panel-inner")?.classList.toggle("is-tree", isTree); 6705 const firstRoot = panel?.querySelector(".rodin-tree-root-btn"); 6706 if (firstRoot) { 6707 const activeRoot = panel.querySelector(".rodin-tree-root-btn.active") || firstRoot; 6708 activateTreeRoot(index, activeRoot.dataset.rootIndex); 6709 } 6710 } 6711 6712 function handleTopItem(btn) { 6713 if (btn.dataset.menuKind === "link" && btn.dataset.targetUrl) { 6714 window.location.href = btn.dataset.targetUrl; 6715 return; 6716 } 6717 activateTopPanel(btn.dataset.topIndex); 6718 openDesktopCategory(); 6719 } 6720 6721 /* Init tree root panels (first root visible) */ 6722 desktopCatPanel?.querySelectorAll(".rodin-detail-panel").forEach((panel) => { 6723 const firstRoot = panel.querySelector(".rodin-tree-root-btn"); 6724 if (firstRoot && panel.dataset.topPanel != null) { 6725 activateTreeRoot(panel.dataset.topPanel, firstRoot.dataset.rootIndex); 6726 } 6727 }); 6728 6729 desktopCatPanel?.querySelectorAll(".rodin-tree-root-btn").forEach((btn) => { 6730 btn.addEventListener("click", function (e) { 6731 e.preventDefault(); 6732 e.stopPropagation(); 6733 cancelDesktopClose(); 6734 const topIndex = btn.dataset.topPanelRoot; 6735 activateTreeRoot(topIndex, btn.dataset.rootIndex); 6736 }); 6737 btn.addEventListener("mouseenter", function () { 6738 cancelDesktopClose(); 6739 const topIndex = btn.dataset.topPanelRoot; 6740 activateTreeRoot(topIndex, btn.dataset.rootIndex); 6741 }); 6742 }); 6743 6744 menuOpen?.addEventListener("click", function () { 6745 setDrawerOpen(!drawer?.classList.contains("is-open")); 6746 }); 6747 document.querySelectorAll("[data-sk-drawer-close]").forEach((el) => { 6748 el.addEventListener("click", closeDrawer); 6749 }); 6750 drawer?.addEventListener("click", function (event) { 6751 if (event.target.closest("[data-sk-drawer-close-nav]")) closeDrawer(); 6752 }); 6753 6754 document.querySelectorAll("[data-sk-app-nav-categories]").forEach((btn) => { 6755 btn.addEventListener("click", function () { 6756 setDrawerOpen(true); 6757 }); 6758 }); 6759 (function markAppNavActive() { 6760 const nav = document.querySelector("[data-sk-app-nav]"); 6761 if (!nav) return; 6762 const path = (window.location.pathname || "/").replace(/\/+$/, "") || "/"; 6763 const search = window.location.search || ""; 6764 nav.querySelectorAll(".sk-app-nav__item").forEach((el) => el.classList.remove("is-active")); 6765 let key = ""; 6766 if (path === "/") key = "home"; 6767 else if (path.indexOf("/cart") === 0) key = "cart"; 6768 else if (path.indexOf("/my-account-page") === 0 && search.indexOf("wishlist") !== -1) key = "wishlist"; 6769 else if (path.indexOf("/my-account-page") === 0 || path.indexOf("/login") === 0) key = "account"; 6770 else if (path.indexOf("/all-products") === 0) key = "categories"; 6771 if (key === "categories") { 6772 nav.querySelector("[data-sk-app-nav-categories]")?.classList.add("is-active"); 6773 } else if (key) { 6774 nav.querySelector('[data-sk-nav-match="' + key + '"]')?.classList.add("is-active"); 6775 } 6776 })(); 6777 6778 document.querySelectorAll("[data-sk-cat-toggle]").forEach((btn) => { 6779 btn.addEventListener("click", function () { 6780 const cat = btn.closest(".sk-drawer-cat"); 6781 if (!cat) return; 6782 const willOpen = !cat.classList.contains("is-open"); 6783 document.querySelectorAll(".sk-drawer-cat.is-open").forEach((n) => { 6784 if (n !== cat) n.classList.remove("is-open"); 6785 }); 6786 cat.classList.toggle("is-open", willOpen); 6787 cat.querySelectorAll(".sk-drawer-group.is-open").forEach((g) => g.classList.remove("is-open")); 6788 }); 6789 }); 6790 6791 document.querySelectorAll("[data-sk-group-toggle]").forEach((btn) => { 6792 btn.addEventListener("click", function () { 6793 const group = btn.closest(".sk-drawer-group"); 6794 if (!group) return; 6795 const parent = group.parentElement; 6796 if (parent) { 6797 parent.querySelectorAll(".sk-drawer-group.is-open").forEach((g) => { 6798 if (g !== group) g.classList.remove("is-open"); 6799 }); 6800 } 6801 group.classList.toggle("is-open"); 6802 }); 6803 }); 6804 6805 desktopCatToggle?.addEventListener("click", function () { 6806 const first = desktopButtonsRoot?.querySelector('.rodin-topitem-btn[data-menu-kind="tree"], .rodin-topitem-btn[data-menu-kind="mega"]'); 6807 if (first) { 6808 handleTopItem(first); 6809 } else if (desktopCatPanel?.classList.contains("show")) { 6810 closeDesktopCategory(); 6811 } else {
6812 activateTopPanel("0"); 6813 openDesktopCategory(); 6814 } 6815 }); 6816 desktopCatToggle?.addEventListener("mouseenter", function () { 6817 cancelDesktopClose(); 6818 const first = desktopButtonsRoot?.querySelector('.rodin-topitem-btn[data-menu-kind="tree"], .rodin-topitem-btn[data-menu-kind="mega"]'); 6819 if (first) handleTopItem(first); 6820 else { 6821 activateTopPanel("0"); 6822 openDesktopCategory(); 6823 } 6824 }); 6825 6826 desktopButtonsRoot?.querySelectorAll(".rodin-topitem-btn").forEach((btn) => { 6827 btn.addEventListener("click", function () { 6828 handleTopItem(btn); 6829 }); 6830 btn.addEventListener("mouseenter", function () { 6831 cancelDesktopClose(); 6832 if (btn.dataset.menuKind === "link") return; 6833 handleTopItem(btn); 6834 }); 6835 }); 6836 6837 menubar?.addEventListener("mouseleave", scheduleDesktopClose); 6838 desktopCatPanel?.addEventListener("mouseenter", cancelDesktopClose); 6839 desktopCatPanel?.addEventListener("mouseleave", scheduleDesktopClose); 6840 desktopMask?.addEventListener("click", closeDesktopCategory); 6841 6842 /* ââ Account / login ââ */ 6843 function userIsLoggedIn() { 6844 return !!loginHook?.querySelector("#website-post-login"); 6845 } 6846 6847 function isRodinSystemUser() { 6848 const postLogin = loginHook?.querySelector("#website-post-login"); 6849 if (postLogin?.dataset.rodinSystemUser === "1") return true; 6850 if (postLogin?.dataset.rodinSystemUser === "0") return false; 6851 if (typeof frappe !== "undefined" && typeof frappe.get_cookie === "function") { 6852 return frappe.get_cookie("system_user") === "yes"; 6853 } 6854 return document.cookie.split(";").some((part) => part.trim().startsWith("system_user=yes")); 6855 } 6856 6857 function shouldShowAccountLink(link) { 6858 if (!link.getAttribute("href")) return false; 6859 if (link.classList.contains("switch-to-desk")) return isRodinSystemUser(); 6860 if (link.classList.contains("hidden")) return false; 6861 return true; 6862 } 6863 6864 function buildAccountMenu() { 6865 if (!desktopAccountMenu || !loginHook) return; 6866 const links = Array.from(loginHook.querySelectorAll("#website-post-login .dropdown-item")).filter(shouldShowAccountLink); 6867 desktopAccountMenu.innerHTML = links 6868 .map((link) => `<a href="${link.getAttribute("href")}">${link.textContent.trim()}</a>`) 6869 .join(""); 6870 } 6871 6872 function goToLogin() { 6873 const loginBtn = loginHook?.querySelector(".btn-login-area, a[href*='login']"); 6874 if (loginBtn) loginBtn.click(); 6875 else window.location.href = "/login"; 6876 } 6877 6878 function toggleDesktopAccountMenu() { 6879 if (!desktopAccountMenu || !desktopAccountMenu.innerHTML.trim()) return; 6880 hideDesktopSearch(); 6881 desktopAccountMenu.classList.toggle("show"); 6882 } 6883 6884 loginBtns.forEach((btn) => { 6885 btn.addEventListener("click", function () { 6886 closeDrawer(); 6887 if (window.innerWidth < 992) { 6888 if (userIsLoggedIn()) { 6889 window.location.href = "/my-account-page"; 6890 } else { 6891 goToLogin(); 6892 } 6893 return; 6894 } 6895 if (userIsLoggedIn()) toggleDesktopAccountMenu(); 6896 else goToLogin(); 6897 }); 6898 }); 6899 6900 document.addEventListener("click", function (event) { 6901 if (!desktopAccountMenu?.classList.contains("show")) return; 6902 if (event.target.closest("#rodin-desktop-account-menu") || event.target.closest('[data-desktop-action="login"]')) return; 6903 desktopAccountMenu.classList.remove("show"); 6904 }); 6905 6906 buildAccountMenu(); 6907 if (typeof jQuery !== "undefined") { 6908 jQuery(document).ready(buildAccountMenu); 6909 jQuery(document).on("page-change", buildAccountMenu); 6910 } 6911 6912 /* ââ Desktop search ââ */ 6913 function normalizeQuery(query) { 6914 const fn = window.rodinNavbarNormalizeSearchQuery; 6915 if (typeof fn === "function") return fn(query); 6916 let q = (query || "").replace(/^[\s\u200c]+|[\s\u200c]+$/g, ""); 6917 return q.replace(/Ù/g, "Û").replace(/Ù/g, "Ú©"); 6918 } 6919 6920 function debounce(fn, delay) { 6921 let t = null; 6922 return function (...args) { 6923 clearTimeout(t); 6924 t = setTimeout(() => fn.apply(this, args), delay); 6925 }; 6926 } 6927 6928 function getRecentSearches() { 6929 try { 6930 return JSON.parse(localStorage.getItem("recent_searches") || "[]").slice(-5); 6931 } catch (e) { 6932 return []; 6933 } 6934 } 6935 6936 function setRecentSearch(query) { 6937 if (!query) return; 6938 const recents = getRecentSearches(); 6939 if (recents.includes(query)) return; 6940 if (recents.length >= 5) recents.shift(); 6941 recents.push(query); 6942 localStorage.setItem("recent_searches", JSON.stringify(recents)); 6943 } 6944 6945 function showDesktopSearch() { 6946 desktopSearchDropdown?.classList.add("show"); 6947 } 6948 function hideDesktopSearch() { 6949 desktopSearchDropdown?.classList.remove("show"); 6950 } 6951 6952 function setDesktopSearchHeadline(text, loading) { 6953 if (!desktopSearchHeadline) return; 6954 const safeText = String(text || ""); 6955 desktopSearchHeadline.textContent = ""; 6956 if (loading) { 6957 const icon = document.createElement("span"); 6958 icon.className = "sk-search-loading-icon"; 6959 icon.setAttribute("aria-hidden", "true"); 6960 icon.innerHTML = '<i class="bi bi-arrow-repeat"></i>'; 6961 const label = document.createElement("span"); 6962 label.textContent = safeText; 6963 desktopSearchHeadline.appendChild(icon); 6964 desktopSearchHeadline.appendChild(label); 6965 desktopSearchHeadline.setAttribute("aria-busy", "true"); 6966 return; 6967 } 6968 desktopSearchHeadline.textContent = safeText; 6969 desktopSearchHeadline.removeAttribute("aria-busy"); 6970 } 6971 6972 function renderDesktopLoadingState() { 6973 if (!desktopSearchResults) return; 6974 desktopSearchResults.innerHTML = 6975 '<div class="sk-search-status" style="padding:12px 0;font-weight:500;color:#6b7280;">در ØØ§Ù جستجÙ...</div>'; 6976 } 6977 6978 function renderDesktopEmptyState() { 6979 if (!desktopSearchResults) return; 6980 desktopSearchResults.innerHTML = '<div class="sk-search-status" style="padding:12px 0;">Ù ÙØ±Ø¯Û ÛØ§Ùت ÙØ´Ø¯</div>'; 6981 } 6982 6983 function renderDesktopRecentSearches() { 6984 if (!desktopSearchResults) return; 6985 const recents = getRecentSearches().slice().reverse(); 6986 if (!recents.length) { 6987 desktopSearchResults.innerHTML = 6988 '<div class="sk-search-status" style="padding:12px 0;font-weight:500;color:#6b7280;">ÙÙÙØ² جستجÙÛÛ Ø§ÙØ¬Ø§Ù ÙØ´Ø¯Ù است.</div>'; 6989 return; 6990 } 6991 desktopSearchResults.innerHTML = recents 6992 .map( 6993 (term) => ` 6994 <button class="rodin-search-result rodin-recent-item" type="button" data-recent-term="${String(term).replace(/"/g, """)}"> 6995 <div class="rodin-result-thumb"><i class="bi bi-clock-history"></i></div> 6996 <div> 6997 <div style="font-size:14px;font-weight:600;text-align:right;">${term}</div> 6998 <div style="font-size:12px;color:#7c7c7c;text-align:right;">جستجÙÛ Ø§Ø®ÛØ±</div> 6999 </div> 7000 </button>` 7001 ) 7002 .join(""); 7003 desktopSearchResults.querySelectorAll(".rodin-recent-item").forEach((node) => { 7004 node.addEventListener("click", function () {
7005 const term = node.dataset.recentTerm || ""; 7006 if (desktopSearchInput) desktopSearchInput.value = term; 7007 doDesktopSearch(term); 7008 desktopSearchInput?.focus(); 7009 }); 7010 }); 7011 } 7012 7013 function desktopResolveThumb(item, payload) { 7014 if (typeof window.rodinNavbarResolveThumb === "function") { 7015 return window.rodinNavbarResolveThumb(item, payload); 7016 } 7017 return ( 7018 (item && (item.image || item.website_image || item.thumbnail)) || 7019 (payload && (payload.thumbnail_place_holder || payload.place_holder)) || 7020 "/assets/erpnext/images/ui-states/cart-empty-state.png" 7021 ); 7022 } 7023 7024 function desktopProductCard(item, payload) { 7025 const thumb = desktopResolveThumb(item, payload); 7026 const name = item.web_item_name || item.item_name || "Ù ØØµÙÙ"; 7027 const route = item.route ? `/${item.route}` : "#"; 7028 return ` 7029 <a class="rodin-search-result" href="${route}"> 7030 <div class="rodin-result-thumb"> 7031 <img src="${thumb}" alt="${name}" style="width:100%;height:100%;object-fit:cover;border-radius:10px;" /> 7032 </div> 7033 <div> 7034 <div style="font-size:14px;font-weight:600;">${name}</div> 7035 <div style="font-size:12px;color:#7c7c7c;">Ù Ø´Ø§ÙØ¯Ù Ù ØØµÙÙ</div> 7036 </div> 7037 </a>`; 7038 } 7039 7040 function desktopEscapeHtml(value) { 7041 return String(value || "") 7042 .replace(/&/g, "&") 7043 .replace(/</g, "<") 7044 .replace(/>/g, ">") 7045 .replace(/"/g, """) 7046 .replace(/'/g, "'"); 7047 } 7048 7049 function desktopSectionTitle(text) { 7050 return `<div class="rodin-title-sm" style="padding:12px 0 6px;margin:0;font-weight:700;color:#444;">${text}</div>`; 7051 } 7052 7053 function desktopRenderSuggestChips(title, items, getLabel, getRoute, iconClass) { 7054 if (!items || !items.length) return ""; 7055 const chips = items 7056 .slice(0, 12) 7057 .map((it) => { 7058 const label = desktopEscapeHtml(getLabel(it)); 7059 const route = desktopEscapeHtml(getRoute(it)); 7060 return `<a class="rodin-suggest-chip" href="${route}"><i class="bi ${iconClass}"></i><span>${label}</span></a>`; 7061 }) 7062 .join(""); 7063 return `${desktopSectionTitle(title)}<div class="rodin-suggest-row">${chips}</div>`; 7064 } 7065 7066 function desktopBuildBrandRoute(brand) { 7067 if (brand.route) return `/${brand.route}`; 7068 const filters = encodeURIComponent(JSON.stringify({ brand: [brand.brand || brand.name] })); 7069 return `/all-products?field_filters=${filters}`; 7070 } 7071 7072 function desktopBuildCategoryRoute(category) { 7073 if (category.route) return `/${category.route}`; 7074 return `/all-products/${encodeURIComponent(category.name || category.item_group || "")}`; 7075 } 7076 7077 function desktopBuildTagRoute(tag) { 7078 if (tag.route) return `/${tag.route}`; 7079 const filters = encodeURIComponent(JSON.stringify({ tags: [tag.name] })); 7080 return `/all-products?tag_filters=${filters}`; 7081 } 7082 7083 function renderDesktopResultPayload(payload, query) { 7084 if (!desktopSearchResults) return; 7085 const productResults = payload.product_results || []; 7086 const categoryResults = payload.category_results || []; 7087 const brandResults = payload.brand_results || []; 7088 const tagResults = payload.tag_results || []; 7089 const hasSuggests = !!(categoryResults.length || brandResults.length || tagResults.length); 7090 const html = [ 7091 desktopRenderSuggestChips("دستÙâØ¨ÙØ¯ÛâÙØ§", categoryResults, (c) => c.name || c.item_group || "دستÙâØ¨ÙØ¯Û", desktopBuildCategoryRoute, "bi-folder"), 7092 desktopRenderSuggestChips("Ø¨Ø±ÙØ¯Ùا", brandResults, (b) => b.brand || b.name || "Ø¨Ø±ÙØ¯", desktopBuildBrandRoute, "bi-award"), 7093 desktopRenderSuggestChips("تگâÙØ§", tagResults, (t) => t.name || "تگ", desktopBuildTagRoute, "bi-tag"), 7094 productResults.length 7095 ? (hasSuggests ? desktopSectionTitle("Ù ØØµÙÙØ§Øª") : "") + productResults.map((item) => desktopProductCard(item, payload)).join("") 7096 : "", 7097 ] 7098 .filter(Boolean) 7099 .join(""); 7100 desktopSearchResults.innerHTML = html; 7101 if (!productResults.length && !categoryResults.length && !brandResults.length && !tagResults.length) { 7102 renderDesktopEmptyState(); 7103 return; 7104 } 7105 setRecentSearch(query); 7106 } 7107 7108 function doDesktopSearch(rawQuery) { 7109 if (!desktopSearchHeadline) return; 7110 const query = normalizeQuery(rawQuery); 7111 if (!query || query.length < 3) { 7112 setDesktopSearchHeadline("جستجÙÙØ§Û Ø§Ø®ÛØ±", false); 7113 renderDesktopRecentSearches(); 7114 showDesktopSearch(); 7115 return; 7116 } 7117 setDesktopSearchHeadline(`Ø¬Ø³ØªØ¬Ù Ø¨Ø±Ø§Û Â«${query}»`, true); 7118 renderDesktopLoadingState(); 7119 showDesktopSearch(); 7120 if (!(window.frappe && frappe.call)) { 7121 setDesktopSearchHeadline(`Ø¬Ø³ØªØ¬Ù Ø¨Ø±Ø§Û Â«${query}»`, false); 7122 renderDesktopEmptyState(); 7123 return; 7124 } 7125 frappe.call({ 7126 method: "erpnext.templates.pages.product_search.search", 7127 args: { query }, 7128 callback: function (res) { 7129 setDesktopSearchHeadline(`Ø¬Ø³ØªØ¬Ù Ø¨Ø±Ø§Û Â«${query}»`, false); 7130 renderDesktopResultPayload(res.message || {}, query); 7131 showDesktopSearch(); 7132 }, 7133 }); 7134 } 7135 7136 function redirectSearch(query) { 7137 if (!query || !(window.frappe && frappe.call)) return; 7138 frappe.call({ 7139 method: "frappe.website.web_template.mega_navbar.mega_navbar.get_item_group", 7140 args: { input: query }, 7141 callback: function (res) { 7142 frappe.call("erpnext.e_commerce.api.get_guest_redirect_on_action").then(() => { 7143 if (localStorage) { 7144 localStorage.setItem("last_visited", window.location.pathname + window.location.search); 7145 } 7146 if (res.message && res.message.name) { 7147 window.location.href = `/all-products/${res.message.name}`; 7148 } else { 7149 window.location.href = `/all-products?name=${encodeURIComponent(query)}`; 7150 } 7151 }); 7152 }, 7153 }); 7154 } 7155 7156 if (desktopSearchInput) { 7157 const onDesktopInput = debounce(function (event) { 7158 doDesktopSearch(event.target.value || ""); 7159 }, 450); 7160 desktopSearchInput.addEventListener("input", onDesktopInput); 7161 desktopSearchInput.addEventListener("focus", function () { 7162 if (!normalizeQuery(desktopSearchInput.value)) renderDesktopRecentSearches(); 7163 showDesktopSearch(); 7164 }); 7165 desktopSearchInput.addEventListener("keydown", function (event) { 7166 if (event.key !== "Enter") return; 7167 event.preventDefault(); 7168 redirectSearch(normalizeQuery(desktopSearchInput.value)); 7169 }); 7170 } 7171 7172 document.getElementById("sk-search-submit")?.addEventListener("click", function () { 7173 redirectSearch(normalizeQuery(desktopSearchInput?.value || "")); 7174 }); 7175 7176 document.addEventListener("click", function (event) { 7177 if (!desktopSearchDropdown?.classList.contains("show")) return; 7178 if (event.target.closest("#rodin-desktop-search-dropdown") || event.target.closest("#rodin-desktop-search-input") || event.target.closest(".sk-search-desktop")) return; 7179 hideDesktopSearch(); 7180 }); 7181 7182 openSearch?.addEventListener("click", function () { 7183 openSearchOverlay(); 7184 }); 7185 7186 document.querySelectorAll("[data-close-overlay]").forEach((btn) => { 7187 btn.addEventListener("click", function () { 7188 const target = document.getElementById(btn.dataset.closeOverlay); 7189 if (target === searchOverlay) closeSearchOverlay(); 7190 else target?.classList.remove("is-open"); 7191 }); 7192 }); 7193 7194 document.addEventListener("keydown", function (event) { 7195 if (event.key === "Escape") { 7196 closeDesktopCategory(); 7197 closeDrawer(); 7198 closeSearchOverlay(); 7199 hideDesktopSearch(); 7200 desktopAccountMenu?.classList.remove("show"); 7201 } 7202 }); 7203 7204 (function initPromoSwiper() { 7205 const el = document.querySelector(".sk-promo-swiper"); 7206 if (!el || typeof Swiper === "undefined") return; 7207 if (el.querySelectorAll(".swiper-slide").length < 2) return; 7208 new Swiper(el, { 7209 slidesPerView: 1, 7210 loop: true, 7211 speed: 500, 7212 autoplay: { delay: 3000, disableOnInteraction: false, pauseOnMouseEnter: true }, 7213 }); 7214 })(); 7215 7216 (function initImgTopbarSwiper() { 7217 const el = document.querySelector(".sk-img-topbar__root"); 7218 if (!el || typeof Swiper === "undefined") return; 7219 const slideCount = el.querySelectorAll(".swiper-slide").length; 7220 if (slideCount < 1) return; 7221 const autoplayOn = el.getAttribute("data-rit-autoplay") === "1"; 7222 let delay = parseInt(el.getAttribute("data-rit-delay"), 10); 7223 if (isNaN(delay) || delay < 1000) delay = 2000; 7224 const loopOn = el.getAttribute("data-rit-loop") === "1"; 7225 const nextEl = el.querySelector(".swiper-button-next"); 7226 const prevEl = el.querySelector(".swiper-button-prev"); 7227 new Swiper(el, { 7228 rtl: true, 7229 loop: loopOn && slideCount > 1, 7230 speed: 500, 7231 slidesPerView: 1, 7232 spaceBetween: 0, 7233 watchOverflow: true, 7234 autoplay: 7235 autoplayOn && slideCount > 1 7236 ? { delay: delay, disableOnInteraction: false, pauseOnMouseEnter: true } 7237 : false, 7238 navigation: 7239 slideCount > 1 && nextEl && prevEl 7240 ? { nextEl: nextEl, prevEl: prevEl } 7241 : false, 7242 }); 7243 })(); 7244 })(); 7245</script>
7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255<div id="page-login" data-path="login"> 7256 7257<div class="page-content-wrapper"> 7258 <!-- breadcrumbs --> 7259 <div class="page-breadcrumbs"> 7260 7261 7262 7263 </div> 7264 7265 7266 <main class="page-container container my-4"> 7267 <div class="page-header-wrapper d-none"> 7268 <div class="page-header"> 7269 7270 </div> 7271 7272 7273 </div> 7274 7275 <div class="page_content"> 7276<!-- login.html --> 7277 7278 7279 7280<div> 7281 <noscript> 7282 <div class="text-center my-5"> 7283 <h4>Ø¬Ø§ÙØ§ اسکرÛپت بر رÙÛ Ù Ø±ÙØ±Ú¯Ø± ش٠ا ØºÛØ± ÙØ¹Ø§Ù شد٠است</h4> 7284 <p class="text-muted"> 7285 Ø¨Ø§ÛØ¯ Ø¬Ø§ÙØ§ اسکرÛپت را ÙØ¹Ø§Ù Ú©ÙÛØ¯ تا Ø¨Ø±ÙØ§Ù ٠ش٠ا کار Ú©ÙØ¯. 7286 </p> 7287 </div> 7288 </noscript> 7289 <section class='for-login d-flex justify-content-center col-12 p-0'> 7290 <!-- Login Form Container --> 7291 <div class="d-flex justify-content-center col-12 login-form-container flex-column"> 7292 <div class="logo-wrapper"> 7293 7294<div class="mx-0 d-flex justify-content-center" style="text-align: center; margin-bottom: 20px;"> 7295 <img class="app-logo w-100 m-0" src="/files/bookcity-typography.svg" alt="ÙÙÚ¯Ù" style="max-width: 200px;"> 7296</div> 7297 7298 </div> 7299 <div class="login-content page-card w-100" style="max-width: 450px;"> 7300 <div class="mobile-logo-wrapper"> 7301 7302<div class="mx-0 d-flex justify-content-center" style="text-align: center; margin-bottom: 20px;"> 7303 <img class="app-logo w-100 m-0" src="/files/bookcity-typography.svg" alt="ÙÙÚ¯Ù" style="max-width: 200px;"> 7304</div> 7305 7306 </div> 7307 <!-- Loader Overlay --> 7308 <div class="loader-overlay" id="loginLoader"> 7309 <div class="loader-container"> 7310 <div class="loader-spinner"></div> 7311 <div class="loader-text" dir="rtl">در ØØ§Ù ارساÙ...</div> 7312 </div> 7313 </div> 7314 <div class="page-card-head"> 7315 <h4 style="margin-top: 20px;">ÙØ±Ùد / ثبت ÙØ§Ù </h4> 7316 <p id="login-form-subtitle">Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ Ø®ÙØ¯ را ÙØ§Ø±Ø¯ Ú©ÙÛØ¯</p> 7317 </div> 7318 <form class="form-signin form-login" role="form"> 7319 7320 7321 7322<style> 7323 /* Background */ 7324 .page-content-wrapper { 7325 background-color: #f0f4f8; 7326 min-height: 100vh; 7327 } 7328 7329 .for-login .page-card, 7330 .for-forgot .page-card, 7331 .for-login-with-email-link .page-card, 7332 .for-signup .page-card, 7333 .for-email-login .page-card, 7334 .for-otp-verification .page-card { 7335 margin: 0 auto; 7336 max-width: 450px; 7337 padding: 40px 30px; 7338 border-radius: 12px; 7339 background: white; 7340 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 7341 } 7342 7343 .for-login .page-card form, 7344 .for-forgot .page-card form, 7345 .for-login-with-email-link .page-card form, 7346 .for-signup .page-card form, 7347 .for-email-login .page-card form, 7348 .for-otp-verification .page-card form { 7349 max-width: 100%; 7350 } 7351 7352 /* Title */ 7353 .page-card-head h4 {
7354 font-size: 24px; 7355 font-weight: 600; 7356 text-align: center; 7357 margin-bottom: 8px; 7358 color: #1a1a1a; 7359 } 7360 7361 .page-card-head p { 7362 font-size: 14px; 7363 color: #666; 7364 text-align: center; 7365 margin-bottom: 24px; 7366 } 7367 7368 /* Mobile Number Input */ 7369 .mobile-input-container { 7370 position: relative; 7371 margin-bottom: 24px; 7372 } 7373 7374 .mobile-input-container label { 7375 display: block; 7376 font-size: 14px; 7377 color: #666; 7378 margin-bottom: 8px; 7379 text-align: right; 7380 } 7381 7382 .mobile-input-wrapper { 7383 display: flex; 7384 align-items: center; 7385 background: #f8f9fa; 7386 border: 1px solid #e0e0e0; 7387 border-radius: 8px; 7388 padding: 12px 16px; 7389 } 7390 7391 .mobile-input-wrapper input { 7392 flex: 1; 7393 border: none; 7394 background: transparent; 7395 font-size: 16px; 7396 outline: none; 7397 direction: rtl; 7398 text-align: right; 7399 } 7400 7401 .mobile-input-wrapper input::placeholder { 7402 color: #999; 7403 } 7404 7405 /* Register Button */ 7406 .btn-register { 7407 width: 100%; 7408 background: var(--dark-primary); 7409 color: white; 7410 border: none; 7411 border-radius: 8px; 7412 padding: 14px; 7413 font-size: 16px; 7414 font-weight: 500; 7415 cursor: pointer; 7416 transition: background 0.2s; 7417 } 7418 7419 .btn-register:hover { 7420 opacity: 0.9; 7421 } 7422 7423 .btn-register:disabled { 7424 background: #9ca3af; 7425 cursor: not-allowed; 7426 } 7427 7428 /* OTP Section */ 7429 .otp-instructions { 7430 font-size: 14px; 7431 color: #666; 7432 text-align: center; 7433 margin-bottom: 20px; 7434 line-height: 1.6; 7435 direction: rtl; 7436 } 7437 7438 .mobile-display-container { 7439 background: #25408F33; 7440 border-radius: 20px; 7441 padding: 8px 16px; 7442 margin-bottom: 24px; 7443 display: flex; 7444 width: fit-content; 7445 flex-direction: row-reverse; 7446 align-items: center; 7447 justify-content: space-between; 7448 } 7449 7450 .mobile-display-number { 7451 font-size: 16px; 7452 color: #1a1a1a; 7453 font-weight: 500; 7454 direction: rtl; 7455 } 7456 7457 .edit-mobile-btn { 7458 background: none; 7459 border: none; 7460 cursor: pointer; 7461 padding: 4px; 7462 display: flex; 7463 align-items: center; 7464 } 7465 7466 .edit-mobile-btn svg { 7467 width: 18px; 7468 height: 18px; 7469 color: var(--dark-primary); 7470 } 7471 7472 /* OTP Input Fields */ 7473 .otp-input-container { 7474 display: flex; 7475 justify-content: center; 7476 gap: 12px; 7477 margin-bottom: 24px; 7478 } 7479 7480 .otp-input { 7481 width: 56px; 7482 height: 56px; 7483 border: 2px solid #e0e0e0 !important; 7484 border-radius: 8px; 7485 text-align: center; 7486 font-size: 24px; 7487 font-weight: 600; 7488 outline: none; 7489 transition: border-color 0.2s; 7490 color: #1a1a1a; 7491 background: white; 7492 position: relative; 7493 } 7494 7495 .otp-input:focus { 7496 border: 2px solid var(--dark-primary) !important; 7497 box-shadow: none; 7498 } 7499 7500 .otp-input.filled { 7501 border: 2px solid var(--dark-primary) !important; 7502 background: white; 7503 color: var(--dark-primary); 7504 } 7505 7506 .otp-input.otp-invalid, 7507 .otp-input.otp-invalid:focus, 7508 .otp-input.otp-invalid.filled, 7509 .otp-input.otp-invalid.empty { 7510 border: 2px solid #ef4444 !important; 7511 color: #ef4444 !important; 7512 } 7513 7514 .otp-input.empty:not(:focus) { 7515 border: 2px solid #e0e0e0 !important; 7516 color: transparent; 7517 } 7518 7519 .otp-input-wrapper { 7520 position: relative; 7521 display: inline-block; 7522 } 7523 7524 .otp-input-wrapper::after { 7525 content: "-"; 7526 color: #999; 7527 position: absolute; 7528 left: 50%; 7529 top: 50%; 7530 transform: translate(-50%, -50%); 7531 pointer-events: none; 7532 font-size: 24px; 7533 font-weight: 400; 7534 line-height: 1; 7535 z-index: 1; 7536 display: none; 7537 } 7538 7539 .otp-input-wrapper.show-dash::after { 7540 display: block; 7541 } 7542 7543 /* Terms */ 7544 .terms-text { 7545 font-size: 12px; 7546 color: #999; 7547 text-align: center; 7548 margin-bottom: 24px; 7549 line-height: 1.5; 7550 } 7551 7552 /* Buttons in OTP page */ 7553 .otp-actions { 7554 display: flex; 7555 gap: 12px; 7556 } 7557 7558 .btn-login-submit { 7559 width: 100%; 7560 background: var(--primary); 7561 color: white; 7562 border: none; 7563 border-radius: 8px; 7564 padding: 14px; 7565 font-size: 16px; 7566 font-weight: 500; 7567 cursor: pointer; 7568 transition: background 0.2s; 7569 } 7570 7571 .btn-login-submit:hover:not(:disabled) { 7572 opacity: 0.9; 7573 } 7574 7575 .btn-login-submit:disabled { 7576 background: #F2F2F2; 7577 cursor: not-allowed; 7578 color: #BDBDBD; 7579 } 7580 7581 .btn-edit-mobile { 7582 width: 100%; 7583 background: transparent; 7584 color: var(--dark-primary); 7585 border: none; 7586 padding: 12px; 7587 font-size: 14px; 7588 cursor: pointer; 7589 border-radius: 8px; 7590 border: 1px solid #F2F2F2; 7591 } 7592 7593 .btn-edit-mobile:hover { 7594 border: 1px solid var(--dark-primary); 7595 } 7596 7597 #login-label-name { 7598 display: block; 7599 text-align: right; 7600 font-size: 14px; 7601 color: #333; 7602 margin-bottom: 8px; 7603 font-weight: 500; 7604 } 7605 7606 #login-name-field-group { 7607 margin-bottom: 1rem; 7608 direction: rtl; 7609 text-align: right; 7610 } 7611 7612 #login_name { 7613 direction: rtl; 7614 text-align: right; 7615 } 7616 7617 #login_name::placeholder { 7618 text-align: right; 7619 } 7620 7621 /* Hide default elements */ 7622 #login-label-username, 7623 #edit-mobile-number, 7624 #countdown-container,
7625 #send-code-again, 7626 #staff, 7627 #staff-label { 7628 display: none !important; 7629 } 7630 7631 /* Password login fields styling */ 7632 #login-label-email, 7633 #login-label-password { 7634 display: block; 7635 text-align: right; 7636 font-size: 14px; 7637 color: #333; 7638 margin-bottom: 8px; 7639 font-weight: 500; 7640 } 7641 7642 7643 .toggle-password { 7644 cursor: pointer; 7645 font-size: 14px; 7646 color: #666; 7647 margin-right: 8px; 7648 user-select: none; 7649 } 7650 7651 .toggle-password:hover { 7652 color: var(--primary); 7653 } 7654 7655 /* Password login button */ 7656 .btn-password-login { 7657 width: 100%; 7658 background: var(--dark-primary); 7659 color: white; 7660 border: none; 7661 border-radius: 8px; 7662 padding: 14px; 7663 font-size: 16px; 7664 font-weight: 500; 7665 cursor: pointer; 7666 transition: background 0.2s; 7667 margin-bottom: 20px; 7668 } 7669 7670 .btn-password-login:hover { 7671 background: var(--primary); 7672 } 7673 7674 .btn-password-login:disabled { 7675 background: #9ca3af; 7676 cursor: not-allowed; 7677 } 7678 7679 /* Toggle to OTP login link */ 7680 .toggle-to-otp-login { 7681 text-align: center; 7682 margin-top: 10px; 7683 } 7684 7685 .toggle-to-otp-login a { 7686 color: var(--dark-primary); 7687 text-decoration: none; 7688 font-size: 14px; 7689 cursor: pointer; 7690 } 7691 7692 .toggle-to-otp-login a:hover { 7693 text-decoration: underline; 7694 } 7695 7696 /* Toggle to password login button */ 7697 .btn-toggle-password-login { 7698 width: 100%; 7699 background: transparent; 7700 color: var(--dark-primary); 7701 border: 1px solid var(--dark-primary); 7702 border-radius: 8px; 7703 padding: 14px; 7704 font-size: 16px; 7705 font-weight: 500; 7706 cursor: pointer; 7707 transition: all 0.2s; 7708 margin-top: 15px; 7709 } 7710 7711 .btn-toggle-password-login:hover { 7712 background: var(--dark-primary); 7713 color: white; 7714 } 7715 7716 /* Logo adjustments */ 7717 .app-logo { 7718 max-width: 200px; 7719 margin: 0 auto 30px; 7720 display: block; 7721 } 7722 7723 /* Ensure only one container is visible at a time */ 7724 .for-login { 7725 position: relative; 7726 display: flex; 7727 flex-direction: column; 7728 align-items: center; 7729 justify-content: center; 7730 min-height: 100vh; 7731 } 7732 7733 .logo-wrapper { 7734 width: 100%; 7735 display: flex; 7736 justify-content: center; 7737 margin-bottom: 20px; 7738 z-index: 1; 7739 } 7740 7741 .mobile-logo-wrapper { 7742 display: none; 7743 } 7744 7745 .login-form-container { 7746 position: relative; 7747 width: 100%; 7748 display: flex !important; 7749 flex-direction: column; 7750 align-items: center; 7751 justify-content: center; 7752 } 7753 7754 .otp-container { 7755 position: absolute; 7756 top: 0; 7757 left: 0; 7758 right: 0; 7759 width: 100%; 7760 height: 100%; 7761 z-index: 10; 7762 display: none !important; 7763 visibility: hidden; 7764 flex-direction: column; 7765 align-items: center; 7766 justify-content: center; 7767 } 7768 7769 .otp-container.show-otp { 7770 display: flex !important; 7771 visibility: visible !important; 7772 } 7773 7774 /* Hide login container when OTP is shown */ 7775 .otp-container.show-otp ~ .login-form-container { 7776 display: none !important; 7777 } 7778 7779 /* Hide logo in OTP container when login is shown */ 7780 .otp-container:not(.show-otp) .logo-wrapper { 7781 display: none !important; 7782 } 7783 7784 /* Hide logo in login container when OTP is shown */ 7785 .otp-container.show-otp ~ .login-form-container .logo-wrapper { 7786 display: none !important; 7787 } 7788 7789 /* Hide all other logos in other sections */ 7790 .for-email-login .app-logo, 7791 .for-email-login .logo-wrapper, 7792 .for-signup .app-logo, 7793 .for-signup .logo-wrapper, 7794 .for-forgot .app-logo, 7795 .for-forgot .logo-wrapper, 7796 .for-login-with-email-link .app-logo, 7797 .for-login-with-email-link .logo-wrapper, 7798 section:not(.for-login) .app-logo, 7799 section:not(.for-login) .logo-wrapper, 7800 section:not(.for-login) .page-card-head .app-logo { 7801 display: none !important; 7802 visibility: hidden !important; 7803 height: 0 !important; 7804 overflow: hidden !important; 7805 margin: 0 !important; 7806 padding: 0 !important; 7807 } 7808 7809 /* Hide header and footer */ 7810 .navbar, 7811 .page-header-wrapper, 7812 .page-footer, 7813 .page-breadcrumbs, 7814 header, 7815 footer, 7816 .web-footer, 7817 .footer-padding, 7818 .footer-spacer, 7819 .navbar-header, 7820 .navbar-nav, 7821 .bottom-menu-space { 7822 display: none !important; 7823 visibility: hidden !important; 7824 height: 0 !important; 7825 overflow: hidden !important; 7826 margin: 0 !important; 7827 padding: 0 !important; 7828 } 7829 7830 /* Full page login */ 7831 .page-content-wrapper { 7832 padding: 0 !important; 7833 margin: 0 !important; 7834 } 7835 7836 .page-container { 7837 margin: 0 !important; 7838 padding: 0 !important; 7839 max-width: unset !important; 7840 height: 100vh !important; 7841 align-content: center !important; 7842 background: linear-gradient(180deg, rgba(37, 64, 143, 0.2) 0%, rgba(37, 64, 143, 0) 100%) !important; 7843 } 7844 7845 /* Countdown Timer */ 7846 .otp-countdown { 7847 text-align: center; 7848 margin: 20px 0; 7849 font-size: 14px; 7850 color: #666; 7851 } 7852 7853 .otp-resend-link { 7854 text-align: center; 7855 margin: 10px 0; 7856 } 7857 7858 .otp-resend-link a { 7859 color: var(--primary); 7860 text-decoration: none; 7861 cursor: pointer; 7862 font-size: 14px; 7863 } 7864 7865 .otp-resend-link a:hover { 7866 text-decoration: underline; 7867 } 7868 7869 .otp-resend-link a:disabled, 7870 .otp-resend-link a.disabled { 7871 color: #999;
7872 cursor: not-allowed; 7873 pointer-events: none; 7874 } 7875 7876 /* Loader Styles */ 7877 .loader-overlay { 7878 position: absolute; 7879 top: 0; 7880 left: 0; 7881 right: 0; 7882 bottom: 0; 7883 background: rgba(255, 255, 255, 0.9); 7884 display: none; 7885 align-items: center; 7886 justify-content: center; 7887 z-index: 1000; 7888 border-radius: 12px; 7889 backdrop-filter: blur(2px); 7890 } 7891 7892 .loader-overlay.active { 7893 display: flex; 7894 } 7895 7896 .loader-spinner { 7897 width: 40px; 7898 height: 40px; 7899 border: 4px solid #f3f3f3; 7900 border-top: 4px solid var(--dark-primary); 7901 border-radius: 50%; 7902 animation: spin 1s linear infinite; 7903 } 7904 7905 @keyframes spin { 7906 0% { transform: rotate(0deg); } 7907 100% { transform: rotate(360deg); } 7908 } 7909 7910 .loader-text { 7911 margin-top: 12px; 7912 color: var(--dark-primary); 7913 font-size: 14px; 7914 font-weight: 500; 7915 text-align: center; 7916 } 7917 7918 .loader-container { 7919 display: flex; 7920 flex-direction: column; 7921 align-items: center; 7922 justify-content: center; 7923 } 7924 7925 /* Disable form elements when loading */ 7926 .page-card.loading input, 7927 .page-card.loading button, 7928 .page-card.loading select, 7929 .page-card.loading textarea { 7930 pointer-events: none; 7931 opacity: 0.6; 7932 cursor: not-allowed; 7933 } 7934 7935 .page-card { 7936 position: relative; 7937 } 7938 7939 @media (max-width: 767.98px) { 7940 .for-login .login-form-container { 7941 margin-bottom: 50px; 7942 } 7943 7944 .for-login .login-form-container > .logo-wrapper, 7945 .for-login .otp-container > .logo-wrapper { 7946 display: none !important; 7947 } 7948 7949 .for-login .login-content .mobile-logo-wrapper { 7950 display: flex !important; 7951 justify-content: center; 7952 margin-bottom: 20px; 7953 } 7954 7955 .for-login .login-content .mobile-logo-wrapper .app-logo { 7956 max-height: 70px; 7957 object-fit: contain; 7958 } 7959 } 7960</style> 7961 7962<div class="page-card-body"> 7963 <div class="form-group" id="login-name-field-group" style="display: none;" dir="rtl"> 7964 <p id="login-label-name" class="text-right py-2 login-label">ÙØ§Ù Ù ÙØ§Ù خاÙÙØ§Ø¯Ú¯Û</p> 7965 <input type="text" id="login_name" class="form-control" placeholder="ÙØ§Ù Ù ÙØ§Ù خاÙÙØ§Ø¯Ú¯Û" autocomplete="name" dir="rtl"> 7966 </div> 7967 <div class="d-flex justify-content-end"> 7968 <p id="edit-mobile-number" class="justify-content-end" disabled="false" style="display: none;" 7969 onclick="active_number()">ÙÛØ±Ø§ÛØ´ Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ/ اÛÙ ÛÙ</p> 7970 </div> 7971 <div class="form-group" id="email-field-group" style="display: none;"> 7972 <p id="login-label-email" class="text-right py-2 login-label">Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ / اÛÙ ÛÙ</p> 7973 <div class="email-field" id="email-field"> 7974 <input type="text" id="login_email" class="form-control m-0" 7975 placeholder="[email protected] ÛØ§ 09*********" 7976 autocomplete="username"> 7977 7978 7979 7980 7981 <svg class="field-icon email-icon" width="20" height="20" viewBox="0 0 20 20" fill="none" 7982 xmlns="http://www.w3.org/2000/svg"> 7983 <path 7984 d="M2.5 7.65149V15.0757C2.5 15.4374 2.64367 15.7842 2.8994 16.04C3.15513 16.2957 3.50198 16.4394 3.86364 16.4394H16.1364C16.498 16.4394 16.8449 16.2957 17.1006 16.04C17.3563 15.7842 17.5 15.4374 17.5 15.0757V7.65149" 7985 stroke="#74808B" stroke-miterlimit="10" stroke-linecap="square" /> 7986 <path 7987 d="M17.5 7.57572V5.53026C17.5 5.1686 17.3563 4.82176 17.1006 4.56603C16.8449 4.31029 16.498 4.16663 16.1364 4.16663H3.86364C3.50198 4.16663 3.15513 4.31029 2.8994 4.56603C2.64367 4.82176 2.5 5.1686 2.5 5.53026V7.57572L10 10.8333L17.5 7.57572Z" 7988 stroke="#74808B" stroke-miterlimit="10" stroke-linecap="square" /> 7989 </svg> 7990 </div> 7991 </div> 7992 7993 7994 7995 7996 7997 7998 7999 <div class="form-group" id="password-field-group" style="display: none;"> 8000 <p id="login-label-password" class="text-right py-2 login-label">Ú©ÙÙ Ù Ø¹Ø¨ÙØ±</p> 8001 <div class="password-field" id="password-field"> 8002 <input type="password" id="login_password" class="form-control m-0" 8003 placeholder="ÙØ·Ùا ر٠ز Ø¹Ø¨ÙØ± را ÙØ§Ø±Ø¯ Ù٠اÛÛØ¯" autocomplete="current-password"> 8004 8005 <svg class="field-icon password-icon" width="20" height="20" viewBox="0 0 20 20" fill="none" 8006 xmlns="http://www.w3.org/2000/svg"> 8007 <path fill-rule="evenodd" clip-rule="evenodd" 8008 d="M10.0961 1.93768H10.0264C8.94806 1.92763 7.90976 2.34591 7.13951 3.10075C6.36866 3.85619 5.9294 4.88687 5.91833 5.96612L5.91831 5.96612V5.97124V6.52695H4.3125C3.20793 6.52695 2.3125 7.42238 2.3125 8.52695V16.0165C2.3125 17.121 3.20793 18.0165 4.3125 18.0165H15.7356C16.8401 18.0165 17.7356 17.121 17.7356 16.0165V8.52695C17.7356 7.42238 16.8401 6.52695 15.7356 6.52695H14.1297V6.04576C14.1397 4.96742 13.7214 3.92913 12.9666 3.15888C12.2112 2.38803
800811.1805 1.94877 10.1012 1.9377V1.93768H10.0961ZM13.1297 6.52695V6.04336V6.03838H13.1297C13.1378 5.22428 12.8222 4.44029 12.2524 3.85881C11.6831 3.27793 10.9067 2.94667 10.0934 2.93768H10.024H10.019V2.93765C9.20491 2.92955 8.42092 3.24512 7.83944 3.81497C7.25856 4.38423 6.9273 5.1607 6.91831 5.9739V6.52695H13.1297ZM4.3125 7.52695C3.76022 7.52695 3.3125 7.97467 3.3125 8.52695V16.0165C3.3125 16.5687 3.76022 17.0165 4.3125 17.0165H15.7356C16.2879 17.0165 16.7356 16.5687 16.7356 16.0165V8.52695C16.7356 7.97467 16.2879 7.52695 15.7356 7.52695H4.3125ZM10.0242 13.2384C10.5581 13.2384 10.9909 12.8056 10.9909 12.2717C10.9909 11.7377 10.5581 11.3049 10.0242 11.3049C9.49023 11.3049 9.05738 11.7377 9.05738 12.2717C9.05738 12.8056 9.49023 13.2384 10.0242 13.2384ZM11.9909 12.2717C11.9909 13.3579 11.1104 14.2384 10.0242 14.2384C8.93794 14.2384 8.05738 13.3579 8.05738 12.2717C8.05738 11.1854 8.93794 10.3049 10.0242 10.3049C11.1104 10.3049 11.9909 11.1854 11.9909 12.2717Z" 8009 fill="#74808B" /> 8010 </svg> 8011 <span toggle="#login_password" class="toggle-password text-muted">ÙÙ Ø§ÛØ´ دÙÛØ¯</span> 8012 </div> 8013 </div> 8014 8015 <div class="form-group" id="mobile-field-group"> 8016 8017 8018 <p id="login-label-username" class="text-right py-2 login-label" style="display: none;">Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ 8019 </p> 8020 <input type="text" id="login_mobile" class="form-control" placeholder="09*********" autofocus> 8021 8022 </div> 8023 8024 8025 8026 8027 8028 <p class="forgot-password-message d-flex justify-content-end" style="display: none !important;"> 8029 <a href="#forgot">ر٠ز Ø¹Ø¨ÙØ± را ÙØ±Ø§Ù ÙØ´ Ú©Ø±Ø¯Ù Ø§ÛØ¯Ø</a> 8030 </p> 8031 <div class="d-flex justify-content-between" id="counter" dir="rtl"> 8032 <h4 id="countdown-container" class="m-0" style="display: none;"> 8033 <p id="countdown">120 ثاÙÛ٠تا ارسا٠٠جدد کد</p> 8034 </h4> 8035 8036 <h4 id="send-code-again" class="m-0 gap-1 align-items-center" style="display: none;">ارسا٠٠جدد<i 8037 class="bi bi-arrow-clockwise"></i></h4> 8038 </div> 8039</div> 8040 8041 8042<div class="page-card-actions"> 8043 <!-- OTP Login Button (Default) --> 8044 8045 <button id="loginButton" class="btn-register" type="submit"> 8046 ÙØ±Ùد / ثبت ÙØ§Ù </button> 8047 8048 8049 <!-- Password Login Button (Hidden by default) --> 8050 <button id="passwordLoginButton" class="btn-password-login" type="submit" style="display: none;"> 8051 ÙØ±Ùد / ثبت ÙØ§Ù </button> 8052 8053 <!-- Toggle to Password Login Button --> 8054 <button type="button" id="togglePasswordLoginBtn" class="btn-toggle-password-login" onclick="togglePasswordLogin()"> 8055 ÙØ±Ùد با ر٠ز ثابت</button> 8056 8057 <!-- Toggle to OTP Login Link (in password mode) --> 8058 <div class="toggle-to-otp-login" id="toggleToOtpLogin" style="display: none;"> 8059 <a href="#" onclick="togglePasswordLogin(); return false;">ÙØ±Ùد با ر٠ز Ûکبار ٠صرÙ</a> 8060 </div> 8061 8062 8063 <!-- Hidden staff checkbox --> 8064 <input type="checkbox" class="m-0" id="staff" name="staff" onclick="staff_login()" hidden> 8065 8066 <label class="m-0" id="staff-label" for="staff" style="display: none;">ÙØ±Ùد با ر٠ز ثابت</label> 8067 8068</div> 8069</form> 8070 </div> 8071 </div> 8072 8073 <!-- OTP Verification Section - Same Container --> 8074 <div class="d-flex justify-content-center col-12 otp-container flex-column"> 8075 <div class="logo-wrapper"> 8076 8077<div class="mx-0 d-flex justify-content-center" style="text-align: center; margin-bottom: 20px;"> 8078 <img class="app-logo w-100 m-0" src="/files/bookcity-typography.svg" alt="ÙÙÚ¯Ù" style="max-width: 200px;"> 8079</div> 8080 8081 </div> 8082 <div class="login-content page-card w-100" style="max-width: 450px;"> 8083 <div class="mobile-logo-wrapper"> 8084 8085<div class="mx-0 d-flex justify-content-center" style="text-align: center; margin-bottom: 20px;"> 8086 <img class="app-logo w-100 m-0" src="/files/bookcity-typography.svg" alt="ÙÙÚ¯Ù" style="max-width: 200px;"> 8087</div> 8088 8089 </div> 8090 <!-- Loader Overlay --> 8091 <div class="loader-overlay" id="otpLoader"> 8092 <div class="loader-container"> 8093 <div class="loader-spinner"></div> 8094 <div class="loader-text" dir="rtl">در ØØ§Ù بررسÛ...</div> 8095 </div> 8096 </div> 8097 <div class="page-card-head"> 8098 <h4 style="margin-top: 20px;">ثبت ÙØ§Ù </h4> 8099 <p class="otp-instructions"> 8100 کد Ù¾ÙØ¬ رÙÙ Û Ø§Ø±Ø³Ø§Ù Ø´Ø¯Ù Ø¨Ù Ø´Ù Ø§Ø±Ù Ø²ÛØ± را ÙØ§Ø±Ø¯ Ú©ÙÛØ¯.<br> 8101 در ØµÙØ±Øª ÙÛØ§Ø² Ù ÛâØªÙØ§ÙÛØ¯ Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§Û٠را ÙÛØ±Ø§ÛØ´ Ú©ÙÛØ¯. 8102 </p> 8103 </div> 8104 <form class="form-signin form-otp-verification" role="form"> 8105 <div class="page-card-body d-flex flex-column align-items-center justify-content-center"> 8106 <!-- Mobile Number Display --> 8107 <div class="mobile-display-container"> 8108 <span class="mobile-display-number" id="display_mobile_number">Û°Û¹Û³ÛµÛ·Û¸Û¹Û´ÛµÛ¶Û°</span> 8109 <button type="button" class="edit-mobile-btn" id="edit_mobile_btn" onclick="editMobileNumber()"> 8110 <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> 8111 <path d="M13.5 2.25L15.75 4.5L5.25 15H2.25V12L12.75 1.5L13.5 2.25Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 8112 </svg> 8113 </button> 8114 </div> 8115
8116 <!-- OTP Input Fields (5 digits) --> 8117 <div class="otp-input-container"> 8118 <div class="otp-input-wrapper"> 8119 <input type="text" class="otp-input" id="otp_1" maxlength="1" inputmode="numeric" pattern="[0-9]*" autocomplete="off"> 8120 </div> 8121 <div class="otp-input-wrapper"> 8122 <input type="text" class="otp-input" id="otp_2" maxlength="1" inputmode="numeric" pattern="[0-9]*" autocomplete="off"> 8123 </div> 8124 <div class="otp-input-wrapper"> 8125 <input type="text" class="otp-input" id="otp_3" maxlength="1" inputmode="numeric" pattern="[0-9]*" autocomplete="off"> 8126 </div> 8127 <div class="otp-input-wrapper"> 8128 <input type="text" class="otp-input" id="otp_4" maxlength="1" inputmode="numeric" pattern="[0-9]*" autocomplete="off"> 8129 </div> 8130 <div class="otp-input-wrapper"> 8131 <input type="text" class="otp-input" id="otp_5" maxlength="1" inputmode="numeric" pattern="[0-9]*" autocomplete="off"> 8132 </div> 8133 </div> 8134 8135 <!-- Countdown Timer and Resend --> 8136 <div class="otp-countdown" id="otp_countdown" style="display: none;"> 8137 <span id="countdown_text">120 ثاÙÛ٠تا ارسا٠٠جدد کد</span> 8138 </div> 8139 <div class="otp-resend-link" id="otp_resend_link" style="display: none;"> 8140 <a href="#" onclick="resendOTP(); return false;">ارسا٠٠جدد</a> 8141 </div> 8142 8143 <!-- Terms --> 8144 8145 </div> 8146 <div class="page-card-actions otp-actions"> 8147 <button type="submit" class="btn-login-submit" id="otp_submit_btn" disabled> 8148 ÙØ±Ùد 8149 </button> 8150 <button type="button" class="btn-edit-mobile" id="edit_mobile_link" onclick="editMobileNumber()"> 8151 ÙÛØ±Ø§ÛØ´ ش٠ار٠Ù٠را٠8152 </button> 8153 </div> 8154 </form> 8155 </div> 8156 </div><div class="text-center sign-up-message" style="display: none;"> 8157 ØØ³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û ÙØ¯Ø§Ø±ÛØ¯Ø 8158 <a href="#signup">ثبت ÙØ§Ù </a> 8159 </div></section><section class='for-signup '> 8160 <div class="login-content page-card"> 8161 8162<div class="mx-0 d-flex justify-content-center" style="text-align: center; margin-bottom: 20px;"> 8163 <img class="app-logo w-100 m-0" src="/files/bookcity-typography.svg" alt="ÙÙÚ¯Ù" style="max-width: 200px;"> 8164</div> 8165<style> 8166 .sign-up-message{ 8167 margin-top: 20px !important; 8168 } 8169 8170 .sign-up-message a{ 8171 color: black !important; 8172 text-decoration: underline !important; 8173 } 8174</style> 8175 8176<form class="form-signin form-signup hide" role="form"> 8177 <div class="page-card-body"> 8178 <div class="form-group"> 8179 <label class="form-label sr-only" for="signup_fullname" >ÙØ§Ù کا٠Ù</label> 8180 <input type="text" id="signup_fullname" class="form-control" dir="rtl" placeholder="ÙØ§Ù کا٠Ù" 8181 required autofocus autocomplete="name"> 8182 </div> 8183 8184 <div class="form-group"> 8185 <label class="form-label sr-only" for="mobile_no">Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ</label> 8186 <input type="text" id="mobile_no" class="form-control text-right" 8187 placeholder="09*********" required autocomplete="username"> 8188 </div> 8189 8190 </div> 8191 <div class="page-card-actions"> 8192 <button class="btn btn-sm btn-primary btn-block btn-signup" 8193 type="submit">ثبت ÙØ§Ù </button> 8194 8195 <p class="text-center sign-up-message"> 8196 <a href="#login">ØØ³Ø§Ø¨ Ú©Ø§Ø±Ø¨Ø±Û Ø¯Ø§Ø±ÛØ¯Ø ÙØ§Ø±Ø¯ شدÙ</a> 8197 </p> 8198 </div> 8199</form></div> 8200 8201 </section> 8202 8203 <section class='for-forgot' style="display: none;"> 8204 8205 <div class="login-content page-card"> 8206 <form class="form-signin form-forgot hide" role="form"> 8207 <div class="page-card-head"> 8208 <h4>ر٠ز Ø¹Ø¨ÙØ± را ÙØ±Ø§Ù ÙØ´ Ú©Ø±Ø¯Ù Ø§ÛØ¯</h4> 8209 </div> 8210 <div class="page-card-body"> 8211 8212 8213 8214 <div class="mobile-field"> 8215 <input type="text" id="forgot_mobile" class="form-control" placeholder="09*********" 8216 required autofocus autocomplete="username"> 8217 8218 </div> 8219 8220 8221 </div> 8222 <div class="page-card-actions"> 8223 <button class="btn btn-sm btn-primary btn-block btn-forgot" type="submit">Ø¨Ø§Ø²ÙØ´Ø§ÙÛ Ø±Ù Ø² Ø¹Ø¨ÙØ±</button> 8224 <p class="text-center verification-mail"> 8225 8226 </p> 8227 <p class="text-center sign-up-message"> 8228 <a href="#login">بازگشت Ø¨Ù ØµÙØÙ ÙØ±Ùد</a> 8229 </p> 8230 </div> 8231 8232 </form> 8233 </div> 8234 </section> 8235 8236 <section class='for-login-with-email-link'> 8237 <div class="login-content page-card"> 8238 <form class="form-signin form-login-with-email-link hide" role="form"> 8239 <div class="page-card-head"> 8240 <h4>با ÙÛÙÚ© اÛÙ ÛÙ ÙØ§Ø±Ø¯ Ø´ÙÛØ¯</h4>
8241 </div> 8242 <div class="page-card-body"> 8243 <div class="email-field"> 8244 <input type="email" id="login_with_email_link_email" class="form-control" 8245 placeholder="آدرس اÛÙ ÛÙ" required autofocus autocomplete="username"> 8246 <svg class="field-icon email-icon" width="20" height="20" viewBox="0 0 20 20" fill="none" 8247 xmlns="http://www.w3.org/2000/svg"> 8248 <path 8249 d="M2.5 7.65149V15.0757C2.5 15.4374 2.64367 15.7842 2.8994 16.04C3.15513 16.2957 3.50198 16.4394 3.86364 16.4394H16.1364C16.498 16.4394 16.8449 16.2957 17.1006 16.04C17.3563 15.7842 17.5 15.4374 17.5 15.0757V7.65149" 8250 stroke="#74808B" stroke-miterlimit="10" stroke-linecap="square" /> 8251 <path 8252 d="M17.5 7.57572V5.53026C17.5 5.1686 17.3563 4.82176 17.1006 4.56603C16.8449 4.31029 16.498 4.16663 16.1364 4.16663H3.86364C3.50198 4.16663 3.15513 4.31029 2.8994 4.56603C2.64367 4.82176 2.5 5.1686 2.5 5.53026V7.57572L10 10.8333L17.5 7.57572Z" 8253 stroke="#74808B" stroke-miterlimit="10" stroke-linecap="square" /> 8254 </svg> 8255 </div> 8256 </div> 8257 <div class="page-card-actions"> 8258 <button class="btn btn-sm btn-primary btn-block btn-login-with-email-link" type="submit">ارسا٠ÙÛÙÚ© ÙØ±Ùد</button> 8259 <p class="text-center sign-up-message"> 8260 <a href="#login">بازگشت Ø¨Ù ØµÙØÙ ÙØ±Ùد</a> 8261 </p> 8262 </div> 8263 </form> 8264 </div> 8265 </section> 8266 8267</div> 8268 8269
8270<script> 8271 window.system_settings = { 8272 allow_easy_login_with_email: 0 8273 }; 8274 window.get_name_at_sign_up = false; 8275</script>
8275 8276</div> 8277 8278 <div class="page-footer"></div> 8279 </main> 8280 8281</div> 8282 8283</div> 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314<style> 8315 8316 .sk-footer { 8317 --sk-brand: #25468F; 8318 --sk-brand-soft: #e8f8ff; 8319 --sk-ink: #212121; 8320 --sk-muted-fg: rgba(255, 255, 255, 0.72); 8321 --sk-border: rgba(255, 255, 255, 0.18); 8322 --sk-radius: 0.5rem; 8323 8324 margin-top: 4rem; 8325 border-top: 1px solid var(--sk-border); 8326 background-color: var(--sk-brand); 8327 background-size: cover; 8328 background-position: center; 8329 color: #ffffff; 8330 direction: rtl; 8331 text-align: right; 8332 } 8333 8334 .sk-footer *, 8335 .sk-footer *::before, 8336 .sk-footer *::after { 8337 box-sizing: border-box; 8338 } 8339 8340 .sk-footer a { 8341 transition: color 0.15s ease; 8342 } 8343 8344 .sk-footer h1, 8345 .sk-footer h2, 8346 .sk-footer h3, 8347 .sk-footer h4, 8348 .sk-footer h5, 8349 .sk-footer h6 { 8350 color: #ffffff; 8351 font-family: inherit; 8352 } 8353 8354 .sk-footer__container { 8355 width: 100%; 8356 max-width: 1280px; 8357 margin-inline: auto; 8358 padding-left: 1rem; 8359 padding-right: 1rem; 8360 } 8361 8362 .sk-footer__main { 8363 display: grid; 8364 grid-template-columns: 1fr; 8365 gap: 0; 8366 padding-top: 1.5rem; 8367 padding-bottom: 1.5rem; 8368 } 8369 8370 @media (min-width: 768px) { 8371 .sk-footer__main { 8372 grid-template-columns: repeat(4, minmax(0, 1fr)); 8373 gap: 2rem; 8374 padding-top: 2.5rem; 8375 padding-bottom: 2.5rem; 8376 } 8377 } 8378 8379 .sk-footer__col { 8380 min-width: 0; 8381 } 8382 8383 .sk-footer__logo { 8384 display: block; 8385 height: 36px; 8386 width: auto; 8387 margin-bottom: 0.75rem; 8388 filter: brightness(0) invert(1); 8389 } 8390 8391 .sk-footer__meta { 8392 margin-top: 0.75rem; 8393 display: flex; 8394 flex-direction: column; 8395 gap: 0.25rem; 8396 } 8397 8398 .sk-footer__meta-row { 8399 display: flex; 8400 align-items: flex-start; 8401 gap: 0.5rem; 8402 font-size: 0.875rem; 8403 line-height: 1.6; 8404 color: #ffffff; 8405 } 8406 8407 .sk-footer__meta-row i { 8408 color: rgba(255, 255, 255, 0.9); 8409 margin-top: 0.15rem; 8410 flex-shrink: 0; 8411 font-size: 1rem; 8412 line-height: 1; 8413 } 8414 8415 .sk-footer__address { 8416 font-size: inherit; 8417 line-height: inherit; 8418 color: inherit; 8419 } 8420 8421 .sk-footer__address p { 8422 margin: 0; 8423 color: inherit; 8424 } 8425 8426 .sk-footer__address a { 8427 color: var(--sk-brand-soft); 8428 } 8429 8430 /* âââ Accordion drawers (mobile) âââ */ 8431 .sk-footer__drawer { 8432 border: 0; 8433 border-bottom: 1px solid var(--sk-border); 8434 margin: 0; 8435 padding: 0; 8436 } 8437 8438 .sk-footer__main > .sk-footer__drawer:last-child { 8439 border-bottom: 0; 8440 } 8441 8442 .sk-footer__drawer > summary { 8443 list-style: none; 8444 display: flex; 8445 align-items: center; 8446 justify-content: space-between; 8447 gap: 0.75rem; 8448 margin: 0; 8449 padding: 0.875rem 0; 8450 font-size: 0.875rem; 8451 font-weight: 700; 8452 line-height: 1.4; 8453 color: #ffffff; 8454 cursor: pointer; 8455 user-select: none; 8456 } 8457 8458 .sk-footer__drawer > summary::-webkit-details-marker { 8459 display: none; 8460 } 8461 8462 /* Chevron: closed â down, open â up (physical borders, no RTL flip) */ 8463 .sk-footer__drawer > summary::after { 8464 content: ""; 8465 width: 0.5rem; 8466 height: 0.5rem; 8467 border-right: 2px solid rgba(255, 255, 255, 0.9); 8468 border-bottom: 2px solid rgba(255, 255, 255, 0.9); 8469 transform: rotate(45deg); 8470 transition: transform 0.2s ease; 8471 flex-shrink: 0; 8472 margin-top: -0.2rem; 8473 } 8474 8475 .sk-footer__drawer[open] > summary::after { 8476 transform: rotate(225deg); 8477 margin-top: 0.2rem; 8478 } 8479 8480 .sk-footer__drawer-body { 8481 padding: 0 0 0.875rem; 8482 } 8483 8484 .sk-footer__heading { 8485 margin: 0 0 0.75rem; 8486 font-size: 0.875rem; 8487 font-weight: 700; 8488 line-height: 1.4; 8489 color: #ffffff; 8490 } 8491 8492 .sk-footer__links { 8493 list-style: none; 8494 margin: 0; 8495 padding: 0; 8496 } 8497 8498 .sk-footer__links li + li { 8499 margin-top: 0.5rem; 8500 } 8501 8502 .sk-footer__links a { 8503 display: inline-block; 8504 font-size: 0.875rem; 8505 font-weight: 400; 8506 line-height: 1.5; 8507 color: var(--sk-muted-fg); 8508 text-decoration: none; 8509 } 8510 8511 .sk-footer__links a:hover, 8512 .sk-footer__links a:focus { 8513 color: #ffffff; 8514 text-decoration: none; 8515 } 8516 8517 .sk-footer__newsletter-text { 8518 margin: 0 0 0.75rem !important; 8519 font-size: 0.875rem; 8520 line-height: 1.7; 8521 color: var(--sk-muted-fg); 8522 } 8523 8524 .sk-footer__newsletter-form { 8525 display: flex; 8526 flex-direction: row; 8527 flex-wrap: nowrap; 8528 align-items: stretch; 8529 gap: 0.5rem; 8530 direction: rtl; 8531 } 8532 8533 .sk-footer__newsletter-form input { 8534 flex: 1 1 auto; 8535 min-width: 0; 8536 width: 100%; 8537 border: 1px solid rgba(255, 255, 255, 0.35); 8538 border-radius: var(--sk-radius); 8539 background: rgba(255, 255, 255, 0.12); 8540 color: #ffffff; 8541 padding: 0.5rem 0.75rem; 8542 font-size: 0.875rem; 8543 line-height: 1.4; 8544 outline: none; 8545 font-family: inherit; 8546 text-align: right; 8547 } 8548 8549 .sk-footer__newsletter-form input::placeholder { 8550 color: rgba(255, 255, 255, 0.65); 8551 } 8552 8553 .sk-footer__newsletter-form input:focus { 8554 border-color: #ffffff; 8555 box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.2); 8556 } 8557 8558 .sk-footer__newsletter-form button { 8559 flex: 0 0 auto; 8560 border: 0; 8561 border-radius: var(--sk-radius); 8562 background: #ffffff; 8563 color: var(--sk-brand); 8564 font-size: 0.875rem; 8565 font-weight: 700; 8566 padding: 0.5rem 1rem; 8567 cursor: pointer; 8568 white-space: nowrap; 8569 font-family: inherit; 8570 line-height: 1.4; 8571 } 8572 8573 .sk-footer__newsletter-form button:hover, 8574 .sk-footer__newsletter-form button:focus { 8575 opacity: 0.95; 8576 outline: none; 8577 } 8578 8579 .sk-footer__social { 8580 margin-top: 1rem; 8581 display: flex; 8582 flex-wrap: wrap; 8583 align-items: center; 8584 gap: 0.5rem; 8585 } 8586 8587 .sk-footer__social a { 8588 display: inline-flex; 8589 align-items: center; 8590 justify-content: center; 8591 width: 36px; 8592 height: 36px; 8593 padding: 0.5rem; 8594 border: 1px solid var(--sk-border); 8595 border-radius: var(--sk-radius); 8596 color: #ffffff; 8597 text-decoration: none; 8598 overflow: hidden; 8599 } 8600 8601 .sk-footer__social a:hover, 8602 .sk-footer__social a:focus { 8603 color: var(--sk-brand); 8604 background: #ffffff; 8605 border-color: #ffffff; 8606 text-decoration: none; 8607 } 8608 8609 .sk-footer__social img { 8610 width: 16px; 8611 height: 16px; 8612 object-fit: contain; 8613 } 8614 8615 .sk-footer__social a:hover img { 8616 filter: none; 8617 } 8618 8619 .sk-footer__social i { 8620 font-size: 1rem; 8621 line-height: 1; 8622 } 8623 8624 .sk-footer__bottom { 8625 border-top: 1px solid var(--sk-border); 8626 } 8627 8628 .sk-footer__bottom-inner { 8629 display: flex; 8630 flex-direction: column; 8631 align-items: center; 8632 justify-content: space-between; 8633 gap: 0.5rem; 8634 padding-top: 1rem; 8635 padding-bottom: 1rem; 8636 font-size: 12px; 8637 line-height: 1.6; 8638 color: var(--sk-muted-fg); 8639 text-align: center; 8640 } 8641 8642 @media (min-width: 768px) { 8643 .sk-footer__bottom-inner { 8644 flex-direction: row; 8645 text-align: right; 8646 } 8647 8648 /* Desktop: drawers always open, no accordion chrome */ 8649 .sk-footer__drawer { 8650 border-bottom: 0; 8651 } 8652 8653 .sk-footer__drawer > summary { 8654 pointer-events: none; 8655 padding: 0 0 0.75rem; 8656 cursor: default; 8657 } 8658 8659 .sk-footer__drawer > summary::after { 8660 display: none; 8661 } 8662
8663 .sk-footer__drawer-body { 8664 padding: 0; 8665 } 8666 } 8667 8668 .sk-footer__bottom a { 8669 color: var(--sk-muted-fg); 8670 text-decoration: none; 8671 } 8672 8673 .sk-footer__bottom a:hover { 8674 color: #ffffff; 8675 text-decoration: none; 8676 } 8677</style> 8678 8679<footer 8680 class="sk-footer" 8681 dir="rtl" 8682 data-component="rodin_footer_sk" 8683 > 8684 <div class="sk-footer__container sk-footer__main"> 8685 8686 <div class="sk-footer__col sk-footer__brand"> 8687 <a href="/" aria-label="ÙÙÚ¯Ù"> 8688 <img class="sk-footer__logo" src="/files/download.svg" alt="ÙÙÚ¯Ù" /> 8689 </a> 8690 <div class="sk-footer__meta"> 8691 8692 <div class="sk-footer__meta-row"> 8693 <div class="sk-footer__address"><a href="https://trustseal.enamad.ir/?id=602137&Code=ev8N46JxjOVs3VO0LLNxHFBTM7wt4i7P" target="_blank"><img alt="" src="https://trustseal.enamad.ir/logo.aspx?id=602137&Code=ev8N46JxjOVs3VO0LLNxHFBTM7wt4i7P" style="cursor: pointer;"></a></div> 8694 </div> 8695 8696 </div> 8697 </div> 8698 8699 8700 8701 8702 <details class="sk-footer__col sk-footer__drawer" open> 8703 <summary>آدرس</summary> 8704 <div class="sk-footer__drawer-body"> 8705 <ul class="sk-footer__links"> 8706 8707 <li> 8708 <a href="https://maps.app.goo.gl/8z9a8u5J2pd1qx5n7" > 8709 ØªÙØ±Ø§ÙØ Ø®ÛØ§Ø¨Ø§Ù دکتر Ø´Ø±ÛØ¹ØªÛØ Ø¨Ø§ÙØ§ØªØ± از Ù Ø·ÙØ±ÛØ ÙØ¨Ø´ Ú©ÙÚÙ Ú©ÙØ§ØªÙ 8710 </a> 8711 </li> 8712 8713 </ul> 8714 </div> 8715 </details> 8716 8717 <details class="sk-footer__col sk-footer__drawer" open> 8718 <summary>Ù¾Ø´ØªÛØ¨Ø§ÙÛ</summary> 8719 <div class="sk-footer__drawer-body"> 8720 <ul class="sk-footer__links"> 8721 8722 <li> 8723 <a href="/contact" > 8724 ت٠اس با ٠ا 8725 </a> 8726 </li> 8727 8728 <li> 8729 <a href="/contact" > 8730 Ø±ÙØ²ÙØ§Û Ú©Ø§Ø±Û Ø§Ø² ساعت 9 تا 17 پاسخâÚ¯ÙÛ Ø´Ù Ø§ ÙØ³ØªÛÙ 8731 </a> 8732 </li> 8733 8734 <li> 8735 <a href="tel:02192001408" > 8736 02192001408 8737 </a> 8738 </li> 8739 8740 </ul> 8741 </div> 8742 </details> 8743 8744 8745 8746 8747 8748 <details class="sk-footer__col sk-footer__drawer sk-footer__newsletter" open> 8749 8750 <summary> 8751 Ø®Ø¨Ø±ÙØ§Ù Ù 8752 </summary> 8753 <div class="sk-footer__drawer-body"> 8754 <p class="sk-footer__newsletter-text"> 8755 8756 Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت تازÙâÙØ§ Ù Ù¾ÛØ´ÙÙØ§Ø¯ÙØ§Û ÙÛÚ٠در Ø®Ø¨Ø±ÙØ§Ù ٠عض٠شÙÛØ¯. 8757 8758 </p> 8759 <div class="sk-footer__newsletter-form"> 8760 <input 8761 type="email" 8762 id="subscribe-email" 8763 placeholder="اÛÙ Û٠ش٠ا" 8764 aria-label="اÛÙ Û٠ش٠ا" 8765 autocomplete="email" /> 8766 <button type="button" id="subscribe-button">عضÙÛØª</button> 8767 </div> 8768 <div class="sk-footer__social"> 8769 8770 8771 <a href="https://www.instagram.com/online.bookcity/?hl=en" rel="noreferrer" aria-label="اÛÙØ³ØªØ§Ú¯Ø±Ø§Ù "> 8772 8773 <img src="/files/Instagram_logo_2016.svg" alt="اÛÙØ³ØªØ§Ú¯Ø±Ø§Ù " /> 8774 8775 </a> 8776 8777 <a href="https://t.me/Online_Bookcity" rel="noreferrer" aria-label="تÙگرا٠"> 8778 8779 <img src="/files/Telegram_logo.svg" alt="تÙگرا٠" /> 8780 8781 </a> 8782 8783 <a href="http://ble.ir/onlinebookcity" rel="noreferrer" aria-label="بÙÙ"> 8784 8785 <img src="/files/-67955373788714bb085.jpg" alt="بÙÙ" /> 8786 8787 </a> 8788 8789 8790 </div> 8791 </div> 8792 8793 </details> 8794 </div> 8795 8796 <div class="sk-footer__bottom"> 8797 <div class="sk-footer__container sk-footer__bottom-inner"> 8798 <span> 8799 8800 © ØªÙ Ø§Ù Û ØÙÙ٠اÛÙ ÙØ¨âØ³Ø§ÛØª Ù ØÙÙØ¸ است. 8801 8802 </span> 8803 <span> 8804 8805 طراØÛ Ù ØªÙØ³Ø¹Ù با Rodin365 8806 8807 </span> 8808 </div> 8809 </div> 8810</footer> 8811
8812<script> 8813(function () { 8814 function skFooterMobileDrawers() { 8815 var root = document.querySelector('.sk-footer[data-component="rodin_footer_sk"]'); 8816 if (!root) return; 8817 var isMobile = window.matchMedia("(max-width: 767px)").matches; 8818 root.querySelectorAll(".sk-footer__drawer").forEach(function (el) { 8819 if (isMobile) { 8820 el.removeAttribute("open"); 8821 } else { 8822 el.setAttribute("open", ""); 8823 } 8824 }); 8825 } 8826 skFooterMobileDrawers(); 8827 window.addEventListener("resize", skFooterMobileDrawers); 8828})(); 8829</script>
8829 8830 8831
8832<script src="/assets/erpnext/js/subscribe.js?v=1.1.0"></script>
8832 8833 8834 8835 <!-- js should be loaded in body! --> 8836
8836<script> 8837 frappe.boot = {'sysdefaults': {'float_precision': 3, 'date_format': 'yyyy-mm-dd', 'time_format': 'HH:mm:ss'}, 'time_zone': {'system': 'Asia/Tehran', 'user': 'Asia/Kolkata'}} 8838 // for backward compatibility of some libs 8839 frappe.sys_defaults = frappe.boot.sysdefaults; 8840 frappe._messages = frappe.boot["__messages"] || {}; 8841 window.__ = frappe._; 8842 </script>
8842 8843
8843<script type="text/javascript" src="/assets/frappe/dist/js/frappe-web.bundle.SI6CYMX2.js"></script>
8843 8844 8845
8845<script type="text/javascript" src="/website_script.js"></script>
8845 8846
8846<script type="text/javascript" src="/assets/frappe/js/portal_field_validation.js?v=20260715b"></script>
8846 8847
8847<script type="text/javascript" src="/assets/frappe/js/person_name_validation.js"></script>
8847 8848
8848<script type="text/javascript" src="/assets/erpnext/dist/js/erpnext-web.bundle.IO24HLWL.js"></script>
8848 8849
8849<script type="text/javascript" src="/assets/erpnext/dist/js/components.bundle.GDKTY5AX.js"></script>
8849 8850
8850<script type="text/javascript" src="/assets/erpnext/js/persian-date.js"></script>
8850 8851
8851<script type="text/javascript" src="/assets/erpnext/js/persian-datepicker.js"></script>
8851 8852
8852<script type="text/javascript" src="/assets/erpnext/js/jalaali.js"></script>
8852 8853
8853<script type="text/javascript" src="/assets/erpnext/js/persian_read_only.js"></script>
8853 8854
8854<script type="text/javascript" src="/assets/erpnext/js/persian_js_class.js"></script>
8854 8855
8855<script type="text/javascript" src="/assets/erpnext/js/beauty_banner.js?v=1.0.1"></script>
8855 8856
8856<script type="text/javascript" src="/assets/erpnext/js/blog_post_swiper.js?v=1.0.0"></script>
8856 8857
8857<script type="text/javascript" src="/assets/erpnext/js/customer_reviews_rodin.js?v=1.0.0"></script>
8857 8858
8858<script type="text/javascript" src="/assets/erpnext/js/engraving_gallery_swiper_section.js?v=1.0.0"></script>
8858 8859
8859<script type="text/javascript" src="/assets/erpnext/js/item_brand_card_group.js?v=1.0.2"></script>
8859 8860
8860<script type="text/javascript" src="/assets/erpnext/js/mega_nav_4.js?v=1.0.6"></script>
8860 8861
8861<script type="text/javascript" src="/assets/erpnext/js/publishers_section_swiper.js?v=1.0.0"></script>
8861 8862
8862<script type="text/javascript" src="/assets/erpnext/js/subscribe.js?v=1.1.0"></script>
8862 8863
8863<script type="text/javascript" src="/assets/erpnext/js/sub_bs.js?v=1.1.0"></script>
8863 8864
8864<script type="text/javascript" src="/assets/erpnext/js/swipper_group.js?v=1.0.1"></script>
8864 8865
8865<script type="text/javascript" src="/assets/erpnext/js/glightbox.js?v=1.0.0"></script>
8865 8866
8866<script type="text/javascript" src="/assets/erpnext/js/isotope.js?v=1.0.0"></script>
8866 8867
8867<script type="text/javascript" src="/assets/erpnext/js/imagesloaded.js?v=1.0.0"></script>
8867 8868
8868<script type="text/javascript" src="/assets/erpnext/js/rodin_slider.js?v=1.0.52"></script>
8868 8869
8869<script type="text/javascript" src="/assets/erpnext/js/pdf/pdf.js"></script>
8869 8870
8870<script type="text/javascript" src="/assets/erpnext/js/pdf/pdf.worker.js"></script>
8870 8871
8871<script type="text/javascript" src="/assets/rodin_services/js/rodin_navbar_cart_sync.js?v=1.0.0"></script>
8871 8872
8872<script type="text/javascript" src="/assets/rodin_services/js/r365_website_session.js?v=1.3"></script>
vendor: 1 bytes, line 8872
8872
8873<script>// Helper functions for loader 8874function showLoader(loaderId, text) { 8875 const loader = document.getElementById(loaderId); 8876 if (loader) { 8877 if (text) { 8878 const textElement = loader.querySelector('.loader-text'); 8879 if (textElement) { 8880 textElement.textContent = text; 8881 } 8882 } 8883 loader.classList.add('active'); 8884 // Add loading class to page-card to disable inputs 8885 const pageCard = loader.closest('.page-card'); 8886 if (pageCard) { 8887 pageCard.classList.add('loading'); 8888 } 8889 } 8890} 8891 8892function hideLoader(loaderId) { 8893 const loader = document.getElementById(loaderId); 8894 if (loader) { 8895 loader.classList.remove('active'); 8896 // Remove loading class from page-card 8897 const pageCard = loader.closest('.page-card'); 8898 if (pageCard) { 8899 pageCard.classList.remove('loading'); 8900 } 8901 } 8902} 8903 8904// login.js 8905 8906window.disable_signup = false; 8907 8908window.login = {}; 8909 8910window.verify = {}; 8911 8912function person_name_validation_message(result) { 8913 if (!result || result.ok) { 8914 return null; 8915 } 8916 if (result.message) { 8917 return result.message; 8918 } 8919 switch (result.reason) { 8920 case "empty": 8921 return 'ÙØ·Ùا ÙØ§Ù Ø®ÙØ¯ را ÙØ§Ø±Ø¯ Ú©ÙÛØ¯'; 8922 case "first": 8923 return 'ÙØ§Ù ÙÙ Û ØªÙØ§Ùد شا٠٠عدد ÛØ§ ستار٠(*) باشد'; 8924 case "last": 8925 return 'ÙØ§Ù خاÙÙØ§Ø¯Ú¯Û ÙÙ Û ØªÙØ§Ùد شا٠٠عدد ÛØ§ ستار٠(*) باشد'; 8926 default: 8927 return 'Please enter a valid name.'; 8928 } 8929} 8930 8931const LOGIN_PENDING_NAME_KEY = "login_pending_full_name"; 8932 8933function setLoginNameFieldVisible(visible) { 8934 const group = document.getElementById("login-name-field-group"); 8935 const input = document.getElementById("login_name"); 8936 if (!group || !input) { 8937 return; 8938 } 8939 group.style.display = visible ? "block" : "none"; 8940 if (visible) { 8941 input.setAttribute("required", "required"); 8942 bindLoginNameInputFilter(); 8943 } else { 8944 input.removeAttribute("required"); 8945 input.value = ""; 8946 } 8947} 8948 8949function isLoginNameRequired() { 8950 return window.get_name_at_sign_up; 8951} 8952 8953function isLoginNameFieldVisible() { 8954 return $("#login-name-field-group").is(":visible"); 8955} 8956 8957function normalizeLoginFullName(rawName) { 8958 let full_name = frappe.utils.xss_sanitise((rawName || "").trim()); 8959 if (!full_name) { 8960 return { ok: false, full_name: "" }; 8961 } 8962 const nameCheck = 8963 window.frappe_validate_person_name && 8964 window.frappe_validate_person_name.checkSignupFullName(full_name); 8965 if (nameCheck && !nameCheck.ok) { 8966 return { ok: false, full_name: "", message: person_name_validation_message(nameCheck) }; 8967 } 8968 if (nameCheck && nameCheck.ok && nameCheck.normalized) { 8969 full_name = frappe.utils.xss_sanitise(nameCheck.normalized); 8970 } 8971 return { ok: true, full_name }; 8972} 8973 8974function storePendingLoginName(fullName) { 8975 if (fullName) { 8976 sessionStorage.setItem(LOGIN_PENDING_NAME_KEY, fullName); 8977 } else { 8978 sessionStorage.removeItem(LOGIN_PENDING_NAME_KEY); 8979 } 8980} 8981 8982function getPendingLoginName() { 8983 return sessionStorage.getItem(LOGIN_PENDING_NAME_KEY) || ""; 8984} 8985 8986function resolveLoginFullName(mobileNo) { 8987 if (!window.get_name_at_sign_up) { 8988 return { ok: true, full_name: mobileNo }; 8989 } 8990 if (!isLoginNameFieldVisible()) { 8991 return { ok: true, full_name: "" }; 8992 } 8993 return normalizeLoginFullName($("#login_name").val()); 8994} 8995 8996function updateLoginNameForMobile() { 8997 if (!window.get_name_at_sign_up) { 8998 return; 8999 } 9000 const mobile = frappe.utils.xss_sanitise(($("#login_mobile").val() || "").trim()); 9001 const mobileNo = check_digits_ascii(mobile); 9002 const regex = /^09\d{9}$/; 9003 if (!regex.test(mobileNo)) { 9004 setLoginNameFieldVisible(true); 9005 return; 9006 } 9007 frappe.call({ 9008 method: "frappe.core.doctype.user.user.check_got_name", 9009 args: { user: mobileNo }, 9010 callback: function (response) { 9011 setLoginNameFieldVisible(!!response.message); 9012 }, 9013 }); 9014} 9015 9016function loginNameCharIsDigit(ch) { 9017 try { 9018 return /\p{Nd}/u.test(ch); 9019 } catch (e) { 9020 var code = ch.charCodeAt(0); 9021 return ( 9022 (code >= 48 && code <= 57) || 9023 (code >= 0x06f0 && code <= 0x06f9) || 9024 (code >= 0x0660 && code <= 0x0669) 9025 ); 9026 } 9027} 9028 9029function loginNameCharIsLetter(ch) { 9030 try { 9031 return /\p{L}/u.test(ch); 9032 } catch (e) { 9033 return /[A-Za-z\u0600-\u06FF]/.test(ch); 9034 } 9035} 9036 9037function filterLoginNameInput(raw) { 9038 var s = raw == null ? "" : String(raw); 9039 var out = ""; 9040 for (var i = 0; i < s.length; i++) { 9041 var ch = s[i]; 9042 if (/\s/u.test(ch) || ch === "\u200c") { 9043 out += ch; 9044 continue; 9045 } 9046 if (loginNameCharIsDigit(ch) || ch === "*") { 9047 continue; 9048 } 9049 if (loginNameCharIsLetter(ch)) { 9050 out += ch; 9051 } 9052 } 9053 return out; 9054} 9055 9056function bindLoginNameInputFilter() { 9057 var el = document.getElementById("login_name"); 9058 if (!el || el.__loginNameInputBound) { 9059 return; 9060 } 9061 el.__loginNameInputBound = true; 9062 9063 function applyFilter() { 9064 var filtered = filterLoginNameInput(el.value); 9065 if (filtered !== el.value) { 9066 var pos = el.selectionStart; 9067 var newPos = 9068 typeof pos === "number" 9069 ? Math.min(filterLoginNameInput(el.value.slice(0, pos)).length, filtered.length) 9070 : filtered.length; 9071 el.value = filtered; 9072 try { 9073 el.setSelectionRange(newPos, newPos); 9074 } catch (e) { 9075 /* ignore */ 9076 } 9077 } 9078 } 9079 9080 el.addEventListener("input", applyFilter); 9081 el.addEventListener("keydown", function (e) { 9082 if (e.ctrlKey || e.metaKey || e.altKey) { 9083 return; 9084 } 9085 if ( 9086 e.key === "Backspace" || 9087 e.key === "Delete" || 9088 e.key === "Tab" || 9089 e.key === "Enter" || 9090 e.key.indexOf("Arrow") === 0 9091 ) { 9092 return; 9093 } 9094 if (e.key && e.key.length === 1 && !filterLoginNameInput(e.key)) { 9095 e.preventDefault(); 9096 } 9097 }); 9098 el.addEventListener("paste", function (e) { 9099 e.preventDefault(); 9100 var pasted = (e.clipboardData || window.clipboardData).getData("text"); 9101 var start = el.selectionStart == null ? el.value.length : el.selectionStart; 9102 var end = el.selectionEnd == null ? start : el.selectionEnd; 9103 var merged = el.value.slice(0, start) + pasted + el.value.slice(end); 9104 el.value = filterLoginNameInput(merged); 9105 var newPos = filterLoginNameInput(el.value.slice(0, start) + pasted).length; 9106 try { 9107 el.setSelectionRange(newPos, newPos); 9108 } catch (err) { 9109 /* ignore */ 9110 } 9111 }); 9112} 9113 9114function initLoginNameField() { 9115 if (!window.get_name_at_sign_up) { 9116 setLoginNameFieldVisible(false); 9117 return; 9118 } 9119 setLoginNameFieldVisible(true); 9120 $("#login_mobile").off("blur.loginName").on("blur.loginName", updateLoginNameForMobile); 9121} 9122 9123login.bind_events = function () { 9124 $(window).on("hashchange", function () { 9125 login.route(); 9126 }); 9127 9128 9129 $(".form-login").on("submit", function (event) { 9130 9131 event.preventDefault(); 9132 const password = $("#login_password").val(); 9133 const user = frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()); 9134 const mobile = frappe.utils.xss_sanitise(($("#login_mobile").val() || "").trim()); 9135 9136 // Check if we're in password login mode 9137 const isPasswordMode = $('#email-field-group').is(':visible') && $('#password-field-group').is(':visible'); 9138 9139 // If in password mode, validate email and password 9140 if (isPasswordMode) { 9141 if (!user) { 9142 frappe.msgprint('ÙØ·Ùا Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ ÛØ§ اÛÙ Û٠را ÙØ§Ø±Ø¯ Ú©ÙÛØ¯'); 9143 return false;
9144 } 9145 if (!password) { 9146 frappe.msgprint('ÙØ·Ùا ر٠ز Ø¹Ø¨ÙØ± را ÙØ§Ø±Ø¯ Ú©ÙÛØ¯'); 9147 return false; 9148 } 9149 // Show loader for password login 9150 showLoader('loginLoader', 'در ØØ§Ù ÙØ±Ùد...'); 9151 9152 // Continue with normal login flow for password mode 9153 var args = {}; 9154 args.cmd = "login"; 9155 args.usr = check_digits_ascii(user); 9156 args.pwd = check_digits_ascii(password); 9157 args.staff = $("#staff").is(":checked"); 9158 args.device = "desktop"; 9159 9160 login.call(args).then(() => { 9161 hideLoader('loginLoader'); 9162 }).catch(() => { 9163 hideLoader('loginLoader'); 9164 }); 9165 return false; 9166 } 9167 9168 // OTP login mode - validate mobile number BEFORE making API call 9169 if (!mobile || mobile.trim() === '') { 9170 frappe.msgprint('ÙØ·Ùا ÛÚ© Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§Û٠٠عتبر ÙØ§Ø±Ø¯ Ù٠اÛÛØ¯'); 9171 return false; 9172 } 9173 9174 var args = {}; 9175 args.mobile_no = check_digits_ascii(mobile); 9176 const regex = /^09\d{9}$/; 9177 const email_regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ 9178 if (!regex.test(args.mobile_no) && !email_regex.test(args.mobile_no)) { 9179 frappe.msgprint('Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§Û٠٠عتبر ÙÛØ³Øª'); 9180 return false; 9181 } 9182 9183 let allow_email_login = window.system_settings && window.system_settings.allow_easy_login_with_email; 9184 if (email_regex.test(args.mobile_no) && !allow_email_login) { 9185 frappe.msgprint('Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§Û٠٠عتبر ÙÛØ³Øª'); 9186 return false; 9187 } 9188 9189 // Show loader 9190 showLoader('loginLoader', 'در ØØ§Ù ارسا٠کد...'); 9191 9192 let button = document.getElementById("loginButton"); 9193 if (button) { 9194 button.disabled = true; 9195 } 9196 9197 args.cmd = "login"; 9198 args.staff = $("#staff").is(":checked"); 9199 args.device = "desktop"; 9200 9201 // Only set usr and pwd if we're in password mode (they should be empty for OTP mode) 9202 // We already checked isPasswordMode above, so if we reach here, we're in OTP mode 9203 args.usr = ""; 9204 args.pwd = ""; 9205 9206 const nameResult = resolveLoginFullName(args.mobile_no); 9207 if (!nameResult.ok) { 9208 hideLoader("loginLoader"); 9209 if (button) { 9210 button.disabled = false; 9211 } 9212 frappe.msgprint(nameResult.message || 'ÙØ·Ùا ÙØ§Ù Ø®ÙØ¯ را ÙØ§Ø±Ø¯ Ú©ÙÛØ¯'); 9213 return false; 9214 } 9215 9216 const full_name = nameResult.full_name; 9217 args.name = full_name; 9218 args.get_name = window.get_name_at_sign_up; 9219 args.full_name = full_name; 9220 storePendingLoginName(full_name); 9221 9222 // Send OTP and show OTP page 9223 args.email = frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()); 9224 args.cmd = "frappe.core.doctype.user.user.login_sign_up_mobile"; 9225 args.redirect_to = ""; 9226 9227 frappe.call({ 9228 type: "POST", 9229 method: "frappe.core.doctype.user.user.login_sign_up_mobile", 9230 args: args, 9231 callback: function(r) { 9232 hideLoader('loginLoader'); 9233 if (button) { 9234 button.disabled = false; 9235 } 9236 if (r && r.exc) { 9237 frappe.msgprint(r.exc); 9238 return; 9239 } 9240 showOTPPage(args.mobile_no, full_name); 9241 if (r && r.message) { 9242 if (typeof r.message === 'object' && r.message.tmp_id) { 9243 document.cookie = "tmp_id=" + r.message.tmp_id; 9244 } else if (r.tmp_id) { 9245 document.cookie = "tmp_id=" + r.tmp_id; 9246 } 9247 } 9248 }, 9249 error: function(r) { 9250 hideLoader('loginLoader'); 9251 if (button) { 9252 button.disabled = false; 9253 } 9254 let message = 'خطا در ارسا٠کد. ÙØ·Ùا Ø¯ÙØ¨Ø§Ø±Ù ØªÙØ§Ø´ Ú©ÙÛØ¯.'; 9255 if (r && r.responseJSON && r.responseJSON._server_messages) { 9256 try { 9257 message = JSON.parse(r.responseJSON._server_messages || '[]').map(function(v) { 9258 try { 9259 return JSON.parse(v).message; 9260 } catch (e) { 9261 return v; 9262 } 9263 }).filter(Boolean).join('<br>') || message; 9264 } catch (e) { 9265 // use default message 9266 } 9267 } 9268 frappe.msgprint(message); 9269 } 9270 }); 9271 return false; 9272 }); 9273 9274 $(".form-signup").on("submit", function (event) { 9275 event.preventDefault(); 9276 var args = {}; 9277 args.cmd = "frappe.core.doctype.user.user.sign_up"; 9278 args.email = check_digits_ascii(($("#signup_email").val() || "").trim()); 9279 args.mobile_no = check_digits_ascii(($("#mobile_no").val() || "").trim()); 9280 args.redirect_to = frappe.utils.sanitise_redirect(frappe.utils.get_url_arg("redirect-to")); 9281 args.full_name = frappe.utils.xss_sanitise(($("#signup_fullname").val() || "").trim()); 9282 9283 var signupNameCheck = 9284 window.frappe_validate_person_name && 9285 window.frappe_validate_person_name.checkSignupFullName(args.full_name); 9286 if (signupNameCheck && !signupNameCheck.ok) {
9287 login.set_status(person_name_validation_message(signupNameCheck), "red"); 9288 return false; 9289 } 9290 if (signupNameCheck && signupNameCheck.ok && signupNameCheck.normalized) { 9291 args.full_name = frappe.utils.xss_sanitise(signupNameCheck.normalized); 9292 } 9293 9294 if (!args.mobile_no) { 9295 9296 if (!args.email || !validate_email(args.email) || !args.full_name) { 9297 login.set_status('اÛÙ ÛÙ Ù ÙØ§Ù ٠عتبر Ù ÙØ±Ø¯ ÙÛØ§Ø² است', 'red'); 9298 return false; 9299 } 9300 login.call(args); 9301 } 9302 else { 9303 if (!args.mobile_no || !args.full_name) { 9304 login.set_status('Valid mobile and name required', 'red'); 9305 return false; 9306 } 9307 const regex = /^09\d{9}$/; 9308 if (!regex.test(args.mobile_no)) { 9309 login.set_status('Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§Û٠٠عتبر ÙÛØ³Øª', 'red'); 9310 return false; 9311 } 9312 login.call(args); 9313 window.location.href = "/login#login"; 9314 9315 } 9316 9317 9318 return false; 9319 }); 9320 9321 $(".form-forgot").on("submit", function (event) { 9322 event.preventDefault(); 9323 var args = {}; 9324 args.cmd = "frappe.core.doctype.user.user.reset_password"; 9325 args.user = ($("#forgot_email").val() || "").trim(); 9326 args.mobile_no = ($("#forgot_mobile").val() || "").trim(); 9327 if (!args.mobile_no) { 9328 if (!args.user) { 9329 login.set_status('Ø´ÙØ§Ø³Ù ÙØ±Ùد ٠عتبر Ù ÙØ±Ø¯ ÙÛØ§Ø² است.', 'red'); 9330 return false; 9331 } 9332 login.call(args); 9333 return false; 9334 } 9335 else { 9336 if (!args.mobile_no) { 9337 9338 9339 9340 login.set_status('Valid mobile and name required', 'red'); 9341 return false; 9342 9343 9344 } 9345 const regex = /^09\d{9}$/; 9346 if (!regex.test(args.mobile_no)) { 9347 login.set_status('Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§Û٠٠عتبر ÙÛØ³Øª', 'red'); 9348 return false; 9349 } 9350 login.call(args); 9351 window.location.href = "/login#login"; 9352 9353 } 9354 9355 }); 9356 9357 $(".form-login-with-email-link").on("submit", function (event) { 9358 event.preventDefault(); 9359 var args = {}; 9360 args.cmd = "frappe.www.login.send_login_link"; 9361 args.email = ($("#login_with_email_link_email").val() || "").trim(); 9362 if (!args.email) { 9363 login.set_status('Ø´ÙØ§Ø³Ù ÙØ±Ùد ٠عتبر Ù ÙØ±Ø¯ ÙÛØ§Ø² است.', 'red'); 9364 return false; 9365 } 9366 login.call(args).then(() => { 9367 login.set_status('ÙÛÙÚ© ÙØ±Ùد ب٠اÛÙ Û٠ش٠ا ارسا٠شد', 'blue'); 9368 $("#login_with_email_link_email").val(""); 9369 }).catch(() => { 9370 login.set_status('ارسا٠ÙÛÙÚ© ÙØ±Ùد', 'blue'); 9371 }); 9372 9373 return false; 9374 }); 9375 9376 $(".toggle-password").click(function () { 9377 var input = $($(this).attr("toggle")); 9378 if (input.attr("type") == "password") { 9379 input.attr("type", "text"); 9380 $(this).text('Ù¾ÙÙØ§Ù کردÙ') 9381 } else { 9382 input.attr("type", "password"); 9383 $(this).text('ÙÙ Ø§ÛØ´ دÙÛØ¯') 9384 } 9385 }); 9386 9387 9388} 9389 9390 9391login.route = function () { 9392 var route = window.location.hash.slice(1); 9393 if (!route) route = "login"; 9394 route = route.replaceAll("-", "_"); 9395 login[route](); 9396} 9397 9398login.reset_sections = function (hide) { 9399 if (hide || hide === undefined) { 9400 $("section.for-login").toggle(false); 9401 $("section.for-email-login").toggle(false); 9402 $("section.for-forgot").toggle(false); 9403 $("section.for-login-with-email-link").toggle(false); 9404 $("section.for-signup").toggle(false); 9405 } 9406 $('section:not(.signup-disabled) .indicator').each(function () { 9407 $(this).removeClass().addClass('indicator').addClass('blue') 9408 .text($(this).attr('data-text')); 9409 }); 9410} 9411 9412login.login = function () { 9413 login.reset_sections(); 9414 $(".for-login").toggle(true); 9415} 9416 9417login.email = function () { 9418 login.reset_sections(); 9419 $(".for-email-login").toggle(true); 9420 $("#login_email").focus(); 9421} 9422 9423login.steptwo = function () { 9424 login.reset_sections(); 9425 $(".for-login").toggle(true); 9426 $("#login_email").focus(); 9427} 9428 9429login.forgot = function () { 9430 login.reset_sections(); 9431 if ($("#login_email").val()) { 9432 $("#forgot_email").val($("#login_email").val()); 9433 } 9434 $(".for-forgot").toggle(true); 9435 $("#forgot_email").focus(); 9436} 9437 9438login.login_with_email_link = function () { 9439 login.reset_sections(); 9440 if ($("#login_email").val()) { 9441 $("#login_with_email_link_email").val($("#login_email").val()); 9442 } 9443 $(".for-login-with-email-link").toggle(true); 9444 $("#login_with_email_link_email").focus(); 9445} 9446 9447login.signup = function () { 9448 login.reset_sections(); 9449 $(".for-signup").toggle(true); 9450 $("#signup_fullname").focus(); 9451} 9452 9453 9454// Login 9455login.call = function (args, callback) { 9456 // setTimeout(()=>{ 9457 9458 // login.set_status('در ØØ§Ù تأÛÛØ¯...', 'blue'); 9459 // }, "1000") 9460 if (!args.staff) { 9461 login.set_status('ÙØ±Ùد', 'green'); 9462 9463 } else { 9464 9465 login.set_status('در ØØ§Ù تأÛÛØ¯...', 'blue'); 9466 $('.verification-mail').text("Check your email please."); 9467 } 9468 9469 9470 9471 9472 return frappe.call({ 9473 type: "POST", 9474 args: args, 9475 callback: callback, 9476 freeze: true, 9477 statusCode: login.login_handlers 9478 }); 9479} 9480 9481login.set_status = function (message, color) { 9482 $('section:visible .btn-primary').text(message) 9483 if (color == "red") { 9484 $('section:visible .page-card-body').addClass("invalid"); 9485 } 9486} 9487 9488login.set_invalid = function (message) { 9489 $(".login-content.page-card").addClass('invalid-login'); 9490 setTimeout(() => { 9491 $(".login-content.page-card").removeClass('invalid-login'); 9492 }, 500) 9493 login.set_status(message, 'red'); 9494 $("#login_password").focus(); 9495} 9496 9497login.login_handlers = (function () { 9498 var get_error_handler = function (default_message) { 9499 return function (xhr, data) { 9500 if (xhr.responseJSON) { 9501 data = xhr.responseJSON; 9502 } 9503 9504 var message = default_message; 9505 if (data._server_messages) { 9506 message = ($.map(JSON.parse(data._server_messages || '[]'), function (v) { 9507 // temp fix for messages sent as dict 9508 try { 9509 return JSON.parse(v).message; 9510 } catch (e) { 9511 return v; 9512 } 9513 }) || []).join('<br>') || default_message; 9514 } 9515 9516 if (message === default_message) { 9517 login.set_invalid(message); 9518 } else { 9519 login.reset_sections(false); 9520 } 9521 9522 }; 9523 } 9524 9525 var login_handlers = { 9526 200: function (data) { 9527 if (data.message == 'Logged In') { 9528 storePendingLoginName(""); 9529 login.set_status('ÙØ±Ùد با Ù ÙÙÙÛØª Ø§ÙØ¬Ø§Ù شد', 'green'); 9530 document.body.innerHTML = `<div class="centered splash d-flex w-100 h-100 justify-content-center align-items-center" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;"> 9531 <img src="/files/bookcity-typography.svg" 9532 style="max-width: 100px; max-height: 100px;display: flex;"> 9533</div>`; 9534 window.location.href = frappe.utils.sanitise_redirect(frappe.utils.get_url_arg("redirect-to")) || data.home_page; 9535 } else if (data.message == 'Password Reset') { 9536 window.location.href = frappe.utils.sanitise_redirect(data.redirect_to); 9537 } else if (data.message == "No App") { 9538 storePendingLoginName(""); 9539 login.set_status("ÙØ±Ùد با Ù ÙÙÙÛØª Ø§ÙØ¬Ø§Ù شد", 'green'); 9540 if (localStorage) { 9541 localStorage.removeItem("last_visited"); 9542 } 9543 window.location.href = "/"; 9544 } else if (window.location.hash === '#forgot') { 9545 if (data.message === 'not found') { 9546 login.set_status('کاربر Ù Ø¹ØªØ¨Ø±Û ÙÛØ³Øª', 'red'); 9547 } else if (data.message == 'not allowed') { 9548 login.set_status('٠جاز ÙÛØ³Øª', 'red'); 9549 } else if (data.message == 'disabled') { 9550 login.set_status('٠جاز ÙÛØ³Øª: کاربر ØºÛØ±ÙعاÙ', 'red'); 9551 } else { 9552 login.set_status('Ø¯Ø³ØªÙØ±Ø§ÙØ¹Ù Ù ÙØ§ اÛÙ Û٠شد', 'green'); 9553 } 9554 9555 9556 } else if (window.location.hash === '#signup') { 9557 if (cint(data.message[0]) == 0) { 9558 login.set_status(data.message[1], 'red'); 9559 } else { 9560 login.set_status('Ù ÙÙÙÛØª', 'green'); 9561 frappe.msgprint(data.message[1]) 9562 } 9563 //login.set_status(__(data.message), 'green'); 9564 } 9565 9566 //OTP verification 9567 if (data.verification && data.message != 'Logged In') { 9568 login.set_status('Ù ÙÙÙÛØª', 'green'); 9569 9570 document.cookie = "tmp_id=" + data.tmp_id; 9571 9572 if (data.verification.method == 'OTP App') { 9573 continue_otp_app(data.verification.setup, data.verification.qrcode); 9574 } else if (data.verification.method == 'SMS') { 9575 // Show OTP page for SMS 9576 const mobileNo = args.mobile_no || $('#login_mobile').val(); 9577 if (mobileNo) { 9578 showOTPPage(mobileNo); 9579 } else { 9580 continue_sms(data.verification.setup, data.verification.prompt); 9581 } 9582 } else if (data.verification.method == 'Email') { 9583 continue_email(data.verification.setup, data.verification.prompt); 9584 } 9585 } 9586 }, 9587 401: get_error_handler('ÙØ±Ùد ÙØ§Ù عتبر Ø¯ÙØ¨Ø§Ø±Ù Ø§Ù ØªØØ§Ù Ú©ÙÛØ¯.'), 9588 417: get_error_handler('اÙÙ! Ù Ø´Ú©ÙÛ Ù¾ÛØ´ آ٠د'), 9589 404: get_error_handler('کاربر ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯.') 9590 }; 9591 9592 return login_handlers; 9593})(); 9594 9595frappe.ready(function () { 9596 9597 login.bind_events(); 9598 initLoginNameField(); 9599 9600 if (!window.location.hash) { 9601 window.location.hash = "#login"; 9602 } else { 9603 $(window).trigger("hashchange"); 9604 } 9605 9606 $(".form-signup, .form-forgot, .form-login-with-email-link").removeClass("hide"); 9607 $(document).trigger('login_rendered'); 9608
9609 // Auto-enable staff mode if signup is disabled 9610 if (window.disable_signup) { 9611 $("#staff").prop("checked", true); 9612 staff_login(); 9613 // Hide the staff label and its container when signup is disabled 9614 $("#staff-label").closest(".form-group").hide(); 9615 } 9616}); 9617 9618var verify_token = function (event) { 9619 $(".form-verify").on("submit", function (eventx) { 9620 eventx.preventDefault(); 9621 var args = {}; 9622 args.cmd = "login"; 9623 args.otp = $("#login_token").val(); 9624 args.tmp_id = frappe.get_cookie('tmp_id'); 9625 if (!args.otp) { 9626 frappe.msgprint('ر٠ز ÙØ±Ùد ÙØ§Ø²Ù است'); 9627 return false; 9628 } 9629 login.call(args); 9630 return false; 9631 }); 9632} 9633 9634var request_otp = function (r) { 9635 $('.login-content').empty(); 9636 $('.login-content:visible').append( 9637 `<div id="twofactor_div"> 9638 <form class="form-verify"> 9639 <div class="page-card-head"> 9640 <span class="indicator blue" data-text="Verification">تاÛÛØ¯</span> 9641 </div> 9642 <div id="otp_div"></div> 9643 <input type="text" id="login_token" autocomplete="off" class="form-control" placeholder=کد تاÛÛØ¯ required="" autofocus=""> 9644 <button class="btn btn-sm btn-primary btn-block mt-3" id="verify_token">Ø¨Ø±Ø±Ø³Û Ù Ø¬Ø¯Ø¯</button> 9645 </form> 9646 </div>` 9647 ); 9648 // add event handler for submit button 9649 verify_token(); 9650} 9651 9652var continue_otp_app = function (setup, qrcode) { 9653 request_otp(); 9654 var qrcode_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>'); 9655 9656 if (setup) { 9657 direction = $('<div>').attr('id', 'qr_info').html('کد ÙÙ Ø§ÛØ´ داد٠شد٠در OTP App را ÙØ§Ø±Ø¯ Ú©ÙÛØ¯.'); 9658 qrcode_div.append(direction); 9659 $('#otp_div').prepend(qrcode_div); 9660 } else { 9661 direction = $('<div>').attr('id', 'qr_info').html('راÙâØ§ÙØ¯Ø§Ø²Û OTP با Ø§Ø³ØªÙØ§Ø¯Ù از Ø¨Ø±ÙØ§Ù Ù OTP تک٠ÛÙ ÙØ´Ø¯. ÙØ·Ùا با Ù Ø¯ÛØ± ت٠اس Ø¨Ú¯ÛØ±Ûد'); 9662 qrcode_div.append(direction); 9663 $('#otp_div').prepend(qrcode_div); 9664 } 9665} 9666 9667var continue_sms = function (setup, prompt) { 9668 // Use new OTP page instead of old request_otp 9669 const mobileNo = $('#login_mobile').val() || $('#display_mobile_number').text(); 9670 if (mobileNo && setup) { 9671 showOTPPage(mobileNo); 9672 } else { 9673 // Fallback to old method if needed 9674 request_otp(); 9675 var sms_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>'); 9676 if (setup) { 9677 sms_div.append(prompt) 9678 $('#otp_div').prepend(sms_div); 9679 } else { 9680 direction = $('<div>').attr('id', 'qr_info').html(prompt || 'اس ا٠اس Ø§Ø±Ø³Ø§Ù ÙØ´Ø¯ ÙØ·Ùا با Ù Ø¯ÛØ± ت٠اس Ø¨Ú¯ÛØ±Ûد'); 9681 sms_div.append(direction); 9682 $('#otp_div').prepend(sms_div) 9683 } 9684 } 9685} 9686 9687var continue_email = function (setup, prompt) { 9688 request_otp(); 9689 var email_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>'); 9690 9691 if (setup) { 9692 email_div.append(prompt) 9693 $('#otp_div').prepend(email_div); 9694 } else { 9695 var direction = $('<div>').attr('id', 'qr_info').html(prompt || 'اÛÙ Û٠کد تأÛÛØ¯ Ø§Ø±Ø³Ø§Ù ÙØ´Ø¯. ÙØ·Ùا با Ù Ø¯ÛØ± ت٠اس Ø¨Ú¯ÛØ±Ûد'); 9696 email_div.append(direction); 9697 $('#otp_div').prepend(email_div); 9698 } 9699} 9700let interval; // Store the interval ID globally 9701let countdown; // Store the countdown value globally 9702 9703function startCountdown(seconds) { 9704 // Clear any existing interval to avoid multiple intervals running simultaneously 9705 clearInterval(interval); 9706 9707 if (seconds !== 0) { 9708 countdown = seconds; 9709 const countdownElement = document.getElementById('countdown-container'); 9710 countdownElement.style.display = 'flex'; 9711 9712 interval = setInterval(() => { 9713 document.getElementById('countdown').textContent = `${countdown} ثاÙÛ٠تا ارسا٠٠جدد کد`; 9714 if (countdown === 0) { 9715 clearInterval(interval); 9716 var is_checked = $("#staff").is(":checked"); 9717 if (!is_checked) { 9718 const send_again = document.getElementById('send-code-again'); 9719 send_again.style.display = 'flex'; 9720 } 9721 } 9722 countdown--; 9723 }, 1000); 9724 } 9725} 9726 9727function stopCountdown() { 9728 clearInterval(interval); 9729} 9730 9731function resetCountdown(seconds) { 9732 stopCountdown(); 9733 startCountdown(seconds); 9734} 9735 9736document.addEventListener('DOMContentLoaded', function () { 9737 9738 // document.getElementById("loginButton").addEventListener("click", function() { 9739 // let button = document.getElementById("loginButton"); 9740 // button.disabled = true; // Disable button 9741 // setTimeout(() => { 9742 // button.disabled = false; // Re-enable after 100ms 9743 // }, 500); 9744 // }); 9745 9746 const login_password = document.getElementById('password-field'); 9747 9748 const login_email = document.getElementById('email-field'); 9749 9750 const mobile = frappe.utils.xss_sanitise(($("#login_mobile").val() || "").trim()); 9751 if (login_password.style.display == 'none' && !mobile) { 9752 $("#login_email").val(""); 9753 $("#login_password").val(""); 9754 login_email.style.display = 'none'; 9755 const username_label = document.getElementById('login-label-username'); 9756 username_label.style.display = 'flex'; 9757 } 9758
9759 const element = document.getElementById("send-code-again"); 9760 // element.addEventListener("click", myFunction); 9761 if (!element.hasEventListener) { 9762 element.addEventListener("click", myFunction); 9763 element.hasEventListener = true; // Mark that the event listener has been added 9764 } 9765 // u = $("#login_email").val(); 9766 9767 9768 function myFunction() { 9769 9770 const login_email = document.getElementById('login_email'); 9771 login_email.disabled = true; 9772 $('#login_email').css('color', 'gray') 9773 $('#login_email').css('background-color', 'rgba(255, 255, 255, 0.43') 9774 9775 // var get_name = false; 9776 // var full_name = ""; 9777 9778 9779 // frappe.call({ 9780 // method: "frappe.website.doctype.website_settings.website_settings.get_name_at_sign_up", 9781 // args:{}, 9782 // callback: function(response){ 9783 // if(response){ 9784 9785 // get_name = response.message; 9786 9787 // } 9788 // } 9789 // }) 9790 9791 // if(get_name){ 9792 // full_name = frappe.utils.xss_sanitise(($("#name").val() || "").trim()) 9793 9794 // }else{ 9795 // full_name = frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()) 9796 // } 9797 let inputVal = ($("#login_email").val() || "").trim(); 9798 let isEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(inputVal); 9799 9800 if (isEmail && allow_email_login) { 9801 frappe.call({ 9802 type: "POST", 9803 method: "frappe.core.doctype.user.user.login_sign_up_mobile", 9804 args: { 9805 email: frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()), 9806 full_name: "", 9807 mobile_no: frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()), 9808 redirect_to: frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()) 9809 }, 9810 9811 callback: function (r) { 9812 const send_again = document.getElementById('send-code-again'); 9813 send_again.style.display = 'none'; 9814 9815 startCountdown(120); 9816 9817 } 9818 }) 9819 9820 } else { 9821 frappe.call({ 9822 type: "POST", 9823 method: "frappe.core.doctype.user.user.login_sign_up_mobile", 9824 args: { 9825 email: "", 9826 full_name: frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()), 9827 mobile_no: frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()), 9828 redirect_to: frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()) 9829 }, 9830 9831 callback: function (r) { 9832 const send_again = document.getElementById('send-code-again'); 9833 send_again.style.display = 'none'; 9834 9835 startCountdown(120); 9836 9837 } 9838 }) 9839 } 9840 9841 // frappe.call({ 9842 // type: "POST", 9843 // method: "frappe.core.doctype.user.user.login_sign_up_mobile", 9844 // args: (function () { 9845 // let inputVal = ($("#login_email").val() || "").trim(); 9846 // let isEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(inputVal); 9847 9848 // return { 9849 // email: isEmail ? frappe.utils.xss_sanitise(inputVal) : "", 9850 // full_name: frappe.utils.xss_sanitise(inputVal), 9851 // mobile_no: isEmail ? "" : frappe.utils.xss_sanitise(inputVal), 9852 // redirect_to: frappe.utils.xss_sanitise(inputVal) 9853 // }; 9854 // })(), 9855 9856 // callback: function (r) { 9857 // const send_again = document.getElementById('send-code-again'); 9858 // send_again.style.display = 'none'; 9859 9860 // startCountdown(120); 9861 // } 9862 // }); 9863 9864 } 9865 9866}); 9867 9868function active_number() { 9869 const login_email = document.getElementById('login_email'); 9870 login_email.disabled = false; 9871 9872 const edit_number = document.getElementById('edit-mobile-number'); 9873 edit_number.disabled = true; 9874 stopCountdown(); 9875 9876 9877 $('#login_email').css('color', 'black') 9878 $('#login_email').css('background-color', 'white') 9879 const send_again = document.getElementById('send-code-again'); 9880 send_again.style.display = 'flex'; 9881 // startCountdown(0); 9882 9883} 9884 9885function staff_login() { 9886 var is_staff = $("#staff").is(":checked"); 9887 9888 if (is_staff) { 9889 setLoginNameFieldVisible(false); 9890 login.set_status('ÙØ±Ùد', 'blue'); 9891 const email_label = document.getElementById('login-label-email'); 9892 email_label.style.display = 'flex'; 9893 const password_label = document.getElementById('login-label-password'); 9894 password_label.style.display = 'flex'; 9895 const username_label = document.getElementById('login-label-username'); 9896 username_label.style.display = 'none'; 9897 $("#login_mobile").css("border", "none"); 9898 $("#login_email").css("border", "none"); 9899 $("#login_password").css("border", "none"); 9900 const email_field = document.getElementById('email-field'); 9901 email_field.style.display = 'flex'; 9902 const password_field = document.getElementById('password-field'); 9903 password_field.style.display = 'flex'; 9904 const login_mobile = document.getElementById('login_mobile'); 9905 login_mobile.style.display = 'none'; 9906 const login_email = document.getElementById('login_email'); 9907 login_email.disabled = false;
9908 $('#login_email').css('color', 'black') 9909 $('#login_email').css('background-color', 'white') 9910 9911 const countdownElement = document.getElementById('countdown-container'); 9912 countdownElement.style.display = 'none'; 9913 const send_again = document.getElementById('send-code-again'); 9914 send_again.style.display = 'none '; 9915 const edit_mobile = document.getElementById('edit-mobile-number'); 9916 edit_mobile.style.display = 'none'; 9917 9918 const user = frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()); 9919 9920 // Hide staff label if signup is disabled, otherwise set the text 9921 if (window.disable_signup === false || window.disable_signup === "false") { 9922 $("#staff-label").text("ÙØ±Ùد با ر٠ز Ûکبار ٠صرÙ"); 9923 } 9924 9925 9926 9927 9928 9929 9930 9931 } else { 9932 initLoginNameField(); 9933 login.set_status('ÙØ±Ùد', 'blue'); 9934 $("#login_email").val(""); 9935 $("#login_password").val(""); 9936 9937 const email_label = document.getElementById('login-label-email'); 9938 email_label.style.display = 'none'; 9939 const password_label = document.getElementById('login-label-password'); 9940 password_label.style.display = 'none'; 9941 const username_label = document.getElementById('login-label-username'); 9942 username_label.style.display = 'flex'; 9943 $("#login_mobile").css("border", "none"); 9944 $("#login_email").css("border", "none"); 9945 $("#login_password").css("border", "none"); 9946 const user = frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()); 9947 const mobile = frappe.utils.xss_sanitise(($("#login_mobile").val() || "").trim()); 9948 const pass = $("#login_password").val() 9949 const email_field = document.getElementById('email-field'); 9950 email_field.style.display = 'none'; 9951 const password_field = document.getElementById('password-field'); 9952 password_field.style.display = 'none'; 9953 const login_mobile = document.getElementById('login_mobile'); 9954 login_mobile.style.display = 'flex'; 9955 const login_email = document.getElementById('login_email'); 9956 login_email.disabled = true; 9957 $('#login_email').css('color', 'gray') 9958 $('#login_email').css('background-color', 'rgba(255, 255, 255, 0.43)'); 9959 if (user && mobile) { 9960 9961 const edit_mobile = document.getElementById('edit-mobile-number'); 9962 edit_mobile.style.display = 'flex'; 9963 9964 9965 } 9966 if (user && !mobile) { 9967 9968 $("#login_email").val(""); 9969 $("#login_password").val(""); 9970 9971 } 9972 if (pass && !mobile) { 9973 $("#login_email").val(""); 9974 $("#login_password").val(""); 9975 9976 } 9977 if (password_field.style.display == 'none') { 9978 var edit_mobile = document.getElementById('edit-mobile-number'); 9979 edit_mobile.style.display = 'none'; 9980 } 9981 9982 // Hide staff label if signup is disabled, otherwise set the text 9983 if (window.disable_signup) { 9984 $("#staff-label").closest(".form-group").hide(); 9985 } else { 9986 $("#staff-label").text("ÙØ±Ùد با ر٠ز ثابت"); 9987 } 9988 9989 9990 9991 9992 9993 9994 } 9995 9996} 9997 9998 9999 10000 10001 10002function check_staff() { 10003 var is_checked = $("#staff").is(":checked"); 10004 10005 if ($("#staff-label").text() == "Website User") { 10006 const user = frappe.utils.xss_sanitise(($("#login_email").val() || "").trim()); 10007 const mobile = frappe.utils.xss_sanitise(($("#login_mobile").val() || "").trim()); 10008 10009 } 10010 if (is_checked) { 10011 $("#staff").is(":checked") = false; 10012 10013 10014 } else { 10015 10016 $("#staff").is(":checked") = true; 10017 10018 10019 } 10020 10021} 10022 10023 10024function check_digits_ascii(digits) { 10025 10026 var inputValue = ""; 10027 10028 for (var i = 0; i < digits.length; i++) { 10029 var currentChar = digits.charAt(i); 10030 var ascii = currentChar.charCodeAt(0); 10031 10032 10033 10034 10035 switch (ascii) { 10036 10037 // 0 10038 case 176219: 10039 currentChar = String.fromCharCode(48); 10040 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10041 break; 10042 10043 case 1776: 10044 currentChar = String.fromCharCode(48); 10045 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10046 break; 10047 10048 // 1 10049 case 177219: 10050 currentChar = String.fromCharCode(49); 10051 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10052 break; 10053 10054 case 1777: 10055 currentChar = String.fromCharCode(49); 10056 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10057 break; 10058 10059 // 2 10060 case 178219: 10061 currentChar = String.fromCharCode(50); 10062 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10063 break; 10064 10065 case 1778: 10066 currentChar = String.fromCharCode(50); 10067 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10068 break; 10069 10070 // 3 10071 case 179219: 10072 currentChar = String.fromCharCode(51); 10073 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10074 break; 10075 10076 case 1779: 10077 currentChar = String.fromCharCode(51); 10078 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10079 break; 10080 10081 // 4 10082 case 180219: 10083 currentChar = String.fromCharCode(52); 10084 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10085 break; 10086 10087 case 1780: 10088 currentChar = String.fromCharCode(52); 10089 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10090 break; 10091 10092 // 5 10093 case 181219: 10094 currentChar = String.fromCharCode(53); 10095 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10096 break; 10097 10098 case 1781: 10099 currentChar = String.fromCharCode(53); 10100 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10101 break; 10102 10103 // 6 10104 case 182219: 10105 currentChar = String.fromCharCode(54); 10106 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10107 break; 10108 10109 case 1782: 10110 currentChar = String.fromCharCode(54); 10111 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10112 break; 10113 10114 // 7 10115 case 183219: 10116 currentChar = String.fromCharCode(55); 10117 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10118 break; 10119 10120 case 1783: 10121 currentChar = String.fromCharCode(55); 10122 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10123 break; 10124 10125 // 8 10126 case 184219: 10127 currentChar = String.fromCharCode(56); 10128 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10129 break; 10130 10131 case 1784: 10132 currentChar = String.fromCharCode(56); 10133 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10134 break; 10135 10136 // 9 10137 case 185219: 10138 currentChar = String.fromCharCode(57); 10139 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10140 break; 10141 10142 case 1785: 10143 currentChar = String.fromCharCode(57); 10144 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10145 break; 10146 10147 default: 10148 inputValue = inputValue.substring(0, i) + currentChar + inputValue.substring(i + 1); 10149 } 10150 10151 10152 } 10153 10154 10155 return inputValue 10156 10157} 10158 10159// OTP Management Functions 10160function showOTPPage(mobileNumber, fullName) { 10161 if (fullName) { 10162 storePendingLoginName(fullName); 10163 } 10164 // Hide login loader if active 10165 hideLoader('loginLoader'); 10166 10167 // Convert to Persian digits if needed 10168 const persianDigits = ['Û°', 'Û±', 'Û²', 'Û³', 'Û´', 'Ûµ', 'Û¶', 'Û·', 'Û¸', 'Û¹']; 10169 let displayNumber = mobileNumber; 10170 if (/^\d+$/.test(mobileNumber)) { 10171 displayNumber = mobileNumber.split('').map(d => persianDigits[parseInt(d)]).join(''); 10172 } 10173 10174 // Hide login form container completely 10175 $('.login-form-container').css('display', 'none').attr('style', function(i, s) { 10176 return (s || '') + ' display: none !important;'; 10177 }); 10178 // Show OTP page container - add show-otp class 10179 $('.otp-container').addClass('show-otp'); 10180 10181 // Set mobile number 10182 $('#display_mobile_number').text(displayNumber); 10183 // Focus first OTP input 10184 setTimeout(() => { 10185 $('#otp_1').focus(); 10186 }, 100); 10187 // Clear all OTP inputs 10188 $('.otp-input').val('').removeClass('filled').addClass('empty').css('color', 'transparent'); 10189 clearOTPErrorState(); 10190 otpAutoSubmitEnabled = true; 10191 otpSubmitInProgress = false;
10192 // Disable submit button 10193 $('#otp_submit_btn').prop('disabled', true).text('ÙØ±Ùد'); 10194 10195 // Start countdown timer 10196 startOTPCountdown(120); 10197} 10198 10199function editMobileNumber() { 10200 // Hide OTP loader if active 10201 hideLoader('otpLoader'); 10202 10203 // Get mobile number from display (convert Persian to English if needed) 10204 const displayNumber = $('#display_mobile_number').text(); 10205 const englishDigits = displayNumber.replace(/[Û°-Û¹]/g, function(d) { 10206 return 'Û°Û±Û²Û³Û´ÛµÛ¶Û·Û¸Û¹'.indexOf(d); 10207 }).replace(/\D/g, ''); 10208 10209 // Hide OTP page container - remove show-otp class 10210 $('.otp-container').removeClass('show-otp'); 10211 // Show login form container 10212 $('.login-form-container').attr('style', function(i, s) { 10213 return (s ? s.replace(/display:\s*none\s*!important;?/gi, '') : '') + ' display: flex !important;'; 10214 }); 10215 // Set mobile number in input field 10216 $('#login_mobile').val(englishDigits); 10217 // Focus mobile input 10218 setTimeout(() => { 10219 $('#login_mobile').focus().select(); 10220 if (window.get_name_at_sign_up) { 10221 updateLoginNameForMobile(); 10222 } 10223 }, 100); 10224 10225 // Stop countdown if running 10226 if (otpCountdownInterval) { 10227 clearInterval(otpCountdownInterval); 10228 otpCountdownInterval = null; 10229 } 10230 $('#otp_countdown').hide(); 10231 $('#otp_resend_link').hide(); 10232} 10233 10234// Initialize OTP input handlers 10235function initOTPInputs() { 10236 // Function to update empty state (show/hide dash) 10237 function updateEmptyState(input) { 10238 const $input = $(input); 10239 const $wrapper = $input.closest('.otp-input-wrapper'); 10240 if (!$input.val() || $input.val().trim() === '') { 10241 $input.addClass('empty'); 10242 // Only show dash if not focused 10243 if (!$input.is(':focus')) { 10244 $wrapper.addClass('show-dash'); 10245 } else { 10246 $wrapper.removeClass('show-dash'); 10247 } 10248 } else { 10249 $input.removeClass('empty'); 10250 $wrapper.removeClass('show-dash'); 10251 } 10252 } 10253 10254 // Initialize all inputs with empty state 10255 $('.otp-input').each(function() { 10256 updateEmptyState(this); 10257 }); 10258 10259 // Handle focus - border changes to dark blue, hide dash 10260 $('.otp-input').on('focus', function() { 10261 const $input = $(this); 10262 const $wrapper = $input.closest('.otp-input-wrapper'); 10263 // Hide dash when focused 10264 $wrapper.removeClass('show-dash'); 10265 // Border will change to dark blue via CSS :focus 10266 }); 10267 10268 // Handle blur - show dash if empty, reset border 10269 $('.otp-input').on('blur', function() { 10270 const $input = $(this); 10271 updateEmptyState(this); 10272 }); 10273 10274 $('.otp-input').on('input', function() { 10275 const currentInput = $(this); 10276 const value = currentInput.val(); 10277 10278 // Only allow numbers 10279 if (value && !/^\d$/.test(value)) { 10280 currentInput.val(''); 10281 updateEmptyState(currentInput[0]); 10282 return; 10283 } 10284 10285 // Remove empty class and add filled class 10286 if (value) { 10287 clearOTPErrorState(); 10288 currentInput.removeClass('empty'); 10289 currentInput.addClass('filled'); 10290 // Change text color to dark primary color 10291 currentInput.css('color', 'var(--dark-primary)'); 10292 } else { 10293 currentInput.removeClass('filled'); 10294 currentInput.addClass('empty'); 10295 currentInput.css('color', 'transparent'); 10296 } 10297 10298 // Update empty state to manage dash display 10299 updateEmptyState(currentInput[0]); 10300 10301 // Move to next input if value entered 10302 if (value && currentInput.closest('.otp-input-wrapper').next('.otp-input-wrapper').length) { 10303 currentInput.closest('.otp-input-wrapper').next('.otp-input-wrapper').find('.otp-input').focus(); 10304 } 10305 10306 // Check if all fields are filled 10307 checkOTPComplete(); 10308 }); 10309 10310 // Handle backspace 10311 $('.otp-input').on('keydown', function(e) { 10312 const $input = $(this); 10313 if (e.key === 'Backspace' && !$input.val() && $input.closest('.otp-input-wrapper').prev('.otp-input-wrapper').length) { 10314 $input.closest('.otp-input-wrapper').prev('.otp-input-wrapper').find('.otp-input').focus(); 10315 } else if (e.key === 'Backspace' && $input.val()) { 10316 // Clear current input on backspace 10317 setTimeout(() => { 10318 if (!$input.val()) { 10319 $input.removeClass('filled'); 10320 $input.addClass('empty'); 10321 $input.css('color', 'transparent'); 10322 updateEmptyState($input[0]); 10323 } 10324 }, 0); 10325 } 10326 }); 10327 10328 // Handle paste 10329 $('.otp-input').on('paste', function(e) { 10330 e.preventDefault(); 10331 const pastedData = (e.originalEvent.clipboardData || window.clipboardData).getData('text'); 10332 const digits = pastedData.replace(/\D/g, '').substring(0, 5); 10333 10334 $('.otp-input').each(function(index) { 10335 const $input = $(this); 10336 if (index < digits.length) { 10337 $input.val(digits[index]).addClass('filled').removeClass('empty'); 10338 $input.css('color', 'var(--dark-primary)'); 10339 } else { 10340 $input.val('').removeClass('filled').addClass('empty'); 10341 $input.css('color', 'transparent'); 10342 } 10343 updateEmptyState($input[0]); 10344 }); 10345 10346 if (digits.length === 5) { 10347 $('#otp_5').focus(); 10348 } else if (digits.length > 0) { 10349 $('#otp_' + digits.length).focus(); 10350 } 10351 10352 checkOTPComplete(); 10353 }); 10354} 10355 10356function checkOTPComplete() { 10357 const otp1 = $('#otp_1').val(); 10358 const otp2 = $('#otp_2').val(); 10359 const otp3 = $('#otp_3').val(); 10360 const otp4 = $('#otp_4').val(); 10361 const otp5 = $('#otp_5').val(); 10362 10363 if (otp1 && otp2 && otp3 && otp4 && otp5) { 10364 $('#otp_submit_btn').prop('disabled', false); 10365 if (otpAutoSubmitEnabled && !otpSubmitInProgress) { 10366 handleOTPSubmit(true); 10367 } 10368 } else { 10369 $('#otp_submit_btn').prop('disabled', true); 10370 } 10371} 10372 10373// Handle OTP form submission 10374function handleOTPSubmit(isAutoSubmit = false) { 10375 if (otpSubmitInProgress) { 10376 return; 10377 } 10378 10379 const otp = $('#otp_1').val() + $('#otp_2').val() + $('#otp_3').val() + $('#otp_4').val() + $('#otp_5').val(); 10380 10381 if (otp.length !== 5) { 10382 frappe.msgprint('ÙØ·Ùا کد 5 رÙÙ Û Ø±Ø§ Ú©Ø§Ù Ù ÙØ§Ø±Ø¯ Ú©ÙÛØ¯'); 10383 return; 10384 } 10385 10386 // Get mobile number and convert Persian to English 10387 const displayNumber = $('#display_mobile_number').text(); 10388 const mobileNo = displayNumber.replace(/[Û°-Û¹]/g, function(d) { 10389 return 'Û°Û±Û²Û³Û´ÛµÛ¶Û·Û¸Û¹'.indexOf(d); 10390 }).replace(/\D/g, ''); 10391 10392 if (!mobileNo) { 10393 frappe.msgprint('Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ ÛØ§Ùت ÙØ´Ø¯'); 10394 return; 10395 } 10396 10397 otpSubmitInProgress = true; 10398 10399 // Show loader 10400 showLoader('otpLoader', 'در ØØ§Ù بررسÛ...'); 10401 10402 var args = {}; 10403 args.cmd = "login"; 10404 args.usr = mobileNo; // Mobile number as username 10405 args.pwd = otp; // OTP as password for SMS login 10406 args.otp = otp; // Also send as otp for 2FA compatibility 10407 args.mobile_no = mobileNo; 10408 args.tmp_id = frappe.get_cookie('tmp_id'); 10409 const pendingName = getPendingLoginName(); 10410 if (pendingName) { 10411 args.name = pendingName; 10412 } 10413 10414 // Disable submit button during request 10415 $('#otp_submit_btn').prop('disabled', true).text('در ØØ§Ù بررسÛ...'); 10416 10417 login.call(args, function(data) { 10418 // Hide loader 10419 hideLoader('otpLoader'); 10420 otpSubmitInProgress = false;
10421 // Re-enable button if login fails 10422 if (data && data.message !== 'Logged In' && data.message !== 'No App') { 10423 if (isAutoSubmit) { 10424 otpAutoSubmitEnabled = false; 10425 } 10426 setOTPErrorState(); 10427 $('#otp_submit_btn').prop('disabled', false).text('ÙØ±Ùد'); 10428 // Show error message if available 10429 if (data.exc) { 10430 frappe.msgprint(data.exc); 10431 } else if (data.message) { 10432 frappe.msgprint(data.message); 10433 } 10434 } 10435 }).fail(function(error) { 10436 // Hide loader 10437 hideLoader('otpLoader'); 10438 otpSubmitInProgress = false; 10439 otpAutoSubmitEnabled = false; 10440 setOTPErrorState(); 10441 $('#otp_submit_btn').prop('disabled', false).text('ÙØ±Ùد'); 10442 if (error && error.responseJSON && error.responseJSON._server_messages) { 10443 try { 10444 const messages = JSON.parse(error.responseJSON._server_messages || '[]').map(function(v) { 10445 try { 10446 return JSON.parse(v).message; 10447 } catch (e) { 10448 return v; 10449 } 10450 }).filter(Boolean); 10451 if (messages.length) { 10452 frappe.msgprint(messages.join('<br>')); 10453 return; 10454 } 10455 } catch (e) { 10456 // fall through to generic message 10457 } 10458 } 10459 if (error && error.message) { 10460 frappe.msgprint(error.message); 10461 } else { 10462 frappe.msgprint('خطا در ÙØ±Ùد. ÙØ·Ùا Ø¯ÙØ¨Ø§Ø±Ù ØªÙØ§Ø´ Ú©ÙÛØ¯.'); 10463 } 10464 }); 10465} 10466 10467// OTP Countdown Timer 10468let otpCountdownInterval = null; 10469let otpCountdownSeconds = 0; 10470let otpAutoSubmitEnabled = true; 10471let otpSubmitInProgress = false; 10472 10473function clearOTPErrorState() { 10474 $('.otp-input').removeClass('otp-invalid'); 10475} 10476 10477function setOTPErrorState() { 10478 $('.otp-input').addClass('otp-invalid'); 10479} 10480 10481function startOTPCountdown(seconds) { 10482 otpCountdownSeconds = seconds; 10483 10484 // Clear existing interval 10485 if (otpCountdownInterval) { 10486 clearInterval(otpCountdownInterval); 10487 } 10488 10489 // Show countdown, hide resend link 10490 $('#otp_countdown').show(); 10491 $('#otp_resend_link').hide(); 10492 10493 // Update countdown display 10494 updateOTPCountdown(); 10495 10496 // Start interval 10497 otpCountdownInterval = setInterval(function() { 10498 otpCountdownSeconds--; 10499 updateOTPCountdown(); 10500 10501 if (otpCountdownSeconds <= 0) { 10502 clearInterval(otpCountdownInterval); 10503 otpCountdownInterval = null; 10504 // Show resend link, hide countdown 10505 $('#otp_countdown').hide(); 10506 $('#otp_resend_link').show(); 10507 } 10508 }, 1000); 10509} 10510 10511function updateOTPCountdown() { 10512 const minutes = Math.floor(otpCountdownSeconds / 60); 10513 const seconds = otpCountdownSeconds % 60; 10514 const persianDigits = ['Û°', 'Û±', 'Û²', 'Û³', 'Û´', 'Ûµ', 'Û¶', 'Û·', 'Û¸', 'Û¹']; 10515 10516 let displayText = ''; 10517 if (minutes > 0) { 10518 displayText = minutes.toString().split('').map(d => persianDigits[parseInt(d)]).join('') + ':' + 10519 seconds.toString().padStart(2, '0').split('').map(d => persianDigits[parseInt(d)]).join(''); 10520 } else { 10521 displayText = seconds.toString().split('').map(d => persianDigits[parseInt(d)]).join('') + ' ثاÙÛ٠تا ارسا٠٠جدد کد'; 10522 } 10523 10524 $('#countdown_text').text(displayText); 10525} 10526 10527function resendOTP() { 10528 const mobileNumber = $('#display_mobile_number').text().replace(/[Û°-Û¹]/g, function(d) { 10529 return 'Û°Û±Û²Û³Û´ÛµÛ¶Û·Û¸Û¹'.indexOf(d); 10530 }).replace(/\D/g, ''); 10531 10532 if (!mobileNumber) { 10533 frappe.msgprint('Ø´Ù Ø§Ø±Ù Ù ÙØ¨Ø§ÛÙ ÛØ§Ùت ÙØ´Ø¯'); 10534 return; 10535 } 10536 10537 // Call API to resend OTP 10538 var args = { 10539 cmd: "frappe.core.doctype.user.user.login_sign_up_mobile", 10540 mobile_no: mobileNumber, 10541 email: "", 10542 full_name: getPendingLoginName(), 10543 redirect_to: "" 10544 }; 10545 10546 frappe.call({ 10547 type: "POST", 10548 method: "frappe.core.doctype.user.user.login_sign_up_mobile", 10549 args: args, 10550 callback: function(r) { 10551 if (r && !r.exc) { 10552 frappe.show_alert('کد ٠جددا٠ارسا٠شد', 3); 10553 // Restart countdown 10554 startOTPCountdown(120); 10555 } else { 10556 frappe.msgprint('خطا در ارسا٠٠جدد کد'); 10557 } 10558 } 10559 }); 10560} 10561 10562// Toggle between mobile OTP login and password login 10563function togglePasswordLogin() { 10564 // Hide any active loaders 10565 hideLoader('loginLoader'); 10566 hideLoader('otpLoader'); 10567 10568 const isPasswordMode = $('#email-field-group').is(':visible'); 10569 10570 if (isPasswordMode) { 10571 // Switch to mobile OTP mode 10572 $('#email-field-group').hide(); 10573 $('#password-field-group').hide(); 10574 $('#login_mobile').closest('.form-group').show(); 10575 initLoginNameField(); 10576 $('#loginButton').show(); 10577 $('#passwordLoginButton').hide(); 10578 $('#togglePasswordLoginBtn').show(); 10579 $('#toggleToOtpLogin').hide(); 10580 // Clear email and password fields when switching back to OTP mode 10581 $('#login_email').val(''); 10582 $('#login_password').val(''); 10583 $('#login_mobile').focus(); 10584 } else { 10585 // Switch to password login mode â name is only collected in OTP/signup flow 10586 setLoginNameFieldVisible(false); 10587 $('#login_mobile').closest('.form-group').hide(); 10588 $('#email-field-group').show(); 10589 $('#password-field-group').show(); 10590 $('#loginButton').hide(); 10591 $('#passwordLoginButton').show(); 10592 $('#togglePasswordLoginBtn').hide(); 10593 $('#toggleToOtpLogin').show(); 10594 // Clear mobile field when switching to password mode 10595 $('#login_mobile').val(''); 10596 $('#login_email').focus(); 10597 } 10598} 10599 10600// Initialize on page load 10601$(document).ready(function() { 10602 // Ensure OTP container is hidden on page load 10603 $('.otp-container').removeClass('show-otp'); 10604 $('.login-form-container').attr('style', function(i, s) { 10605 return (s ? s.replace(/display:\s*none\s*!important;?/gi, '') : '') + ' display: flex !important;'; 10606 }); 10607 10608 // Ensure password login fields are hidden by default 10609 $('#email-field-group').hide(); 10610 $('#password-field-group').hide(); 10611 $('#passwordLoginButton').hide(); 10612 $('#toggleToOtpLogin').hide(); 10613 10614 initOTPInputs(); 10615 10616 // Handle OTP form submission 10617 $('.form-otp-verification').on('submit', function(e) { 10618 e.preventDefault(); 10619 handleOTPSubmit(false); 10620 }); 10621});</script>
10621 10622 10623
10623<script>frappe.csrf_token = "None";</script>
10623<!--
10623<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/aos.js"></script>
10623 10624
10624<script> 10625 AOS.init({ 10626 duration: 300, // Faster animation (default: 1000ms) 10627 once: true, // Animation happens only once 10628 offset: 200, // Trigger animation 100px before element comes into view 10629 easing: 'ease-in-out' 10630 }); 10631 </script>
10631 --> 10632 10633</body> 10634 10635</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.