body, .o_form_view, .o_form_view .o_field_widget, .o_form_view label, .o_form_view .o_wrap_label, .o_form_view h1, .o_form_view h2, .o_form_view h3, .o_list_renderer th, .o_list_renderer td, .o_main_navbar .o_menu_brand, .o_main_navbar .o_menu_sections a, .breadcrumb, .o_statusbar_status button, select, select option, .o_field_selection select, .o_field_selection select option, .o_select_menu, .o_select_menu .o_select_menu_item, .o_select_menu_item_label, .dropdown-menu, .dropdown-menu .dropdown-item, .o_field_many2one_selection .o_external_button, .ui-autocomplete, .ui-autocomplete .ui-menu-item { font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } .o_main_navbar, .o_main_navbar .o_menu_sections, .o_main_navbar .o_menu_sections > *, .o_main_navbar .o_menu_brand, .o_navbar, .o_menu_sections { background-color: #0a5e98 !important; background: #0a5e98 !important; } /* Section header - orange/brown like design */ .o_xf_section_header { color: #c0392b; font-weight: bold; font-size: 1.1rem; margin: 16px 0 8px 0; } /* Approvers group title font size */ .o_group.o_inner_group .o_horizontal_separator, .o_horizontal_separator { font-size: 1.2rem !important; font-weight: bold !important; } /* Make source container full width matching the table */ .o_xf_source_container { width: 100% !important; box-sizing: border-box !important; margin: 0 !important; } .o_xf_source_label { white-space: nowrap !important; flex-shrink: 0 !important; min-width: 180px !important; display: flex !important; align-items: center !important; justify-content: center !important; } .o_xf_source_container { align-items: stretch !important; } .o_xf_source_container > div { display: flex !important; align-items: center !important; } /* Inline radio widget using field name selector */ [name="document_source"] { display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; align-items: center !important; } [name="document_source"] .o_radio_item { display: inline-flex !important; align-items: center !important; white-space: nowrap !important; flex-shrink: 0 !important; margin: 0 !important; } [name="document_source"] .o_radio_item:not(:last-child)::after { content: '|' !important; margin: 0 10px !important; color: #999 !important; } [name="document_source"] input[type="radio"] { display: none !important; } [name="document_source"] label { cursor: pointer !important; color: #0a5e98 !important; margin: 0 !important; padding: 0 !important; font-weight: normal !important; background: none !important; border: none !important; white-space: nowrap !important; } [name="document_source"] .o_radio_item.o_checked label { font-weight: bold !important; color: #000 !important; } /* ── Confirmation dialog — Khmer ── */ /* Title: replace "Confirmation" */ .o_dialog .modal-title { font-size: 0 !important; color: transparent !important; } .o_dialog .modal-title::after { content: 'ការបញ្ជាក់' !important; font-size: 1.1rem !important; color: #000 !important; font-weight: 600 !important; font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } /* OK button: target buttons with no [name] attr (confirmation dialog only) */ .o_dialog .modal-footer button.btn-primary:not([name]) { font-size: 0 !important; color: transparent !important; } .o_dialog .modal-footer button.btn-primary:not([name])::after { content: 'យល់ព្រម' !important; font-size: 0.875rem !important; color: #fff !important; font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } /* Cancel button: no [name], no [special] = confirmation dialog Cancel */ .o_dialog .modal-footer button.btn-secondary:not([name]):not([special]) { font-size: 0 !important; color: transparent !important; } .o_dialog .modal-footer button.btn-secondary:not([name]):not([special])::after { content: 'បោះបង់' !important; font-size: 0.875rem !important; color: #212529 !important; font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } /* Wizard Cancel button (special="cancel") */ .o_dialog .modal-footer button[special="cancel"] { font-size: 0 !important; color: transparent !important; } .o_dialog .modal-footer button[special="cancel"]::after { content: 'បោះបង់' !important; font-size: 0.875rem !important; color: #212529 !important; font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } /* ── Chatter buttons — Khmer ── */ .o_chatter_button_new_message { font-size: 0 !important; color: transparent !important; } .o_chatter_button_new_message::after { content: 'ផ្ញើសារ' !important; font-size: 0.875rem !important; color: #fff !important; font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } .o_chatter_button_log_note { font-size: 0 !important; color: transparent !important; } .o_chatter_button_log_note::after { content: 'កត់សម្គាល់' !important; font-size: 0.875rem !important; color: inherit !important; font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } /* Replace "Add a line" with Khmer in approver table */ .o_field_one2many[name="approver_ids"] a[role="button"] { font-size: 0 !important; color: transparent !important; } .o_field_one2many[name="approver_ids"] a[role="button"]::after { content: 'បន្ថែម' !important; font-size: 0.875rem !important; color: #0a5e98 !important; font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } /* Remove background from sort icon in approver table header */ .o_field_one2many[name="approver_ids"] .o_list_sortable_icon { background: none !important; background-color: transparent !important; color: #ffffff !important; } /* Approver table - header */ .o_form_view .o_field_one2many .o_list_renderer thead th { background-color: #2e75b6 !important; color: #ffffff !important; text-align: center !important; padding: 8px 10px !important; font-weight: bold !important; border: 1px solid #1a5a96 !important; white-space: nowrap; } /* Approver table - rows */ .o_form_view .o_field_one2many .o_list_renderer tbody td { padding: 6px 10px !important; border: 1px solid #d0d0d0 !important; vertical-align: middle !important; text-align: center !important; } /* Approver table - alternating rows */ .o_form_view .o_field_one2many .o_list_renderer tbody tr:nth-child(odd) td { background-color: #ffffff !important; } .o_form_view .o_field_one2many .o_list_renderer tbody tr:nth-child(even) td { background-color: #e8f0f9 !important; } /* Hover row highlight */ .o_form_view .o_field_one2many .o_list_renderer tbody tr:hover td { background-color: #cce0f5 !important; } /* Remove default Odoo row borders */ .o_form_view .o_field_one2many .o_list_renderer table { border-collapse: collapse !important; width: 100% !important; } /* Hide selection checkbox in approver_ids list */ .o_field_one2many[name="approver_ids"] .o_list_record_selector, .o_field_one2many[name="approver_ids"] .o_list_record_selector * { display: none !important; width: 0 !important; min-width: 0 !important; padding: 0 !important; margin: 0 !important; border: none !important; } .o_field_one2many[name="approver_ids"] input[type="checkbox"] { display: none !important; } .btn-primary, .o_form_button_save, button.oe_highlight, .o_statusbar_buttons .oe_highlight { background-color: #0a5e98 !important; border-color: #0a5e98 !important; color: #fff !important; } /* =================================================== Section ខ — Modern Card Design =================================================== */ /* Section title */ .o_xf_section_b .o_horizontal_separator { font-size: 1.05rem !important; font-weight: 700 !important; color: #0a5e98 !important; padding: 6px 0 10px 2px !important; border-bottom: 2px solid #0a5e98 !important; margin-bottom: 12px !important; } /* Card wrapper */ .o_xf_table { width: 100% !important; background: #ffffff !important; border-radius: 10px !important; box-shadow: 0 2px 8px rgba(10, 94, 152, 0.10), 0 0 0 1px #dde8f5 !important; overflow: hidden !important; } /* ── Row ── */ .o_xf_row { display: flex !important; min-height: 50px !important; border-bottom: 1px solid #eef3fa !important; } .o_xf_row:last-child { border-bottom: none !important; } .o_xf_row_tall { align-items: stretch !important; min-height: 80px !important; } /* ── Label cell ── */ .o_xf_cell_label { flex: 0 0 200px !important; width: 200px !important; background: #f4f7fb !important; border-right: 3px solid #0a5e98 !important; padding: 0 16px !important; display: flex !important; align-items: center !important; font-size: 0.875rem !important; font-weight: 600 !important; color: #234d73 !important; white-space: nowrap !important; } /* ── Value cell ── */ .o_xf_cell_value { flex: 1 !important; padding: 0 16px !important; display: flex !important; align-items: center !important; background: #ffffff !important; min-width: 0 !important; } .o_xf_cell_value > .o_field_widget { width: 100% !important; min-width: 0 !important; } /* Input fields inside value cell — clean underline style */ .o_xf_cell_value .o_field_widget input.o_input, .o_xf_cell_value .o_field_widget textarea.o_input { border: none !important; border-bottom: 1.5px solid #d0dcea !important; border-radius: 0 !important; background: transparent !important; padding: 4px 2px !important; font-size: 0.9rem !important; color: #1a3550 !important; width: 100% !important; transition: border-color 0.15s !important; } .o_xf_cell_value .o_field_widget input.o_input:focus, .o_xf_cell_value .o_field_widget textarea.o_input:focus { border-bottom-color: #0a5e98 !important; outline: none !important; box-shadow: none !important; } /* Many2one field styling */ .o_xf_cell_value .o_field_many2one .o_input_dropdown input { border: none !important; border-bottom: 1.5px solid #d0dcea !important; border-radius: 0 !important; background: transparent !important; font-size: 0.9rem !important; color: #1a3550 !important; } .o_xf_cell_value .o_field_many2one .o_input_dropdown input:focus { border-bottom-color: #0a5e98 !important; box-shadow: none !important; } /* Selection (dropdown) field */ .o_xf_cell_value .o_field_selection select, .o_xf_cell_value .o_field_widget select { border: none !important; border-bottom: 1.5px solid #d0dcea !important; border-radius: 0 !important; background: transparent !important; font-size: 0.9rem !important; color: #1a3550 !important; padding: 4px 2px !important; width: 100% !important; } /* Read-only values */ .o_xf_cell_value .o_field_widget.o_readonly, .o_xf_cell_value .o_field_char.o_field_readonly, .o_form_readonly .o_xf_cell_value .o_field_widget { font-size: 0.9rem !important; color: #1a3550 !important; font-weight: 500 !important; } /* Placeholder text */ .o_xf_cell_value input::placeholder, .o_xf_cell_value textarea::placeholder { color: #b0bec5 !important; font-style: italic !important; font-size: 0.85rem !important; } /* ── Tall value cell (documents / description) ── */ .o_xf_cell_tall { align-items: flex-start !important; padding-top: 10px !important; padding-bottom: 10px !important; } /* ── Split cell: file | note ── */ .o_xf_cell_split { padding: 0 !important; align-items: stretch !important; } .o_xf_split_left, .o_xf_split_right { flex: 1 !important; display: flex !important; flex-direction: column !important; justify-content: center !important; padding: 8px 16px !important; gap: 5px !important; } .o_xf_split_divider { width: 1px !important; background: #dde8f5 !important; flex-shrink: 0 !important; } .o_xf_split_hint { font-size: 0.7rem !important; color: #90aac4 !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.07em !important; } .o_xf_split_left .o_field_widget, .o_xf_split_right .o_field_widget { width: 100% !important; } /* ── Upload zone (ឯកសារ row) ── */ .o_xf_upload_zone { flex-direction: column !important; align-items: flex-start !important; gap: 8px !important; padding: 12px 16px !important; } .o_xf_upload_zone > .o_field_widget { width: 100% !important; } /* Wrapper for the whole many2many_binary widget */ .o_xf_upload_zone .o_field_many2many_binary { display: flex !important; flex-direction: column !important; gap: 6px !important; width: 100% !important; } /* ── Style the raw file input ── */ .o_xf_upload_zone input[type="file"] { width: 100% !important; font-size: 0.84rem !important; color: #555 !important; cursor: pointer !important; border: 1.5px dashed #a0bfdf !important; border-radius: 8px !important; padding: 8px 12px !important; background: #f7fafd !important; transition: border-color 0.15s, background 0.15s !important; } .o_xf_upload_zone input[type="file"]:hover { border-color: #0a5e98 !important; background: #edf4ff !important; } /* "Choose Files" browser button part */ .o_xf_upload_zone input[type="file"]::file-selector-button { padding: 5px 16px !important; border: none !important; border-radius: 5px !important; background: #0a5e98 !important; color: #ffffff !important; font-size: 0.83rem !important; font-weight: 600 !important; cursor: pointer !important; margin-right: 12px !important; transition: background 0.15s !important; font-family: 'Segoe UI', Roboto, Arial, 'Battambang', sans-serif !important; } .o_xf_upload_zone input[type="file"]::file-selector-button:hover { background: #084e82 !important; } /* ── Uploaded file rows ── */ .o_xf_upload_zone .o_field_many2many_binary .o_attachments, .o_xf_upload_zone .o_field_many2many_binary ul { width: 100% !important; display: flex !important; flex-direction: column !important; gap: 5px !important; list-style: none !important; padding: 0 !important; margin: 0 !important; } .o_xf_upload_zone .o_field_many2many_binary .o_attachment, .o_xf_upload_zone .o_field_many2many_binary li { display: flex !important; align-items: center !important; gap: 8px !important; padding: 6px 12px !important; background: #edf4ff !important; border: 1px solid #c5daef !important; border-radius: 6px !important; font-size: 0.84rem !important; color: #1a3d5c !important; } .o_xf_upload_zone .o_field_many2many_binary .o_attachment a, .o_xf_upload_zone .o_field_many2many_binary li a { color: #0a5e98 !important; text-decoration: none !important; font-weight: 500 !important; flex: 1 !important; } .o_xf_upload_zone .o_field_many2many_binary .o_attachment a:hover, .o_xf_upload_zone .o_field_many2many_binary li a:hover { text-decoration: underline !important; } /* Delete button */ .o_xf_upload_zone .o_field_many2many_binary .o_delete, .o_xf_upload_zone .o_field_many2many_binary .delete { color: #c0392b !important; opacity: 0.55 !important; cursor: pointer !important; font-size: 0.9rem !important; margin-left: auto !important; } .o_xf_upload_zone .o_field_many2many_binary .o_delete:hover { opacity: 1 !important; } /* ── document_ids list in non-draft (ឯកសារ row) ── */ .o_xf_doc_list .o_list_renderer { border: none !important; box-shadow: none !important; } .o_xf_doc_list .o_list_renderer thead { display: none !important; } .o_xf_doc_list .o_list_renderer tbody td { border: none !important; padding: 3px 6px !important; background: transparent !important; } .o_xf_doc_list .o_list_renderer tbody tr { display: flex !important; align-items: center !important; gap: 8px !important; padding: 4px 8px !important; background: #edf4ff !important; border: 1px solid #c5daef !important; border-radius: 6px !important; margin-bottom: 4px !important; } /* ── File download list (non-draft state) ── */ .o_xf_files_list { display: flex !important; flex-direction: column !important; gap: 5px !important; width: 100% !important; padding: 4px 0 !important; } .o_xf_file_item { display: flex !important; align-items: center !important; gap: 8px !important; padding: 6px 12px !important; background: #edf4ff !important; border: 1px solid #c5daef !important; border-radius: 6px !important; font-size: 0.84rem !important; } .o_xf_file_item a { color: #0a5e98 !important; text-decoration: none !important; font-weight: 500 !important; flex: 1 !important; } .o_xf_file_item a:hover { text-decoration: underline !important; } .o_xf_file_icon { color: #5a9fd4 !important; font-size: 0.85rem !important; } /* ── Readonly many2many_binary: ensure files are always visible ── */ .o_xf_upload_zone .o_field_many2many_binary { display: flex !important; flex-direction: column !important; gap: 6px !important; width: 100% !important; } /* Odoo 19 OWL: readonly renders files as links directly */ .o_xf_upload_zone .o_field_many2many_binary a, .o_xf_upload_zone .o_field_many2many_binary .o_form_uri, .o_xf_upload_zone .o_field_many2many_binary span[title] { display: inline-flex !important; align-items: center !important; gap: 6px !important; padding: 6px 12px !important; background: #edf4ff !important; border: 1px solid #c5daef !important; border-radius: 6px !important; font-size: 0.84rem !important; color: #0a5e98 !important; text-decoration: none !important; font-weight: 500 !important; } .o_xf_upload_zone .o_field_many2many_binary a:hover { text-decoration: underline !important; background: #dceeff !important; } /* ── QR Code section ── */ .o_xf_qr_group { margin-top: 16px !important; padding: 24px 20px !important; background: #f7fafd !important; border-radius: 10px !important; border: 1px dashed #b0cce8 !important; display: flex !important; flex-direction: column !important; align-items: center !important; gap: 10px !important; } .o_xf_qr_label { font-size: 0.78rem !important; color: #7a9ec0 !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 0.09em !important; } .o_xf_qr_group .o_field_image img { border-radius: 8px !important; box-shadow: 0 2px 12px rgba(0,0,0,0.13) !important; border: 4px solid #ffffff !important; }