basic theme ui updated all pages

This commit is contained in:
Alaguraj0361 2025-12-27 21:56:16 +05:30
parent 7ffe724569
commit ea4bd36348
6 changed files with 604 additions and 108 deletions

View File

@ -8,13 +8,21 @@
'data': [
'views/home_template.xml',
'views/login_templates.xml',
'views/web_title_template.xml',
],
'assets': {
'web.assets_common': [
'web.assets_backend': [
'home_dashboard/static/src/css/theme_variables.css',
'home_dashboard/static/src/css/home_menu.css',
'home_dashboard/static/src/js/chennora_title.js',
],
'web.assets_frontend': [
'home_dashboard/static/src/css/theme_variables.css',
'home_dashboard/static/src/css/login_style.css',
],
'web.assets_common': [
'home_dashboard/static/src/css/theme_variables.css',
],
},
'installable': True,
'application': True,

View File

@ -92,58 +92,76 @@
}
.o_home_top_bar {
position: absolute !important;
top: 15px !important;
right: 30px !important;
position: fixed !important;
top: 25px !important;
left: 0;
right: 0;
display: flex !important;
justify-content: center !important;
z-index: 1000 !important;
}
.o_top_bar_island {
display: flex !important;
align-items: center !important;
gap: 15px !important;
color: #444 !important;
z-index: 100 !important;
gap: 12px !important;
padding: 10px 25px !important;
background: rgba(255, 255, 255, 0.7) !important;
backdrop-filter: blur(15px) !important;
-webkit-backdrop-filter: blur(15px);
border-radius: 50px !important;
border: 1px solid rgba(255, 255, 255, 0.4) !important;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08) !important;
}
.o_top_icon {
font-size: 18px !important;
cursor: pointer !important;
opacity: 0.6 !important;
transition: all 0.2s !important;
position: relative !important;
.o_top_item {
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
color: #4a5568 !important;
transition: all 0.3s ease;
cursor: pointer;
position: relative;
}
.o_top_icon:hover {
opacity: 1 !important;
transform: scale(1.1) !important;
.o_top_item:hover {
color: #2bb1a5 !important;
transform: translateY(-3px);
}
.o_bar_divider {
width: 1px;
height: 24px;
background: rgba(0, 0, 0, 0.1);
margin: 0 10px;
}
.o_ai_icon {
background: linear-gradient(to bottom right, #fecd4f, #ffd970, #2bb1a5) !important;
font-weight: 800;
background: linear-gradient(135deg, #fecd4f, #2bb1a5) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
-webkit-text-fill-color: transparent !important;
font-weight: bold !important;
}
.badge_dot {
position: absolute !important;
top: -2px !important;
right: -2px !important;
width: 8px !important;
height: 8px !important;
background: var(--primary-color, #fecd4f) !important;
top: 8px;
right: 8px;
width: 8px;
height: 8px;
background: #fecd4f !important;
border-radius: 50% !important;
border: 1px solid white !important;
border: 2px solid white !important;
}
.o_user_avatar {
width: 30px !important;
height: 30px !important;
border-radius: 50% !important;
background: linear-gradient(135deg, var(--primary-color, #fecd4f) 0%, var(--secondary-color, #2bb1a5) 100%) !important;
width: 35px !important;
height: 35px !important;
border-radius: 12px !important;
background: linear-gradient(135deg, #fecd4f, #2bb1a5) !important;
color: white !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
font-weight: 600 !important;
font-size: 11px !important;
box-shadow: 0 2px 5px rgba(254, 205, 79, 0.3) !important;
font-weight: bold !important;
}

View File

@ -1,6 +1,7 @@
/* ========================================
ODOO THEME COLOR VARIABLES
Primary Color: #fecd4f (Golden Yellow)
Secondary Color: #2bb1a5 (Teal)
======================================== */
:root {
@ -10,76 +11,434 @@
--primary-light: #ffd970;
--primary-lighter: #ffe599;
/* Secondary/Accent Color */
/* Secondary/Accent Color - Used in Gradients */
--secondary-color: #2bb1a5;
--secondary-dark: #259a8f;
--secondary-light: #4dc4b8;
/* Gradient Combinations */
--gradient-primary: linear-gradient(135deg, #fecd4f 0%, #ffd970 100%);
--gradient-primary-secondary: linear-gradient(135deg, #fecd4f 0%, #2bb1a5 100%);
--gradient-secondary-primary: linear-gradient(to right, #2bb1a5, #fecd4f);
/* Gradient Combinations - Matching Login Page */
--gradient-primary: linear-gradient(135deg, #2bb1a5 0%, #fecd4f 100%);
--gradient-primary-hover: linear-gradient(135deg, #259a8f 0%, #e5b846 100%);
/* Home Page Background Gradient */
--bg-gradient-main: linear-gradient(135deg, #8fe0d6 0%, #ffecb5 100%);
/* UI Element Colors */
--btn-primary-bg: #fecd4f;
--btn-primary-hover: #e5b846;
--link-color: #fecd4f;
--link-color: #2bb1a5;
/* Teal for better contrast on white */
--link-hover: #e5b846;
/* Status Colors with Primary Tint */
/* Status Colors */
--success-color: #2bb1a5;
--warning-color: #fecd4f;
--danger-color: #ff5e62;
--info-color: #4dc4b8;
/* Neutral Colors */
--text-primary: #2c3e50;
--text-secondary: #4b4b4b;
--text-muted: #999;
--bg-light: #f0f1f9;
--bg-white: #ffffff;
--border-color: #eee;
/* Shadow with Primary Color */
--shadow-primary: 0 4px 12px rgba(254, 205, 79, 0.2);
--shadow-primary-hover: 0 8px 20px rgba(254, 205, 79, 0.3);
/* Shadows */
--shadow-primary: 0 4px 15px rgba(43, 177, 165, 0.2);
--shadow-primary-hover: 0 8px 20px rgba(43, 177, 165, 0.3);
--shadow-card: 0 10px 30px rgba(0, 0, 0, 0.08);
}
/* Apply primary color to common Odoo elements */
/* ::selection - Text Selection Color */
::selection {
background: var(--primary-color) !important;
color: #fff !important;
}
/* Scrollbar Styling (Webkit) */
::-webkit-scrollbar-thumb {
background: var(--secondary-color) !important;
border-radius: 10px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
}
/* ---------------------------------------------------------
GLOBAL UI OVERRIDES (HOME PAGE STYLE)
--------------------------------------------------------- */
/* Global Background & Font */
/* Global Background & Font */
body,
.o_web_client {
background: var(--bg-gradient-main) !important;
font-family: 'Inter', 'Segoe UI', Roboto, sans-serif !important;
font-size: 15px !important;
/* Increased Font Size for Readability */
background-attachment: fixed !important;
}
/* Main Content Container - FULL WIDTH (No Floating Card) */
.o_action_manager {
padding: 0 !important;
margin: 0 !important;
height: 100vh !important;
overflow: hidden !important;
}
.o_action_manager .o_view_controller {
background: #ffffff !important;
/* Solid White Canvas */
border-radius: 0 !important;
/* Remove curvature */
box-shadow: none !important;
/* Remove shadow */
border: none !important;
margin: 0 !important;
height: 100% !important;
width: 100% !important;
display: flex !important;
flex-direction: column !important;
}
/* ---------------------------------------------------------
NAVBAR & SIDEBAR (CONTROL PANEL)
--------------------------------------------------------- */
/* Top Navbar - Glassmorphism */
.o_main_navbar {
background: #ffffff !important;
border-bottom: 2px solid var(--primary-color) !important;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.03) !important;
color: #2c3e50 !important;
padding: 0 10px !important;
}
.o_main_navbar .o_menu_brand {
color: var(--secondary-color) !important;
font-weight: 800 !important;
font-size: 1.4rem !important;
letter-spacing: -0.5px;
}
.o_main_navbar .o_menu_sections .o_nav_entry,
.o_main_navbar .o_menu_systray .o_nav_entry {
color: #2bb1a5 !important;
font-size: 14px !important;
font-weight: 600 !important;
}
.o_main_navbar .o_menu_sections .o_nav_entry:hover,
.o_main_navbar .o_menu_systray .o_nav_entry:hover {
background: #2bb1a5 !important;
/* Subtle Yellow Hover */
}
/* Control Panel (Search, Filter Bar) */
.o_control_panel {
background: #fdfdfd !important;
border-bottom: 1px solid rgba(0, 0, 0, 0.05) !important;
padding: 20px 30px !important;
/* More spacious */
}
/* Breadcrumbs */
.breadcrumb-item a {
color: var(--secondary-color) !important;
font-weight: 700 !important;
font-size: 18px !important;
/* Larger headers */
}
.breadcrumb-item.active {
color: #718096 !important;
font-weight: 600 !important;
font-size: 18px !important;
}
/* Search Bar Input */
.o_searchview {
background: #f8f9fa !important;
border: 1px solid #e2e8f0 !important;
border-radius: 10px !important;
padding: 6px 15px !important;
}
.o_searchview .o_searchview_input {
background: transparent !important;
font-size: 14px !important;
}
/* ---------------------------------------------------------
TABLES (LIST VIEW)
--------------------------------------------------------- */
.o_list_view .o_list_table {
background: transparent !important;
}
/* Table Header */
.o_list_view .o_list_table thead {
background: rgba(248, 249, 250, 0.8) !important;
color: #4a5568 !important;
border-bottom: 2px solid var(--secondary-color) !important;
}
.o_list_view .o_list_table thead th {
border: none !important;
text-transform: uppercase;
font-size: 0.75rem;
letter-spacing: 0.05em;
font-weight: 700 !important;
padding: 12px 10px !important;
}
/* Table Rows */
.o_list_view .o_list_table tbody tr.o_data_row {
transition: all 0.2s ease !important;
border-bottom: 1px solid rgba(0, 0, 0, 0.03) !important;
}
.o_list_view .o_list_table tbody tr.o_data_row:hover {
background-color: rgba(43, 177, 165, 0.05) !important;
/* Light Teal Hover */
transform: scale(1.002);
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.02);
}
/* ---------------------------------------------------------
KANBAN CARDS
--------------------------------------------------------- */
.o_kanban_view .o_kanban_record {
background: #fff !important;
border: 1px solid rgba(0, 0, 0, 0.04) !important;
border-radius: 16px !important;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.02) !important;
margin-bottom: 10px !important;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
overflow: hidden;
}
/* Hover Effect for Cards */
.o_kanban_view .o_kanban_record:hover {
transform: translateY(-5px) !important;
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.08) !important;
border-color: var(--primary-color) !important;
}
/* Card Header/Title */
.o_kanban_record .o_kanban_record_title,
.o_kanban_record strong {
color: #2d3748 !important;
font-weight: 700 !important;
font-size: 1.05rem !important;
}
/* Kanban Group Headers */
.o_kanban_view .o_kanban_group_header {
background: transparent !important;
}
/* ---------------------------------------------------------
BUTTONS & FORM ELEMENTS
--------------------------------------------------------- */
/* Gradient Buttons */
.btn-primary,
.o_form_button_save,
.o_form_button_create {
background-color: var(--primary-color) !important;
border-color: var(--primary-color) !important;
color: #fff !important;
background: var(--gradient-primary) !important;
border: none !important;
border-radius: 10px !important;
padding: 8px 20px !important;
font-weight: 600 !important;
letter-spacing: 0.3px;
box-shadow: 0 4px 12px rgba(254, 205, 79, 0.3) !important;
}
.btn-primary:hover,
.o_form_button_save:hover,
.o_form_button_create:hover {
background-color: var(--primary-dark) !important;
border-color: var(--primary-dark) !important;
background: var(--gradient-primary-hover) !important;
transform: translateY(-2px);
box-shadow: 0 8px 15px rgba(254, 205, 79, 0.4) !important;
}
/* Secondary Buttons */
.btn-secondary {
background: #fff !important;
border: 1px solid #e2e8f0 !important;
color: #4a5568 !important;
border-radius: 10px !important;
}
.btn-secondary:hover {
background: #f7fafc !important;
color: var(--secondary-color) !important;
border-color: var(--secondary-color) !important;
}
/* Form Inputs */
.o_form_view .o_input {
border-radius: 8px !important;
border: 1px solid #e2e8f0 !important;
padding: 8px 12px !important;
background-color: #fcfcfc !important;
}
.o_form_view .o_input:focus {
border-color: var(--secondary-color) !important;
background-color: #fff !important;
box-shadow: 0 0 0 3px rgba(43, 177, 165, 0.15) !important;
}
/* ---------------------------------------------------------
COMPONENT OVERRIDES
--------------------------------------------------------- */
/* [PREVIOUS BUTTON STYLES PRESERVED - ADDING DASHBOARD SPECIFIC BELOW] */
/* Primary Buttons */
.btn-primary,
.o_form_button_save,
.o_form_button_create,
.o_button_import {
background: var(--gradient-primary) !important;
border: none !important;
border-radius: 10px !important;
padding: 8px 20px !important;
font-weight: 600 !important;
letter-spacing: 0.3px;
box-shadow: 0 4px 12px rgba(254, 205, 79, 0.3) !important;
}
.btn-primary:hover,
.o_form_button_save:hover,
.o_form_button_create:hover,
.o_button_import:hover {
background: var(--gradient-primary-hover) !important;
transform: translateY(-2px);
box-shadow: 0 8px 15px rgba(254, 205, 79, 0.4) !important;
}
/* ---------------------------------------------------------
DASHBOARD SPECIFIC UI UPDATES (FULL PAGE OVERHAUL)
--------------------------------------------------------- */
/* Hard Override for Top Navbar Background (Purple Removal) */
nav.o_main_navbar,
.o_main_navbar {
background: #fecd4f !important;
/* If the user wants the TAB background changed, we target the menu items */
border-bottom: 2px solid var(--primary-color) !important;
}
/* Top Menu Tabs (Dashboards, Configuration) */
.o_main_navbar .o_menu_sections .dropdown-item,
.o_main_navbar .o_menu_sections .o_nav_entry {
background: transparent !important;
color: #2bb1a5 !important;
font-weight: 600 !important;
border-radius: 8px !important;
margin: 0 4px !important;
}
/* Active Tab / Hover State */
.o_main_navbar .o_menu_sections .o_nav_entry:hover,
.o_main_navbar .o_menu_sections .show .dropdown-toggle {
background-color: var(--primary-color) !important;
/* Yellow Active Background */
color: #fff !important;
}
/* Dashboard Sidebar (Finance/Logistics) */
.o_notebook .nav.nav-tabs,
.o_dashboard_view .o_group_selector {
background: rgba(255, 255, 255, 0.6) !important;
backdrop-filter: blur(10px);
border-right: 1px solid rgba(0, 0, 0, 0.05);
padding: 15px !important;
}
.o_notebook .nav-link,
.o_dashboard_view .o_group_selector li {
color: var(--secondary-color) !important;
/* Teal Text */
border: none !important;
border-radius: 10px !important;
margin-bottom: 8px !important;
padding: 10px 15px !important;
font-weight: 500 !important;
transition: all 0.2s ease;
}
.o_notebook .nav-link.active,
.o_dashboard_view .o_group_selector li.selected {
background: var(--gradient-primary) !important;
color: #fff !important;
box-shadow: 0 4px 10px rgba(254, 205, 79, 0.3) !important;
}
/* Dashboard KPI Cards (Invoiced, Average Invoice, DSO) */
.o_dashboard_view .o_group .o_aggregate,
.o_group .o_group_col_6 {
background: #fff !important;
border-radius: 15px !important;
padding: 20px !important;
box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05) !important;
border: 1px solid rgba(0, 0, 0, 0.02) !important;
transition: transform 0.3s ease !important;
margin-bottom: 20px !important;
}
.o_dashboard_view .o_group .o_aggregate:hover {
transform: translateY(-5px) !important;
box-shadow: 0 10px 25px rgba(43, 177, 165, 0.15) !important;
border-color: var(--secondary-color) !important;
}
/* Value Text in Cards */
.o_dashboard_view .o_group .o_aggregate .o_value {
color: var(--secondary-color) !important;
font-weight: 800 !important;
font-size: 2rem !important;
}
.o_dashboard_view .o_group .o_aggregate label {
color: #718096 !important;
font-size: 0.9rem !important;
text-transform: uppercase;
letter-spacing: 1px;
}
/* Charts Background */
.o_graph_view {
background: transparent !important;
}
.o_graph_canvas_container canvas {
background: rgba(255, 255, 255, 0.5) !important;
border-radius: 15px;
padding: 10px;
}
/* Links */
a,
.o_form_uri,
.oe_link {
color: var(--primary-color) !important;
.oe_link,
.btn-link {
color: var(--secondary-color) !important;
/* Switched to teal for better readibility on white */
}
a:hover,
.o_form_uri:hover,
.oe_link:hover {
.oe_link:hover,
.btn-link:hover {
color: var(--primary-dark) !important;
}
/* Active/Selected States */
/* Nav & Menu Active States */
.nav-link.active,
.o_menu_sections .dropdown-item.active,
.o_kanban_record.o_kanban_record_has_image_fill.oe_kanban_global_click_edit.o_kanban_record_selected {
background-color: var(--primary-light) !important;
color: #fff !important;
.o_menu_brand:hover {
color: var(--secondary-color) !important;
border-bottom-color: var(--secondary-color) !important;
}
/* Badges */
@ -91,64 +450,140 @@ a:hover,
/* Progress bars */
.progress-bar {
background-color: var(--primary-color) !important;
background-color: var(--secondary-color) !important;
}
/* Checkboxes and Radio buttons */
.custom-checkbox .custom-control-input:checked~.custom-control-label::before,
/* Checkboxes and Radios */
.custom-control-input:checked~.custom-control-label::before,
.o_checkbox input:checked+label::before {
background-color: var(--primary-color) !important;
border-color: var(--primary-color) !important;
background-color: var(--secondary-color) !important;
border-color: var(--secondary-color) !important;
}
/* Focus states */
/* Form Controls - Focus using Secondary (Teal) like Login Page */
.form-control:focus,
.o_input:focus {
border-color: var(--primary-color) !important;
box-shadow: 0 0 0 0.2rem rgba(254, 205, 79, 0.25) !important;
.o_input:focus,
.o_searchview_input:focus {
border-color: var(--secondary-color) !important;
box-shadow: 0 0 0 0.2rem rgba(43, 177, 165, 0.25) !important;
}
/* Odoo Navbar */
.o_main_navbar {
/* The old .o_main_navbar and .o_main_navbar .o_menu_brand rules are replaced by the new glassmorphism styles above. */
/* Loading Bar */
.o_loading {
background-color: var(--primary-color) !important;
}
/* Odoo Menu Items */
.o_menu_sections button.active,
.o_menu_sections .dropdown-item.focus,
.o_menu_sections .dropdown-item:focus {
background-color: var(--primary-light) !important;
/* Backend View Headers */
.o_list_view .o_list_table thead,
.o_kanban_view .o_kanban_group_header {
background-color: #f8f9fa;
border-bottom: 2px solid var(--primary-color) !important;
color: #4a5568 !important;
font-weight: 600 !important;
}
/* Kanban View Selected */
/* Kanban Records Selected */
.o_kanban_record.o_kanban_record_selected {
box-shadow: 0 0 0 2px var(--primary-color) !important;
}
/* Pagination */
.page-item.active .page-link {
background-color: var(--primary-color) !important;
border-color: var(--primary-color) !important;
background-color: var(--secondary-color) !important;
border-color: var(--secondary-color) !important;
}
/* Tabs */
.nav-tabs .nav-link.active {
border-bottom-color: var(--primary-color) !important;
color: var(--primary-color) !important;
/* Switcher/Toggle */
.o_switch.custom-switch .custom-control-input:checked~.custom-control-label::before {
background-color: var(--secondary-color) !important;
}
/* Dropdown active items */
/* Calendar Today */
.fc-day-today {
background-color: rgba(254, 205, 79, 0.1) !important;
}
/* ---------------------------------------------------------
HEADER SUBMENU DROPDOWN NAVIGATION
--------------------------------------------------------- */
/* Dropdown Container - Floating & High Z-Index */
.dropdown-menu {
background: #ffffff !important;
/* Solid background to prevent transparent overlap issues */
border: 1px solid #e2e8f0 !important;
border-radius: 12px !important;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.15) !important;
padding: 8px !important;
margin-top: 5px !important;
z-index: 9999 !important;
/* Do not force position:absolute; let Odoo/Popper place it, just enforce z-index */
}
/* Navbar Icons (Systray & App Switcher) Custom Color */
.o_main_navbar .o_menu_systray .o_nav_entry i,
.o_main_navbar .o_menu_apps .o_app_drawer i,
.o_main_navbar .o_menu_sections .fa {
color: var(--secondary-color) !important;
/* Teal Icons */
font-size: 1.1rem !important;
transition: all 0.2s ease !important;
}
.o_main_navbar .o_menu_systray .o_nav_entry:hover i,
.o_main_navbar .o_menu_apps .o_app_drawer:hover i {
color: var(--primary-dark) !important;
/* Dark Yellow on Hover */
transform: scale(1.1);
text-shadow: 0 2px 10px rgba(254, 205, 79, 0.5);
}
/* Dropdown Items */
.dropdown-item {
color: #4a5568 !important;
padding: 10px 15px !important;
border-radius: 8px !important;
font-weight: 500 !important;
transition: all 0.2s ease !important;
margin-bottom: 2px !important;
position: relative !important;
z-index: 10000 !important;
background: transparent;
/* Default transparent */
}
/* Dropdown Item Hover */
.dropdown-item:hover,
.dropdown-item:focus {
background: var(--gradient-primary) !important;
color: #fff !important;
/* Removed transform translateX to fix jitter/overlap bugs */
box-shadow: 0 4px 10px rgba(254, 205, 79, 0.2);
}
/* Dropdown Header/Divider */
.dropdown-divider {
border-top: 1px solid rgba(0, 0, 0, 0.06) !important;
margin: 8px 0 !important;
}
.dropdown-header {
color: var(--secondary-color) !important;
/* Teal Header */
font-weight: 700 !important;
text-transform: uppercase;
font-size: 0.75rem !important;
letter-spacing: 0.05em;
padding: 8px 15px !important;
background: transparent !important;
}
/* Active Dropdown Item */
.dropdown-item.active,
.dropdown-item:active {
background-color: var(--primary-color) !important;
}
/* Status bar buttons */
.o_statusbar_status button.btn-primary.disabled {
background-color: var(--primary-light) !important;
}
/* Search bar focus */
.o_searchview_input:focus {
border-color: var(--primary-color) !important;
background: var(--gradient-primary) !important;
color: #fff !important;
}

View File

@ -0,0 +1,11 @@
/** @odoo-module **/
import { WebClient } from "@web/webclient/webclient";
import { patch } from "@web/core/utils/patch";
patch(WebClient.prototype, {
setup() {
super.setup();
this.title.setParts({ brand: "Chennora" });
}
});

View File

@ -8,14 +8,31 @@
<div class="o_home_menu_background">
<!-- Top Bar -->
<div class="o_home_top_bar">
<span class="o_top_icon o_ai_icon" title="AI">AI</span>
<span class="o_top_icon fa fa-comments" title="Messages">
<span class="badge_dot"/>
</span>
<span class="o_top_icon fa fa-clock-o" title="Activities"/>
<span class="o_top_icon fa fa-cog" title="Settings"/>
<div class="o_user_avatar">
<t t-esc="user_id.name[0] if user_id else 'U'"/>
<div class="o_top_bar_island">
<div class="o_top_item" title="AI Assistant">
<span class="o_ai_icon">AI</span>
</div>
<div class="o_top_item" title="Search">
<i class="fa fa-search"/>
</div>
<div class="o_top_item" title="Messages">
<i class="fa fa-comments-o"/>
<span class="badge_dot"/>
</div>
<div class="o_top_item" title="Settings">
<i class="fa fa-sliders"/>
</div>
<div class="o_bar_divider"></div>
<div class="o_user_avatar_container">
<div class="o_user_avatar">
<t t-esc="user_id.name[0] if user_id else 'U'"/>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,7 @@
<odoo>
<template id="chennora_web_layout" inherit_id="web.layout" name="Chennora Title">
<xpath expr="//title" position="replace">
<title>Chennora</title>
</xpath>
</template>
</odoo>