পাঠ ৪৩ · ৫৭-এর মধ্যে · মডিউল ১০
Home / Courses / Human-Computer Interaction / অ্যাক্সেসিবিলিটির ভিত্তি

অ্যাক্সেসিবিলিটির ভিত্তি — WCAG ও ডিজেবিলিটি ক্যাটাগরি

Accessibility fundamentals — WCAG & disability categories
৯ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • অ্যাক্সেসিবিলিটি কী এবং কেন এটি HCI-এর একটি মূল স্তম্ভ, নিছক ঐচ্ছিক সংযোজন নয়
  • WCAG-এর POUR স্ট্রাকচার এবং A/AA/AAA কনফরম্যান্স লেভেল কীভাবে কাজ করে
  • ভিজ্যুয়াল, অডিটরি, মোটর ও কগনিটিভ ডিজেবিলিটি ক্যাটাগরি ইন্টারফেস ডিজাইনে কী কী বাস্তব প্রভাব ফেলে
  • WCAG-এর প্রকৃত রিলেটিভ-লুমিনেন্স কনট্রাস্ট-রেশিও সূত্র সরাসরি Python-এ প্রয়োগ করে গণনা করা

১ · অ্যাক্সেসিবিলিটি কী এবং কেন এটি গুরুত্বপূর্ণ

অ্যাক্সেসিবিলিটিAccessibilityএমনভাবে পণ্য, ডিভাইস, পরিষেবা বা পরিবেশ ডিজাইন করা যাতে যতটা সম্ভব বেশি মানুষ — তাদের শারীরিক, সেন্সরি বা কগনিটিভ ক্ষমতা নির্বিশেষে — তা ব্যবহার করতে পারেন। মানে এমনভাবে একটি ইন্টারফেস তৈরি করা যাতে ভিন্ন ভিন্ন ধরনের ক্ষমতা-থাকা মানুষও সেটি ব্যবহার করতে পারেন। এটি কোনো "অতিরিক্ত ফিচার" বা ছোট একটি ব্যবহারকারী-গোষ্ঠীর জন্য বিশেষ সুবিধা নয় — বিশ্বব্যাপী উল্লেখযোগ্য সংখ্যক মানুষ কোনো না কোনো ধরনের ডিজেবিলিটির সাথে বাস করেন, এবং একটি সিস্টেম যদি তাদের বাদ দিয়ে ডিজাইন করা হয়, তাহলে সেটি নিছক ছোট একটি বাগ নয় — একটি পুরো ব্যবহারকারী-গোষ্ঠীকে সম্পূর্ণভাবে বাদ দেওয়া।

M4-এ আমরা ইউজেবিলিটি নিয়ে বিস্তারিত আলোচনা করেছি — লার্নেবিলিটি, এফিসিয়েন্সি, এরর রেট ইত্যাদি। অ্যাক্সেসিবিলিটিকে এই একই ফ্রেমের একটি সম্প্রসারণ হিসেবে ভাবা যায়: একটি ইন্টারফেস "ইউজেবল" তখনই সত্যিকারভাবে বলা যায় যখন এটি বিভিন্ন ক্ষমতার ব্যবহারকারীদের জন্যও ইউজেবল। একটি বাটন যা মাউস-ব্যবহারকারীর জন্য নিখুঁত কিন্তু স্ক্রিন-রিডার ব্যবহারকারীর কাছে সম্পূর্ণ অদৃশ্য — সেটি অর্ধেক কাজ করা একটি ডিজাইন।

২ · WCAG-এর POUR স্ট্রাকচার

WCAG (Web Content Accessibility Guidelines) হলো W3C-এর তৈরি সবচেয়ে ব্যাপকভাবে গৃহীত অ্যাক্সেসিবিলিটি স্ট্যান্ডার্ড, এবং এটি চারটি মূল নীতির উপর গঠিত — সংক্ষেপে POUR:

Perceivable (উপলব্ধিযোগ্য)
তথ্য ও UI উপাদান ব্যবহারকারীর কাছে এমনভাবে উপস্থাপিত হতে হবে যা তারা উপলব্ধি করতে পারেন — যেমন ছবির জন্য alt টেক্সট, ভিডিওর জন্য ক্যাপশন, পর্যাপ্ত রঙের কনট্রাস্ট।
Operable (পরিচালনাযোগ্য)
UI উপাদান ও নেভিগেশন পরিচালনাযোগ্য হতে হবে — যেমন সব ফাংশনালিটি শুধু কীবোর্ড দিয়েই অ্যাক্সেসযোগ্য, ব্যবহারকারীর জন্য পর্যাপ্ত সময়, খিঁচুনি-উদ্রেককারী ফ্ল্যাশ এড়ানো।
Understandable (বোধগম্য)
তথ্য ও UI-এর অপারেশন বোধগম্য হতে হবে — স্পষ্ট ভাষা, প্রেডিক্টেবল নেভিগেশন, ইনপুট এরর সনাক্ত ও সংশোধনে সহায়তা।
Robust (দৃঢ়/নির্ভরযোগ্য)
কনটেন্ট এতটাই দৃঢ়ভাবে তৈরি হতে হবে যাতে বিভিন্ন ইউজার এজেন্ট — ব্রাউজার, স্ক্রিন রিডার, ভবিষ্যতের অ্যাসিস্টিভ টেকনোলজি — দিয়ে নির্ভরযোগ্যভাবে ব্যাখ্যা করা যায়, যেমন সঠিক সিমান্টিক HTML।

প্রতিটি POUR নীতির অধীনে WCAG-এর নির্দিষ্ট সাকসেস ক্রাইটেরিয়া আছে, যেগুলো তিনটি কনফরম্যান্স লেভেলে ভাগ করা — A (সর্বনিম্ন, মৌলিক), AA (বেশিরভাগ আইন ও অর্গানাইজেশনের বাস্তব লক্ষ্য — যেমন রঙের কনট্রাস্ট কমপক্ষে ৪.৫:১), এবং AAA (সর্বোচ্চ, সবসময় সব কনটেন্টে অর্জনযোগ্য নয় — যেমন কনট্রাস্ট কমপক্ষে ৭:১)। এই পাঠের কোড ডেমোতে আমরা ঠিক এই AA ও AAA কনট্রাস্ট থ্রেশহোল্ড দুটোই সত্যিকারের সূত্র দিয়ে যাচাই করব।

৩ · ইন্টারফেস ডিজাইনে প্রাসঙ্গিক প্রধান ডিজেবিলিটি ক্যাটাগরি

অ্যাক্সেসিবল ডিজাইনের জন্য বোঝা দরকার বিভিন্ন ধরনের ডিজেবিলিটি ইন্টারফেসের সাথে কীভাবে ভিন্নভাবে মিথস্ক্রিয়া করে। চারটি বিস্তৃত ক্যাটাগরি বিশেষভাবে প্রাসঙ্গিক:

ভিজ্যুয়াল
সম্পূর্ণ অন্ধত্ব থেকে শুরু করে কম দৃষ্টিশক্তি, রঙ-অন্ধত্ব পর্যন্ত। প্রভাব: স্ক্রিন রিডার নির্ভরতা, উচ্চ কনট্রাস্ট প্রয়োজন, শুধু রঙের উপর নির্ভর করে তথ্য দেওয়া চলবে না (M44-এ বিস্তারিত)।
অডিটরি
শ্রবণশক্তি হ্রাস বা সম্পূর্ণ বধিরতা। প্রভাব: অডিও কনটেন্টের জন্য ক্যাপশন/ট্রান্সক্রিপ্ট আবশ্যক, শুধু শব্দ-ভিত্তিক সতর্কতা (যেমন শুধু একটি "বিপ") যথেষ্ট নয়।
মোটর
কাঁপুনি, সীমিত হাত-নড়াচড়া, একহাতে ব্যবহার, বা সুইচ-অ্যাক্সেস নির্ভরতা। প্রভাব: বড় ক্লিক-টার্গেট (M9-এ ফিটস'স ল), সম্পূর্ণ কীবোর্ড-নেভিগেশন, টাইম-লিমিটেড অ্যাকশন এড়ানো।
কগনিটিভ
মেমরি, অ্যাটেনশন, রিডিং, বা প্রসেসিং-স্পিডে ভিন্নতা (যেমন ডিসলেক্সিয়া, ADHD)। প্রভাব: সরল ভাষা, সামঞ্জস্যপূর্ণ লেআউট (M4/L18), অপ্রয়োজনীয় কগনিটিভ লোড এড়ানো (M2/L06)।

গুরুত্বপূর্ণ একটি বিষয় — এই ক্যাটাগরিগুলো একে অপরের সাথে ওভারল্যাপ করতে পারে, এবং একজন ব্যক্তির একাধিক ধরনের ডিজেবিলিটি থাকতে পারে। এছাড়া, একই ডিজেবিলিটি-ক্যাটাগরির মধ্যেও তীব্রতা ও ধরনে বিশাল বৈচিত্র্য থাকে — তাই "ভিজ্যুয়াল ডিজেবিলিটি" মানেই শুধু "সম্পূর্ণ অন্ধ ব্যবহারকারী" নয়। L45-এ আমরা দেখব কীভাবে স্থায়ী (permanent), সাময়িক (temporary), ও পরিস্থিতিগত (situational) অ্যাক্সেস-চ্যালেঞ্জ — যেমন একটি ভাঙা হাত, একটি কোলাহলপূর্ণ পরিবেশ, বা রোদে ছোট ফোন স্ক্রিন — একই ডিজাইন সমাধান থেকে উপকৃত হয়।

গুরুত্বপূর্ণ পার্থক্য

অ্যাক্সেসিবিলিটি প্রায়ই ভুলভাবে ভাবা হয় "একটি আলাদা, চেকলিস্ট-চালিত কাজ" হিসেবে যা ডিজাইন শেষে যোগ করা হয়। কিন্তু WCAG-এর POUR স্ট্রাকচার এবং M4-এ শেখা নীলসেনের হিউরিস্টিক্স, নরম্যানের ডিজাইন প্রিন্সিপল — সবই একই লক্ষ্যের দিকে ইঙ্গিত করে: এমন একটি ইন্টারফেস যা স্পষ্ট, প্রেডিক্টেবল, ও ব্যবহারযোগ্য। অ্যাক্সেসিবিলিটি সেই একই ভালো ডিজাইনের নীতিগুলোকে আরও কঠোরভাবে, আরও বৈচিত্র্যময় ব্যবহারকারীর জন্য প্রয়োগ করে।

৪ · একটি সত্যিকারের ডেমো — WCAG কনট্রাস্ট-রেশিও গণনা

WCAG-এর কনট্রাস্ট-রেশিও সূত্র শুরু হয় প্রতিটি রঙের রিলেটিভ লুমিনেন্স গণনা দিয়ে। প্রতিটি RGB চ্যানেল (0–255 রেঞ্জ থেকে 0–1 রেঞ্জে নরমালাইজ করার পর) প্রথমে লিনিয়ারাইজ করতে হয়:

$$c_{\text{lin}} = \begin{cases} c / 12.92 & \text{if } c \le 0.03928 \\ \left(\dfrac{c + 0.055}{1.055}\right)^{2.4} & \text{otherwise} \end{cases}$$

তারপর রিলেটিভ লুমিনেন্স ($L$) হলো এই লিনিয়ারাইজড চ্যানেলগুলোর ওজনযুক্ত যোগফল:

$$L = 0.2126 \cdot R + 0.7152 \cdot G + 0.0722 \cdot B$$

এবং দুটো রঙের মধ্যে কনট্রাস্ট রেশিও (যেখানে $L_1$ উজ্জ্বলতর রঙের লুমিনেন্স):

$$\text{Contrast} = \frac{L_1 + 0.05}{L_2 + 0.05}$$

নিচের কোড সেলে এই সূত্র দিয়ে ছয়টি ভিন্ন টেক্সট/ব্যাকগ্রাউন্ড রঙের জোড়া গণনা করে AA (৪.৫:১) ও AAA (৭:১) — নরমাল টেক্সটের জন্য দুটো থ্রেশহোল্ডের বিপরীতেই সত্যিকারের পাস/ফেল যাচাই করা হয়েছে।

Python
def linearize(c):
    c = c / 255
    if c <= 0.03928:
        return c / 12.92
    return ((c + 0.055) / 1.055) ** 2.4

def relative_luminance(r, g, b):
    R = linearize(r)
    G = linearize(g)
    B = linearize(b)
    return 0.2126 * R + 0.7152 * G + 0.0722 * B

def contrast_ratio(rgb1, rgb2):
    L1 = relative_luminance(*rgb1)
    L2 = relative_luminance(*rgb2)
    lighter, darker = max(L1, L2), min(L1, L2)
    return (lighter + 0.05) / (darker + 0.05)

AA, AAA = 4.5, 7.0  # WCAG-এর নরমাল-টেক্সট থ্রেশহোল্ড

pairs = [
    ("কালো / সাদা BG",              (0, 0, 0),       (255, 255, 255)),
    ("নেভি #0F172A / সাদা BG",      (15, 23, 42),    (255, 255, 255)),
    ("ধূসর #767676 / সাদা BG",      (118, 118, 118), (255, 255, 255)),
    ("হালকা ধূসর #AAAAAA / সাদা BG", (170, 170, 170), (255, 255, 255)),
    ("নীল #2563EB / সাদা BG",       (37, 99, 235),   (255, 255, 255)),
    ("হলুদ #FFD400 / সাদা BG",       (255, 212, 0),   (255, 255, 255)),
]

for name, fg, bg in pairs:
    ratio = contrast_ratio(fg, bg)
    aa = "PASS" if ratio >= AA else "FAIL"
    aaa = "PASS" if ratio >= AAA else "FAIL"
    print(f"{name:24s} ratio={ratio:5.2f}:1   AA={aa:4s}   AAA={aaa:4s}")

    
সত্যিকারের গণনায় দেখা যায় — কালো/সাদা কনট্রাস্ট ২১.০০:১ (AA ও AAA দুটোতেই PASS), গাঢ় নেভি #0F172A/সাদা কনট্রাস্ট ১৭.৮৫:১ (দুটোতেই PASS), কিন্তু ধূসর #767676/সাদা কনট্রাস্ট মাত্র ৪.৫৪:১ — AA-তে সবেমাত্র PASS কিন্তু AAA-তে FAIL। আরও হালকা ধূসর #AAAAAA/সাদা মাত্র ২.৩২:১ — AA-তেও FAIL। নীল লিংক #2563EB/সাদা ৫.১৭:১ — AA PASS কিন্তু AAA FAIL। আর হলুদ #FFD400/সাদা মাত্র ১.৪৩:১ — দুটোতেই স্পষ্টভাবে FAIL, যদিও দেখতে "উজ্জ্বল ও দৃষ্টিনন্দন" মনে হতে পারে। এখানেই দেখা যায় কেন AA প্রায়ই "যথেষ্ট" বাস্তব লক্ষ্য কিন্তু AAA অনেক বেশি কঠোর — একটি রঙের জোড়া AA পাস করলেই যে AAA পাস করবে, তা মোটেই নিশ্চিত নয়।
মূল কথা · Key takeaway

অ্যাক্সেসিবিলিটি কোনো বিষয়গত মতামত নয় — WCAG-এর POUR স্ট্রাকচার একটি সুসংগঠিত ফ্রেমওয়ার্ক দেয়, এবং কনট্রাস্ট-রেশিওর মতো নির্দিষ্ট নীতিগুলো একটি সঠিক গাণিতিক সূত্র দিয়ে সরাসরি যাচাইযোগ্য। পরবর্তী তিনটি পাঠে (L44–L46) আমরা স্ক্রিন রিডার ডিজাইন, ইনক্লুসিভ ডিজাইনের বিস্তৃত মাইন্ডসেট, ও ইউনিভার্সাল ডিজাইনের সাতটি প্রিন্সিপল নিয়ে আলোচনা করব।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ উপরের ডেমোতে হলুদ #FFD400/সাদা BG-এর কনট্রাস্ট মাত্র ১.৪৩:১ — অথচ অনেক ডিজাইনার হলুদকে "উজ্জ্বল ও দৃষ্টি-আকর্ষক" মনে করে ব্যবহার করেন। এই বৈপরীত্য কেন ঘটে?

"উজ্জ্বল দেখানো" আর "উচ্চ কনট্রাস্ট থাকা" এক জিনিস নয়। হলুদ নিজেই খুব উচ্চ লুমিনেন্স-বিশিষ্ট একটি রঙ — এটি সাদার লুমিনেন্সের কাছাকাছি, তাই সাদা ব্যাকগ্রাউন্ডের সাথে এর পার্থক্য (কনট্রাস্ট) আসলে খুব কম। একটি রঙ চোখে "উজ্জ্বল" লাগা এবং সেটি একটি নির্দিষ্ট ব্যাকগ্রাউন্ডের সাপেক্ষে "আলাদা করা সহজ" হওয়া — দুটো সম্পূর্ণ ভিন্ন বৈশিষ্ট্য, এবং শুধু চোখের অনুমানের উপর নির্ভর না করে সূত্র দিয়ে যাচাই করাই তাই জরুরি।

প্র ০২ একটি প্রোডাক্ট টিম বলছে "আমরা শুধু AA লেভেল টার্গেট করব, AAA নয়, কারণ সময় সীমিত।" এটি কি একটি যুক্তিসঙ্গত সিদ্ধান্ত?

সাধারণভাবে হ্যাঁ — বেশিরভাগ আইন ও সংগঠনের বাস্তব অনুশীলনে AA-ই মানদণ্ড, এবং WCAG নিজেই স্বীকার করে AAA সবসময় সব কনটেন্টে অর্জনযোগ্য নয় (যেমন কিছু ধরনের কনটেন্টে)। তবে টিমের বোঝা উচিত AA একটি "ন্যূনতম বাস্তব লক্ষ্য", উৎকর্ষের সীমা নয় — এবং যেখানে অতিরিক্ত খরচ ছাড়াই AAA অর্জনযোগ্য (যেমন টেক্সট রঙ পরিবর্তন করা প্রায় বিনামূল্যে), সেখানে AAA বেছে নেওয়া বাড়তি মূল্য দেয় না অথচ বেশি ব্যবহারকারীকে উপকৃত করে।

প্র ০৩ একজন ডিজাইনার শুধু "স্ক্রিন রিডার ব্যবহারকারীদের" কথা ভেবে অ্যাক্সেসিবিলিটি ডিজাইন করছেন। এই দৃষ্টিভঙ্গির সীমাবদ্ধতা কী?

এটি অ্যাক্সেসিবিলিটিকে শুধু "ভিজ্যুয়াল ডিজেবিলিটি" পর্যন্ত সীমাবদ্ধ করে ফেলে, অথচ অডিটরি, মোটর, ও কগনিটিভ ডিজেবিলিটিও সমানভাবে গুরুত্বপূর্ণ — একজন মোটর-ডিজেবিলিটি-থাকা ব্যবহারকারীর জন্য বড় ক্লিক-টার্গেট এবং সম্পূর্ণ কীবোর্ড-নেভিগেশন প্রয়োজন, যা স্ক্রিন রিডারের সাথে সরাসরি সম্পর্কিত নয়। বাস্তবসম্মত অ্যাক্সেসিবিলিটি ডিজাইনে চারটি ক্যাটাগরিই — এবং তাদের ওভারল্যাপ — বিবেচনায় রাখতে হয়।

অনুশীলন

  1. চিন্তা করুন: উপরের কোড সেলে নীল #2563EB/সাদা BG-এর কনট্রাস্ট ৫.১৭:১ — AA পাস কিন্তু AAA ফেল। যদি এই নীলকে আরও গাঢ় করা হয় (যেমন #1E40AF-এর মতো), কনট্রাস্ট বাড়বে না কমবে বলে আপনার ধারণা, এবং কেন?

    গাঢ় করলে রঙের লুমিনেন্স ($L$) কমে যাবে — এবং সাদা ব্যাকগ্রাউন্ডের (সবচেয়ে বেশি লুমিনেন্স, $L=1$) সাপেক্ষে যত কম লুমিনেন্স, তত বেশি কনট্রাস্ট রেশিও (সূত্রে $L_1 - L_2$-এর ব্যবধান বাড়ে)। তাই কনট্রাস্ট বাড়বে — এটাই কেন গাঢ় শেডের নীল প্রায়ই AAA-ও সহজে পাস করে, যেখানে হালকা/মাঝারি নীল শুধু AA পাস করে।

  2. পরীক্ষা করুন: উপরের কোড সেলে pairs তালিকায় নতুন একটি লাইন যোগ করুন — ("গাঢ় নীল #1E40AF / সাদা BG", (30, 64, 175), (255, 255, 255)) — এবং Run চেপে দেখুন এটি সত্যিই AAA পাস করে কিনা, আপনার অনুমান যাচাই করুন।

    #1E40AF/সাদা কনট্রাস্ট প্রায় ৮.৭২:১ — যা AA (৪.৫:১) ও AAA (৭:১) দুটোই পাস করে, ঠিক যেমন অনুমান করা হয়েছিল। এটি নিশ্চিত করে যে একই "নীল" রঙ পরিবারের মধ্যেও শেড বদলে কনফরম্যান্স লেভেল সম্পূর্ণ বদলে যেতে পারে — তাই ডিজাইন সিস্টেমে প্রতিটি টেক্সট/ব্যাকগ্রাউন্ড কম্বিনেশন আলাদাভাবে যাচাই করা জরুরি, শুধু "এটা তো নীল, তাই ঠিক আছে" ধরে নেওয়া যথেষ্ট নয়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ কগনিটিভ সাইকোলজি, ইন্টারঅ্যাকশন ডিজাইন, ইউজেবিলিটি হিউরিস্টিক্স, ইউজার রিসার্চ, প্রোটোটাইপিং, ইভালুয়েশন মেথড, ভিজ্যুয়াল ডিজাইন, অ্যাক্সেসিবিলিটি ও ক্যাপস্টোন — বাকি পাঠগুলো শীঘ্রই যুক্ত হবে।
  • Human-Centered AI কোর্স সহোদর কোর্স AI-নির্দিষ্ট ট্রাস্ট ক্যালিব্রেশন ও এক্সপ্লেইনেবিলিটির গভীর কভারেজ — এই কোর্স সাধারণ, AI-নিরপেক্ষ ইন্টারঅ্যাকশন ডিজাইনের ভিত্তি যোগ করে।
  • সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, Machine Learning, Deep Learning, System Design, Cybersecurity, Cloud Computing & DevOps, এবং আরও অনেক কোর্স — সব এক জায়গায়।
আগের পাঠ
ভয়েস ইউজার ইন্টারফেস ও কনভার্সেশনাল ডিজাইন