कस्टम CSS थीम (Theme Library)

कस्टम CSS थीम पूरे Marinara का रंग-रूप बदल देती है। थीम बनाने, इंपोर्ट करने, एक्सपोर्ट करने और बदलने के लिए Theme Library (थीम लाइब्रेरी) इस्तेमाल करें। यह गाइड उन CSS वेरिएबल और क्लास की सूची भी देती है जिन्हें थीम इस्तेमाल कर सकती है, और बताती है कि थीम Card CSS के साथ कैसे काम करती हैं। CSS के बिना जल्दी बदलाव के लिए चैट विंडो के तैयार स्टाइल देखें।

शुरू करने से पहले: अगर आप Marinara किसी दूसरे डिवाइस से खोलते हैं, जैसे फ़ोन से, तो थीम बनाने, एडिट करने, इंपोर्ट करने, चालू करने या हटाने से पहले सर्वर को एक एडमिन सीक्रेट चाहिए। जिस कंप्यूटर पर सर्वर चलता है, उस पर किसी सीक्रेट की ज़रूरत नहीं है।

  1. सर्वर पर .env फ़ाइल में ADMIN_SECRET सेट करें।
  2. ऐप में Settings → Advanced → Admin Access (सेटिंग्स → एडवांस्ड → एडमिन एक्सेस) खोलें और वही वैल्यू डालें।

देखें सर्वर कॉन्फ़िगरेशन रेफ़रेंस और रिमोट एक्सेस गाइड। किसी की दी हुई थीम पर स्विच करने के लिए थीम चालू करना पर जाएँ।

कस्टम थीम क्या है

CSS यानी Cascading Style Sheets, वह कोड जो रंग, बॉर्डर और स्पेसिंग तय करता है। थीम CSS का एक ब्लॉक है जो पेज का बैकग्राउंड, एक्सेंट रंग, कार्ड, बॉर्डर, टेक्स्ट और बहुत कुछ बदल सकता है।

थीम आपके Marinara सर्वर पर Theme Library में रहती हैं, इसलिए वे उसी सर्वर से जुड़ने वाले हर डिवाइस पर सिंक हो जाती हैं। बाकी ज़्यादातर अपीयरेंस सेटिंग्स एक ही डिवाइस पर रहती हैं। एक समय पर सिर्फ़ एक थीम चालू रह सकती है, और आप जितनी चाहें उतनी थीम रख सकते हैं।

Theme Library कहाँ मिलती है

  1. Settings खोलें।
  2. Addons टैब खोलें।
  3. Theme Library सेक्शन ढूँढें।

थीम बनाना

  1. Theme Library सेक्शन में Create Theme पर क्लिक करें।
  2. नाम वाले बॉक्स में नाम टाइप करें (उसमें "Theme name..." लिखा दिखता है)।
  3. बड़े टेक्स्ट बॉक्स में अपना CSS लिखें या पेस्ट करें।
  4. Preview चालू रहने दें, ताकि टाइप करते ही आपके बदलाव लाइव दिखें। लाइव प्रीव्यू रोकने के लिए इसे बंद कर दें।
  5. Save पर क्लिक करें।

नई थीम एक टेम्पलेट से शुरू होती है, जिसमें आम वेरिएबल कमेंट किए हुए उदाहरणों के रूप में दिए रहते हैं। कमेंट के निशान हटाएँ और अपनी वैल्यू भरें। बिल्कुल नई थीम सेव करते ही चालू हो जाती है, और आपको यह संदेश दिखता है: Theme "My Theme" saved and activated.

बाद में थीम बदलनी हो तो उसे Installed Themes में ढूँढें, कोड आइकन पर क्लिक करें (टूलटिप Edit theme CSS), बदलाव करें और Save पर क्लिक करें। एडिट करने से यह नहीं बदलता कि कौन सी थीम चालू है।

थीम इंपोर्ट और एक्सपोर्ट करना

थीम इंपोर्ट करने के लिए:

  1. Theme Library सेक्शन में Import File पर क्लिक करें।
  2. कोई .css या .json फ़ाइल चुनें।
  3. संदेश पढ़ें। उसमें बताया जाता है कि कितनी थीम इंपोर्ट हुईं, कितनी छोड़ी गईं और कितनी फ़ेल हुईं।

.css फ़ाइल से एक थीम बनती है, जिसका नाम फ़ाइल के नाम पर रखा जाता है। .json फ़ाइल में एक या कई थीम हो सकती हैं। Marinara से एक्सपोर्ट की गई फ़ाइल जैसी है वैसी ही इंपोर्ट करें, या खुद एक छोटी फ़ाइल लिखें:

{ "name": "My Theme", "css": "..." }

इंपोर्ट की हुई थीम अपने आप चालू नहीं होतीं। जिस थीम का नाम और CSS, दोनों सर्वर पर पहले से मौजूद किसी थीम जैसे हों, उसे छोड़ दिया जाता है।

थीम एक्सपोर्ट करने के लिए Installed Themes में उसकी पंक्ति पर अपलोड आइकन (टूलटिप Export theme) पर क्लिक करें। Marinara एक .json फ़ाइल डाउनलोड करता है, जिसे आप कहीं और इंपोर्ट कर सकते हैं।

थीम चालू करना

Installed Themes में हर थीम दिखती है, और सबसे ऊपर एक Default Theme एंट्री रहती है।

  1. किसी थीम को चालू करने के लिए उसके नाम पर क्लिक करें। चालू थीम पर सही का निशान दिखता है।
  2. कस्टम थीमिंग बंद करके बिल्ट-इन लुक पर लौटने के लिए Default Theme पर क्लिक करें।

Settings → Appearance (सेटिंग्स → अपीयरेंस) में App Style (ऐप स्टाइल) के सबसे ऊपर मौजूद Reset Appearance भी चालू थीम बंद कर देता है।

थीम डिलीट करने के लिए ट्रैश आइकन (टूलटिप Remove theme) पर क्लिक करें और Delete Theme डायलॉग विंडो में पुष्टि करें। इससे उसका CSS सर्वर से हमेशा के लिए डिलीट हो जाता है।

अगर यह काम नहीं किया: ऐप का लुक गलत दिखे, तो चालू थीम और चैट में मौजूद Card CSS, दोनों जाँचें। देखें थीम और Card CSS।

चैट विंडो के तैयार स्टाइल

शुरू करने से पहले: इसके लिए CSS की ज़रूरत नहीं है।

  1. Settings → Appearance → App (सेटिंग्स → अपीयरेंस → ऐप) खोलें।
  2. App Style के सबसे नीचे Chat widget style (चैट विजेट स्टाइल) ढूँढें।
  3. कोई स्टाइल चुनें।
स्टाइललुक
Defaultमूल लुक
Dottoreबर्फ़ जैसे नीले उपकरणों वाले फ़्रेम, हल्के धातुई किनारे और कटे हुए कोने
Prof. Mariकहानी की किताब जैसे सुनहरी किनारी वाले फ़्रेम, रत्नों जैसे नीले रंग और विंडो के शीर्षक पर Primogems। इसके बटन का बैकग्राउंड वही है जो इसकी विंडो का है।

हर स्टाइल का अपना फ़ॉन्ट है, वह लाइट और डार्क मोड में काम करता है, और बटन, विंडो व फैलने वाले सेक्शन को एक साथ स्टाइल करता है। कोई स्टाइल चुनने पर Font (फ़ॉन्ट), Shape (आकार) और तीनों रंग रीसेट हो जाते हैं। आपकी विंडो की जगहें बनी रहती हैं।

इन्हें आप अलग-अलग बदल सकते हैं:

हर रंग के लिए सादा रंग चुनने का कलर पिकर और ग्रेडिएंट का विकल्प है। किसी कंट्रोल के पास का Reset color (रंग रीसेट करें) उसे फिर से स्टाइल के लाइट या डार्क रंगों पर ले आता है। सजावटी चिह्न अपने मूल रंग बनाए रखते हैं।

स्टाइल को चैट तक ले जाना

कलर पिकर के नीचे के तीन स्विच इस स्टाइल को आगे तक ले जाते हैं। हर स्विच शुरू में बंद रहता है और दूसरों से अलग काम करता है। किसी एक को बंद करने पर उस हिस्से की सामान्य चैट स्टाइलिंग लौट आती है, और दूसरा स्टाइल चुनने पर स्विच के आपके चुनाव बने रहते हैं।

स्विचक्या लागू करता है
Apply preset font (प्रीसेट का फ़ॉन्ट लागू करें)संदेशों, इनपुट बॉक्स और चैट कंट्रोल के लिए विजेट का फ़ॉन्ट
Apply preset shape (प्रीसेट का आकार लागू करें)Roleplay संदेशों (क्लासिक और विज़ुअल नॉवेल), Game के संवाद बॉक्स, इनपुट बॉक्स और कंट्रोल के लिए फ़्रेम का आकार। Conversation के संदेश अपना आकार बनाए रखते हैं।
Apply preset colors (प्रीसेट के रंग लागू करें)इन हिस्सों के लिए बॉर्डर, बैकग्राउंड और टेक्स्ट के रंग, Conversation के संदेशों समेत। आपके कस्टम रंग और ग्रेडिएंट भी लागू होते हैं। उद्धरण में लिखा डायलॉग हर कैरेक्टर या पर्सोना का अपना Dialogue Highlight Color बनाए रखता है। HTML से बना संदेश, जैसे किसी एजेंट का स्टाइल किया हुआ कार्ड, अपने खुद तय किए टेक्स्ट रंग बनाए रखता है।

इतिहास वाले बटन, यानी Load More (और लोड करें) और Show older (पुराने दिखाएँ), बाकी चैट कंट्रोल की तरह इन स्विच के हिसाब से चलते हैं। Game Mode में ये स्विच अलग से दिखाई जाने वाली टिप्पणियों, HUD विजेट, मैप पैनल, कैरेक्टर शीट, लॉग, Inventory, लड़ाई के पैनल और डायलॉग विंडो पर भी लागू होते हैं। Professor Mari इन हिस्सों के लिए कस्टम थीम भी बना सकती है।

कस्टम थीम अब भी इन स्टाइल को ओवरराइड कर सकती है। नीचे दिए गए विंडो और ड्रॉअर के वेरिएबल को स्टाइल के रंगों से ज़्यादा प्राथमिकता मिलती है। विंडो के अक्षरों के लिए --mari-window-font-family, सेक्शन के कोनों के लिए --mari-drawer-radius, और शीर्षक की सजावट छिपाने के लिए --mari-window-ornament: none इस्तेमाल करें। स्टाइल की पूरी सजावट हटाने के लिए पहले Default चुनें।

थीम और Card CSS

Marinara में कस्टम CSS जोड़ने के दो तरीके हैं, और दोनों एक साथ चालू रह सकते हैं।

साइज़ और नाम की सीमाएँ

थीम का नाम ज़्यादा से ज़्यादा 200 अक्षर का हो सकता है। CSS ज़्यादा से ज़्यादा 256 KiB का हो सकता है, जिसे UTF-8 बाइट में मापा जाता है। इससे बड़ी थीम सेव या इंपोर्ट करते समय अस्वीकार हो जाती है। कस्टम थीम का CSS चलने से पहले साफ़ भी किया जाता है: किसी दूसरी वेबसाइट से फ़ाइल लोड करने वाली स्टाइल काम नहीं करतीं। इसकी जगह इमेज या फ़ॉन्ट को data: URI के रूप में एम्बेड करें।

CSS वेरिएबल रेफ़रेंस

थीम एडिटर में एक CSS Variable Reference रहता है, जिसे खोला और बंद किया जा सकता है। उस पर क्लिक करने से सबसे काम के वेरिएबल दिखते हैं, जिन्हें ओवरराइड किया जा सकता है। थीम इन्हीं वेरिएबल को :root ब्लॉक में सेट करके ऐप का रूप बदलती है। रेफ़रेंस में ये वेरिएबल दिए हैं:

वेरिएबलकिस चीज़ पर असर
--backgroundपेज का बैकग्राउंड
--foregroundमुख्य टेक्स्ट
--primaryएक्सेंट और बटन
--primary-foregroundprimary पर आने वाला टेक्स्ट
--secondaryकार्ड और इनपुट
--cardकार्ड का बैकग्राउंड
--borderबॉर्डर
--muted-foregroundहल्का टेक्स्ट
--sidebarसाइडबार का बैकग्राउंड
--sidebar-borderसाइडबार का बॉर्डर
--marinara-shell-edge-borderबाएँ और दाएँ किनारे का बॉर्डर
--destructiveएरर और डिलीट
--popoverड्रॉपडाउन का बैकग्राउंड
--accentहॉवर हाइलाइट

थीम सिर्फ़ इन्हें ही नहीं, Marinara का इस्तेमाल किया हुआ कोई भी CSS वेरिएबल सेट कर सकती है। कुछ इफ़ेक्ट के अपने वेरिएबल हैं। उदाहरण के लिए, --marinara-theme-accent-pulse: enabled एक्सेंट पल्स एनिमेशन माँगता है।

चैट विंडो और ड्रॉअर की स्टाइल बदलना

कंप्यूटर पर Chat Settings (चैट सेटिंग्स) खिसकाई जा सकने वाली विंडो में खुलता है। उसके सिमटने वाले सेक्शन ड्रॉअर कहलाते हैं। ड्रॉअर अपनी अलग विंडो में खुल सकता है, फिर छोटे खिसकाए जा सकने वाले बटन में सिमट सकता है, जिसे बबल कहते हैं।

बाकी चैट टूल भी यही विंडो और बटन इस्तेमाल करते हैं, जैसे Game controls, Session, Volume, Game Assets, जुड़ी हुई चैट और पैकेज के कंट्रोल। फ़ोन पर ज़्यादातर विंडो पूरी चौड़ाई वाले पैनल में खुलती हैं; Echo Chamber एक छोटी विंडो रहती है जिसे खिसका सकते हैं और जिसका आकार बदल सकते हैं। Chat Settings से बाहर निकाले गए टूल, खिसकाए जा सकने वाले तीन बिंदुओं के Chat tools (चैट टूल) मेन्यू में आते हैं; ट्रैकर के बटन अलग रहते हैं।

नीचे की क्लास, डेटा एट्रिब्यूट और वेरिएबल से थीम इन हिस्सों को एक साथ बदल सकती है। आपकी थीम के नियम !important के बिना भी डिफ़ॉल्ट की जगह लग जाते हैं।

क्लास

हिस्साक्लास
विंडो.mari-window
टाइटल बार.mari-window__header
शीर्षक और उसका आइकन.mari-window__title-row
शीर्षक.mari-window__title
टाइटल बार के बटन (Reset View, पसंदीदा लेआउट का स्टार, Tracker Panel, पिन, लॉक, बंद करें, वापस रखें).mari-window__controls (हर बटन .mari-window__control है)
विंडो का कंटेंट.mari-window__body
आकार बदलने वाले किनारे और कोने.mari-window__resize-handle
विंडो में पॉइंटर या फ़ोकस होने पर दिखने वाला कोने का निशान.mari-window__resize-grip
ड्रॉअर.mari-drawer
ड्रॉअर का हेडर और शीर्षक.mari-drawer__header, .mari-drawer__title
ड्रॉअर का आइकन, गिनती का बैज और ?.mari-drawer__icon, .mari-drawer__count, .mari-drawer__help
सिमटे हुए ड्रॉअर का प्रीव्यू (ट्रैकर का छोटा विजेट).mari-drawer__summary
तीर के पास ड्रॉअर के बटन और अलग विंडो में खोलने वाला बटन.mari-drawer__actions, .mari-drawer__popout
ड्रॉअर का तीर और कंटेंट.mari-drawer__arrow, .mari-drawer__body
ड्रॉअर बाहर खींचते समय पॉइंटर के साथ चलने वाला प्रीव्यू.mari-drawer-ghost
छोटी की गई विंडो का बटन (बबल).mari-window-bubble
आइकन की जगह बबल पर दिखने वाला लाइव सारांश (World State का बैनर).mari-window-bubble__banner
खींचा जा रहा बबल दूसरे के साथ सीध में होने पर दिखने वाली रेखा.mari-window-snap-guide
एजेंट चलने पर दिखने वाला बिंदु (Chat Settings बटन, Trackers विंडो).mari-agents-running-dot

डेटा एट्रिब्यूट

वेरिएबल

वैल्यू न देने पर हर वेरिएबल चैट के इंटरफ़ेस के साझा रंग इस्तेमाल करता है। इसलिए थीम को सिर्फ़ वही वेरिएबल देना होता है जिसे वह बदलना चाहती है।

वेरिएबलक्या बदलता है
--mari-window-bgविंडो का बैकग्राउंड
--mari-window-textविंडो का टेक्स्ट
--mari-window-border, --mari-window-border-widthविंडो का बॉर्डर
--mari-window-radiusविंडो के कोनों का गोलपन
--mari-window-shadowविंडो की छाया
--mari-window-backdrop-filterविंडो के पीछे का धुँधलापन
--mari-window-header-bg, --mari-window-header-text, --mari-window-header-borderटाइटल बार के रंग
--mari-window-header-paddingटाइटल बार में खाली जगह
--mari-window-control-color, --mari-window-control-color-hover, --mari-window-control-bg-hoverटाइटल बार के बटन, पसंदीदा स्टार समेत
--mari-window-control-color-active, --mari-window-control-bg-activeदबे हुए टाइटल बार बटन, पिन, लॉक और भरे पसंदीदा स्टार समेत
--mari-window-control-radius, --mari-window-control-gapबटन का गोलपन और उनके बीच की जगह
--mari-window-focus-ringकीबोर्ड फ़ोकस की बाहरी रेखा और उस विंडो की रेखा जिसमें ड्रॉअर वापस जाएगा
--mari-window-resize-handle-sizeआकार बदलने वाले किनारों की चौड़ाई
--mari-window-bubble-size, --mari-window-bubble-radius, --mari-window-bubble-shadowबबल का आकार, गोलपन और छाया
--mari-window-bubble-bg, --mari-window-bubble-bg-hover, --mari-window-bubble-borderबबल का बैकग्राउंड और बॉर्डर
--mari-window-bubble-text, --mari-window-bubble-text-hoverबबल के आइकन का रंग
--mari-window-snap-guideसीध की गाइड का रंग
--mari-drawer-bg, --mari-drawer-borderड्रॉअर का बैकग्राउंड और बीच की रेखा
--mari-drawer-header-bg, --mari-drawer-header-bg-hoverड्रॉअर के हेडर के रंग
--mari-drawer-header-padding, --mari-drawer-body-padding-inline, --mari-drawer-body-padding-bottomड्रॉअर में खाली जगह
--mari-drawer-title-color, --mari-drawer-icon-color, --mari-drawer-arrow-colorड्रॉअर के हेडर का टेक्स्ट और आइकन
--mari-drawer-count-bg, --mari-drawer-count-textड्रॉअर पर गिनती का बैज

सभी विंडो बदलने के लिए वेरिएबल :root में सेट करें, या किसी एक को बदलने के लिए उसके सिलेक्टर पर:

:root {
  --mari-window-radius: 0.5rem;
  --mari-window-bubble-bg: #3b0764;
}

[data-window="chat-settings"] .mari-drawer[data-drawer="chat-name"] {
  --mari-drawer-border: transparent;
}

संदेशों, इनपुट बॉक्स और चैट कंट्रोल की स्टाइल बदलना

तीन Apply preset स्विच से कस्टम थीम भी बाकी चैट में विजेट का डिज़ाइन इस्तेमाल कर सकती है। थीम नीचे दिए गए वेरिएबल से हर हिस्सा बदल सकती है। खुद CSS नहीं लिखना चाहते, तो Professor Mari से मेल खाती चैट थीम बनाने के लिए कहें।

हिस्साक्लास
Roleplay और Game के संदेश बॉक्स, Game की अलग टिप्पणियाँ, HUD विजेट, मैप पैनल, कैरेक्टर शीट और चैट इनपुट बॉक्स.mari-chat-style-surface
Game के लॉग, Inventory, लड़ाई के पैनल, विकल्प और डायलॉग विंडो; इन पैनल पर उनके नाम वाला data-game-section भी होता है, जैसे logs, inventory या combat-actions.mari-game-section.mari-chat-style-surface
किसी विंडो में दिखने वाला Game का कंटेंट, जैसे Journal; यह विंडो के रंग अपनाता है.mari-game-section
Conversation के संदेश (सिर्फ़ फ़ॉन्ट और रंग).mari-chat-style-conversation
बिना बॉक्स वाले Conversation संदेशों का टेक्स्ट.mari-chat-style-text
चैट कंट्रोल, जिनमें Calls और Conversation ग्रुप के कंट्रोल शामिल हैं.mari-chat-style-control
इतिहास वाले बटन: Load More, Show older, Show newer, Latest, और Game लॉग के Older, All और Show more older logs। इन पर .mari-chat-style-control भी होता है.mari-chat-history-pager
HTML से बना संदेश, जैसे किसी एजेंट का स्टाइल किया हुआ कार्ड। Apply preset colors चालू होने पर इसके अंदर तय किए गए टेक्स्ट रंग बने रहते हैं.mari-html-content
वेरिएबलक्या बदलता है
--mari-chat-font-familyचैट के संबंधित हिस्सों का फ़ॉन्ट
--mari-chat-bgबॉक्स का बैकग्राउंड; रंग या ग्रेडिएंट स्वीकार करता है
--mari-chat-textपढ़ने लायक एकसमान टेक्स्ट रंग
--mari-chat-borderबॉक्स की बाहरी रेखा; रंग या ग्रेडिएंट स्वीकार करता है
--mari-chat-border-colorबॉर्डर का वैकल्पिक एकसमान रंग
--mari-chat-radiusबॉक्स के कोनों का घुमाव, Conversation संदेशों को छोड़कर
--mari-chat-control-bg, --mari-chat-control-bg-hoverचैट बटन के बैकग्राउंड
--mari-chat-control-color, --mari-chat-control-radiusचैट बटन के आइकन का रंग और कोनों का घुमाव
--mari-chat-input-bgएडिट किए जा सकने वाले फ़ील्ड का अंदरूनी बैकग्राउंड

जैसे, Apply preset font और Apply preset colors चालू होने पर:

:root {
  --mari-chat-font-family: Georgia, serif;
  --mari-chat-bg: #251e29;
  --mari-chat-text: #f4e8dc;
  --mari-chat-border: linear-gradient(100deg, #d6aa66, #dda0b2);
}

जिन वेरिएबल का मान सेट नहीं है, वे विजेट की सेटिंग्स और प्रीसेट का पालन करते हैं। बिल्ट-इन स्टाइल के ज़रिए ये वेरिएबल लागू करने के लिए संबंधित स्विच चालू होना चाहिए। Apply preset shape चालू रहने पर भी Conversation के संदेश अपना आकार बनाए रखते हैं। कस्टम थीम सीधे क्लास को भी बदल सकती हैं; सजावट के लिए किसी हिस्से को काटते समय फ़ोकस की रेखाएँ, मेन्यू और संदेशों का कंटेंट न काटें।

फ़ोन पर तीन बिंदुओं वाला मेन्यू गोल बटन में फैलता है। उसे खोलने वाला बटन [data-chat-tools-menu-button] है, खुली बटन कतार [data-chat-tools-menu] है, और सूची के हर आइटम में data-chat-tools-menu-item का मान उसकी विंडो ID होता है। टूल के बटन .mari-window-bubble.mari-chat-tools-button और उसी ID के साथ data-chat-tools-menu-tool इस्तेमाल करते हैं। कतार के चारों ओर विंडो का फ़्रेम नहीं होता; उसके बटन विजेट के रंग और बटन साइज़ का पालन करते हैं। यह बाकी चैट के तीन स्विच से अलग काम करता है और बटन गोल ही रहते हैं।

मिलती-जुलती गाइड